Нужно запомнить пару чисел в EEPROM, считывать их в дальнейшем. В AVR Studio при чтении после записи выдает нули и в Proteus поведение аналогичное: как будто ничего никогда и не писали в EEPROM. В железе проверил - та-же лажа
Attiny13
Код: Выделить всё
.
.
.
.eseg
.org 0x30
EESPEED: .byte 1
EEHEAT: .byte 1
.CSEG
.org 0
.
.
.
sbi EECR, EEPM1
ldi ADRREG,EESPEED
rcall EEPROM_write
ldi ADRREG,EEHEAT
rcall EEPROM_write
.
.
.
.
ldi ADRREG,EESPEED
out EEARL,ADRREG
sbi EECR,EERE
in SPEED,EEDR ; читаем уставку скорости из EEPROM
ldi ADRREG,EEHEAT ; выставляем адрес уставки температуры
out EEARL,ADRREG
sbi EECR,EERE
in HEAT,EEDR ; читаем уставку температуры из EEPROM
.
.
.
;=========== ЗАПИСЬ В EEPROM ==================
EEPROM_write:
cli
out EEARL,ADRREG
; Write data (AD) to data register
out EEDR,AD ; AD - регистр, где содержится инфа, которую надо записать в EEPROM
; Write logical one to EEMPE
sbi EECR,EEMPE
; Start eeprom write by setting EEPE
sbi EECR,EEPE
EEWR: sbic EECR,EEPE ; ожидание окончания записи
rjmp EEWR
sei
ret
Да, знаю, что можно организовать отслеживание окончания записи иначе, не вводя ЦП в цикл, но для текущей задачи это вполне приемлемо.
Версия AVR Studio 4.19 Proteus 7.10 SP0 Частота МК дефолтная 4,8МГц
Вообще, верно-ли я все "оформил" т.е. зарезервировал 2 байта в EEPROM, осуществляю запись/чтение, сомневаюсь насчет директив .eseg и Метка: .byte 1 т.к. впервые это делаю. Отступил не то что рекомендованные производителем 8 байт от начала EEPROM, а аж целых 48!
Пожалуйста, подскажите, где собака порылась!


