Bonjour à tous.
Je souhaite réaliser un circuit à base de PIC 16F877. Ce circuit permet de lire des données en provenance d'un PC (norme RS232). Ces données seront stockées dans une EEPROM I2C (pour mon cas 24C32).

J'utilise comme compilateur le MikroBasic.

J'ai essayé la routine de lecture et écriture sur I2C. ça marche
J'ai essayé la communication entre PC et PIC. ça marche.

Lorsque j'ai intégré le tout en un seul programme. je sais plus où placer l'appel à la procédure d'ecriture et de lecture pour le composant I2C?

La programme est le suivant :
{il intègre en plus une horloge utilisant le timer1 du PIC pour le reste de l'application.}


program com_usart_pic_i2c
dim counter as byte
dim secs,receive,data as byte
dim text,txt, txt1, txt2 as string[3]


sub procedure ecriture(dim Adresse, databyte as byte)
I2C_start ' issue I2C start signal
I2C_wr($A0) ' send byte via I2C (command to 24cO2)
I2C_wr(Adresse)
I2C_wr(databyte)
I2C_stop
delay_ms(100)
end sub

sub function lecture(dim Adresse as byte) as byte
dim databyte as byte
I2C_start
I2C_wr($A0) ' send byte via I2C (command to 24cO2 read cycle)
I2C_wr(Adresse) ' send byte (address of EEPROM location)
I2C_Repeated_Start ' issue I2C signal repeated start
I2C_wr($A1) ' send byte (request data from EEPROM)
databyte = I2C_rd(0) ' Read the data
I2C_stop
result = databyte
end sub

sub procedure interrupt
if PIR1.TMR1IF = 1 then
inc(secs)
PIR1.TMR1IF = 0 ' Clear TMR1IF
end if
if Usart_Data_Ready = 1 then
receive=Usart_Read ' Read Data from USART
Usart_Write(receive) ' Send back data toUSARTPI
inc(counter)
'ecriture(counter,receive)
'data=lecture(counter)

PIR1.RCIF=0 ' Clear USART Receive Interrupt Flag bit
end if
' IF PIR1.SSPIF = 1 then
' ecriture(counter,receive)
' data=lecture(counter)
' PIR1.SSPIF = 0
' end if

end sub

main:
counter=0
TRISB = 0
Lcd_Init(PORTB)
lcd_cmd(lcd_clear)
T1CON=$1F
INTCON= 0xC0
PIR1.TMR1IF = 0 ' Clear TMR1IF
PIE1.TMR1IE = 1 ' Enable interrupts
PIR1.RCIF = 0
PIE1.RCIE = 1
PIR1.SSPIF = 0
PIE1.SSPIE = 1
Usart_Init(9600) ' Initialize USART
Delay_ms(100) ' Wait for 100 ms

while TRUE
bytetostr(secs,text)
lcd_out(1,1,text)
bytetostr(counter,txt1)
lcd_out(2,1,txt1)
bytetostr(data,txt2)
lcd_out(2,5,txt2)
wend
end.