Witam!
Dziwny problem. Dlaczego? Zobaczcie.
Zapisuje do pamięci dane z klawiatury. Eeprom wygląda tak:
&H1C &H1B &H23 &H2B &H34 - czyli nic innego jak 'asdfg'.
Problem polega na tym. że nie wyświetla mi tych danych, pomimo tego, że ładuję je do tablicy (myślałem że to wina czasów odczytywania z eepromu wiec pierw zczytuje jego zawartość).
Dziwne jest to, że te wartości, które sa wpisane na sztywno (dane &H23
&H1C &H31 &H24) zostają poprawnie wyświetlone - ukazuje się na ekranie napis 'dane'.
Ktoś ma jakiś pomysł w czym tkwi problem?
Pozdrawiam.
Robert.
Dziwny problem. Dlaczego? Zobaczcie.
$crystal = 12000000
$regfile = "89c2051.dat"
Config Scl = P3.0
Config Sda = P3.1
Reset Tcon.0
Enable Interrupts
Enable Int0
On Int0 Odczyt
Const Adresw = 160 'adres do zapisu układu 2404
Const Adresr = 161
Dim P As Bit , A As Byte , X As Byte , Y As Byte , I As Byte
Dim Z(10) As Byte
Kbdclk Alias P3.3
Kbddta Alias P3.4
A = 0
I = 0
Wait 1
'---- Główna Pętla programu ----
Do
X = 0
If Kbdclk = 0 Then X = 0
Bitwait Kbdclk , Reset 'Oczekiwanie na znak od klawiatury.
Bitwait Kbdclk , Set
Bitwait Kbdclk , Reset
If Kbddta = 1 Then Set X.0
Bitwait Kbdclk , Set
Bitwait Kbdclk , Reset
If Kbddta = 1 Then Set X.1
Bitwait Kbdclk , Set
Bitwait Kbdclk , Reset
If Kbddta = 1 Then Set X.2
Bitwait Kbdclk , Set
Bitwait Kbdclk , Reset
If Kbddta = 1 Then Set X.3
Bitwait Kbdclk , Set
Bitwait Kbdclk , Reset
If Kbddta = 1 Then Set X.4
Bitwait Kbdclk , Set
Bitwait Kbdclk , Reset
If Kbddta = 1 Then Set X.5
Bitwait Kbdclk , Set
Bitwait Kbdclk , Reset
If Kbddta = 1 Then Set X.6
Bitwait Kbdclk , Set
Bitwait Kbdclk , Reset
If Kbddta = 1 Then Set X.7
Bitwait Kbdclk , Set
Bitwait Kbdclk , Reset
If Kbddta = 1 Then Set P
Bitwait Kbdclk , Set
Bitwait Kbdclk , Reset
Delay : Delay
Gosub Savei2c
Delay : Delay
Loop
'-------------------------------dane
Odczyt:
Wait 1
X = &H23
Gosub Przeslij
X = &H1C
Gosub Przeslij
X = &H31
Gosub Przeslij
X = &H24
Gosub Przeslij
'Delay
Wait 1
Gosub Readi2c
For I = 0 To 5
X = Z(i)
Gosub Przeslij
Next I
Delay
Return
Przeslij: 'Podprogram przesylajacy kod komputerowi:
A = 0 ' Sprawdzanie parzystosci bajtu przesylanego
If X.0 = 1 Then : A = A + 1 : End If ' co bedzie potrzebne w czasie transmisji.
If X.1 = 1 Then : A = A + 1 : End If ' Sprawdzanie to polega na policzeniu ilosci
If X.2 = 1 Then : A = A + 1 : End If ' "jedynek" w danym bajcie a nastepnie
If X.3 = 1 Then : A = A + 1 : End If ' sprawdzeniu, czy dzielenie tej liczby jedynek
If X.4 = 1 Then : A = A + 1 : End If ' przez 2 daje jakas reszte.
If X.5 = 1 Then : A = A + 1 : End If
If X.6 = 1 Then : A = A + 1 : End If
If X.7 = 1 Then : A = A + 1 : End If
A = A Mod 2
If A = 0 Then : Set P : Else : Reset P : End If
Kbddta = 0 : Delay : Kbdclk = 0 : Delay ' Przesylanie kodu komputerowi bit po bicie.
Kbddta = X.0 : Kbdclk = 1 : Delay : Kbdclk = 0 : Delay
Kbddta = X.1 : Kbdclk = 1 : Delay : Kbdclk = 0 : Delay
Kbddta = X.2 : Kbdclk = 1 : Delay : Kbdclk = 0 : Delay
Kbddta = X.3 : Kbdclk = 1 : Delay : Kbdclk = 0 : Delay
Kbddta = X.4 : Kbdclk = 1 : Delay : Kbdclk = 0 : Delay
Kbddta = X.5 : Kbdclk = 1 : Delay : Kbdclk = 0 : Delay
Kbddta = X.6 : Kbdclk = 1 : Delay : Kbdclk = 0 : Delay
Kbddta = X.7 : Kbdclk = 1 : Delay : Kbdclk = 0 : Delay
Kbddta = P : Kbdclk = 1 : Delay : Kbdclk = 0 : Delay
Kbddta = 1 : Kbdclk = 1 : Delay : Kbdclk = 0 : Delay : Kbdclk = 1 ' Koniec przesylania kodu.
Return
Readi2c:
For I = 0 To 5
I2cstart
I2cwbyte Adresw
I2cwbyte I
I2cstart
I2cwbyte Adresr
I2crbyte Z(i) , Nack .
I2cstop
Incr I
Next I
Return
Savei2c:
If X <> &HF0 Then
I2cstart
I2cwbyte Adresw
I2cwbyte I
I2cwbyte X
I2cstop
Waitms 10
Incr I
End If
ReturnZapisuje do pamięci dane z klawiatury. Eeprom wygląda tak:
&H1C &H1B &H23 &H2B &H34 - czyli nic innego jak 'asdfg'.
Problem polega na tym. że nie wyświetla mi tych danych, pomimo tego, że ładuję je do tablicy (myślałem że to wina czasów odczytywania z eepromu wiec pierw zczytuje jego zawartość).
Odczyt:
Wait 1
X = &H23
Gosub Przeslij
X = &H1C
Gosub Przeslij
X = &H31
Gosub Przeslij
X = &H24
Gosub Przeslij
'Delay
Wait 1
Gosub Readi2c
For I = 0 To 5
X = Z(i)
Gosub Przeslij
Next I
Delay
ReturnDziwne jest to, że te wartości, które sa wpisane na sztywno (dane &H23
&H1C &H31 &H24) zostają poprawnie wyświetlone - ukazuje się na ekranie napis 'dane'.
Ktoś ma jakiś pomysł w czym tkwi problem?
Pozdrawiam.
Robert.