[an error occurred while processing this directive]
Код абсолютно правильный, но лучше делать подпрограмму не на каждый байт, а на целый блок
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено =AVR= 17 июня 2006 г. 13:19
В ответ на: написано 4 такта :( (+) отправлено <font color=gray>bigen</font> 17 июня 2006 г. 08:51


#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: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru