interessante questo link..
se avete mezz'oretta consiglio una buona lettura.. magari datemi un riscontro:
pic: basics I2C-Interface
spiega con precisione come usare i modulo hardware del Pic 16F877 e del 16F876 per gestire il protocollo I2C
con i 6 registri preposti.
Anche se in tedesco si intuisce bene, soprattutto dopo aver letto il datasheet dei due Pic sopra citati.
Per esempio come preparare il proprio Pic in modalità Master ovvero per inviare byte....
in sostanza il registro SSPBUF viene usato per caricare il valore da spedire in modalità master oppure il valore da leggere nel caso slave
per esempio vogliamo spedire il seguente byte 10110011 :
MOVLW B'10110011'
MOVF SSPBUF
NEL CASO SLAVE INVECE prende il valore ricevuto lo mette in W e poi lo mostra in PORTB come segue:
MOVF SSPBUF,W
MOVWF PORTB
Come inviare dati quindi Modalità Master:
movlw B'00001000' ; master mode, clock=Fosc/(4*(SSPADD+1))
movwf SSPCON
bsf STATUS, RP0
bsf SSPCON2, SEN
bcf STATUS, RP0
Abilita alla trasmissione Send Enable, di seguito controlla se lo SLAVE ha inviato l' Acknowledge segno che ha ricevuto i dati
i2c_t1
btfss PIR1, SSPIF ; Testa se lo slave ha inviato l' Acknowledge
goto i2c_t1 ; se NO allora ritorna su
bcf PIR1, SSPIF ; altrimenti Ok dato ricevuto dallo SLAVE !
vediamo di seguito come invece preparare la modalità SLAVE, per ricevere:
i2c_rx
bsf STATUS, RP0
bsf SSPCON2, RCEN ; Daten Empfang einschalten
bcf STATUS, RP0
i2c_r7
btfss PIR1, SSPIF ; Daten Empfang fertig?
goto i2c_r7 ; nein, noch nicht
bcf PIR1, SSPIF ; ja, nun noch SSPIF zurücksetzen
movf SSPBUF, w ; empfangene Daten -> W
movwf RXData ; empfangene Daten -> RXData
Ok adesso il dato sta dentro il registro RXData quindi invia un Acknowledge al MASTER
ECCO FATTO!
bsf STATUS, RP0
bsf SSPCON2, ACKEN ; ACK senden
bcf STATUS, RP0
ALTRO LINK BUONO DOVE POTER STUDIARE E' IL SEGUENTE
Interfacing PIC microcontrollers: embedded design by interactive simulation - Martin Bates - Google Libri