To tylko jedna z 2 stron tej notatki. Zaloguj się aby zobaczyć ten dokument.
Zobacz
całą notatkę
;========================================================================
;listing 7.25 procedura wyslania adresu lub danych
;========================================================================
i2c_send ;wysyla adres lub dane z rejestru w
bank0
movwf i2c_reg ;wpisz dane do rejestru i2c_reg movlw .8 ;liczba bitow
movwf licznik
send_bit ;wysyla najstarszy bit z rejestru i2c_reg
rlf i2c_reg, f ;przesun bit 7 do c
bcf sda ;przygotuj 0 na sda
bank1
btfss ca ;sprawdz c
bcf sda ;c=0, 0-sda
btfsc ca ;sprawdz c
bsf sda ;c=1, 1-sda
call del6 ;opoznienie 6 us
bsf scl ;wpisz 1 na scl bank0
btfss scl ;sprawdz scl
goto $-1 ;scl=0, czekaj
goto $+1 ;opoznienie 2us
bank1
bcf scl ;wpisz 0 na scl
bank0
decfsz licznik, f ;sprawdza liczbe wyslanych bitow
goto send_bit ;wyslij kolejny bit
goto $+1 ;opoznienie 2us
goto $+1 ;opoznienie 2us
;sprawdza ack
bank1
bsf sda ;przygotowanie linii sda do odczytu
bsf scl ;wpisz 1 na scl
bank0
btfss scl ;sprawdz scl
goto $-1 ;scl=0, czekaj
goto $+1 ;opoznienie bcf ack ;zeruj flage ack
btfss sda ;czy jest potwierdzenie (sda=0)
bsf ack ;jest potwierdzenie, ustaw flage ack call del6 ;opoznienie 6 us
bank1
bcf scl ;wpisz 0 na scl
bank0
bcf scl ;wpisz 0 na scl
return ;zostawia 0 na scl i 1 na sda
... zobacz całą notatkę
Komentarze użytkowników (0)