[an error occurred while processing this directive]
|
#include "m8515def.inc"
.def temp = r16
.equ eevarlen = 1024 ;Example EEPROM block length
.equ ramvar = $200 ;Example RAM block start address
.equ eevar = $1 ;Example EEPROM block start address
eerest_example:
ldi xl,low(eevarlen) ;Load block length counter
ldi xh,high(eevarlen) ;
ldi yl,low(ramvar) ;Load RAM address pointer
ldi yh,high(ramvar) ;
ldi zl,low(eevar) ;Load EEPROM address pointer
ldi zh,high(eevar) ;
rcall eerest ;Invoke EEPROM block read procedure
rjmp PC ;Loop forever
;Restores block of variables from EEPROM to RAM
;Block length (bytes) = X
;RAM block starting address = Y
;EEPROM block starting address = Z
eerest:
sbic eecr,eewe ;Wait until EEPROM is ready for next read
rjmp eerest ;
out eearl,zl ;Set EEPROM address LSB
out eearh,zh ;Set EEPROM address MSB
adiw z,1 ;Advance EEPROM address pointer
sbi eecr,eere ;Enable EEPROM reads
in temp,eedr ;Read one byte from EE data reg
st y+,temp ;Store it to RAM, advance RAM address pointer
sbiw x,1 ;Decrement block length counter
brne eerest ;Loop until all block bytes are read
cbi eecr,eere ;Disable further EEPROM reads
ret
E-mail: info@telesys.ru