Nie wiem co jest nie tak ?? Program napisany w bascom.
Procedury odczytu i zapisu.
Kod: Zaznacz cały
Sub Write_fram(byval Adres As Byte , Byval Dane As Byte)
I2cinit
I2cstart
I2cwbyte Fram_write
I2cwbyte Adres
I2cwbyte Dane
I2cstop
Waitms 10
End Sub
Sub Read_fram(byval Adres As Byte , Byval Dane As Byte)
I2cinit
I2cstart
I2cwbyte 160
I2cwbyte Adres
I2cstart
I2cwbyte 161
I2crbyte Dane , Nack
I2cstop
Waitms 10
End SubKod: Zaznacz cały
Config Portb = Output
Portb = &B11111111
Config Portd = Output
Config Portd.5 = Input
Config Portd.6 = Input
Portd = &B11111111
Config I2cdelay = 10 'I2C na 100KHz
Config Scl = Porta.0
Config Sda = Porta.1
I2cinit
Ocr0a = 254 'konfiguracja T0 i jego start w trybie automatycznej kontroli
Tccr0a = Tcr0a 'trzeba robić z poziomu rejestrów CPU. BASCOM nie obsługuje
Tccr0b = T0_start 'tego procesora prawidłowo z funkcji bibliotecznych
Poz_wys = 1 'inicjacja pozycji do wyświetlania na ekranie
Vram(1) = Lookup(13 , Cgrom) 'napis powitalny
Vram(2) = Lookup(2 , Cgrom)
Vram(3) = Lookup(3 , Cgrom)
Vram(4) = Lookup(9 , Cgrom)
Waitms 500 'czas wyświetlania napisu powitalnego. Wszystko obsługują przerwania od T0.
I2cstart
I2cwbyte Fram_write
I2cstop
If Err = 1 Then
Vram(1) = Lookup(14 , Cgrom)
Vram(2) = Lookup(15 , Cgrom)
Vram(3) = Lookup(0 , Cgrom)
Vram(4) = Lookup(1 , Cgrom)
Waitms 500
Licz = 0
Else
Vram(1) = Lookup(12 , Cgrom)
Vram(2) = Lookup(0 , Cgrom)
Vram(3) = Lookup(16 , Cgrom)
Vram(4) = Lookup(17 , Cgrom)
Waitms 500
Adres = 1
Call Read_fram(adres , Dane)
Licz_low = Dane
Adres = 2
Call Read_fram(adres , Dane)
Licz_high = Dane
End If
Call Konwert