Sous-programme Assembleur Atmel
;________________________________________________________________
;AT24C32_write_mem i2c eeprom write byte
;ZH:ZL pointe les données jusqu'a 0xFF
;YH:YL adresse AT24C32
;________________________________________________________________
AT24C32_write_mem:
rcall I2CInit
rcall I2CStart
lds ADR,AT24C32 ;Adresse Write Mode
mov DATA,YH
rcall I2CSendByte ;Ecrire la adresse Haute MSB I2CWData
rcall I2CDelay
mov DATA,YL
rcall I2CSendByte ;Ecrire la adresse basse LSB I2CWData
rcall I2CDelay
AT24C32_write_byte:
;i2c_eeprom_read_byte
ld DATA, Z+ ;DATA=(Z) Z=Z+1
cpi DATA,0xFF ;Si egal fin
breq AT24C32_end_write
rcall DATA_write_byte ;Ecrire la donnee I2CWData
rcall I2CDelay
rjmp AT24C32_write_byte
AT24C32_end_write:
rcall I2CStop
ret
;________________________________________________________________
;AT24C32_read_mem i2c eeprom read byte
;YH:YL adresse AT24C32
;ZH:ZL pointe la récpetion des données
;regC: nombre d'octets
;________________________________________________________________
AT24C32_read_mem:
rcall I2CInit
rcall I2CStart
lds ADR,AT24C32 ;Adresse Write Mode
rcall I2CSendByte
mov DATA,YH
rcall I2CSendByte ;Ecrire la adresse Haute MSB I2CWData
rcall I2CDelay
mov DATA,YL
rcall I2CSendByte ;Ecrire la adresse basse LSB I2CWData
rcall I2CDelay
rcall I2CStop
rcall I2CDelay
rcall I2CStart
lds DATA,AT24C32 ;Adresse
ori DATA,1 ;Read
rcall I2CSendByte
recupdt:
clr DATA ;read with ACK
rcall I2CReadByte
st Z+,regA
dec regC
brne recupdt
ldi DATA,1
rcall I2CReadByte ;read with NACK
st Z+,regA
rcall I2CStop ;Stop I2C
ret