Я только учусь програмировать микроконтролеры, и кое чего еще не понимаю.
Пишу программу для самодельного обучающегося светосинхронизатора (для одновременного срабатывания нескольких вспышек). Програму написал, засунул в AVR Studio. Откомпилировал. Ошибок нет. Начал проверять пошагово, все вроде работает, но когда нужно считать данные с EEPROM – начинаются проблемы:
Вот этот кусок:
Использую Attiny13
clr Temp1
RJMP EERead
EERead: SBIC EECR,EEPE ; ждем разрешения чтения
RJMP EERead
OUT EEARL,Temp1 ; прописываем адрес (в Attiny13 — EEARH нет)
До сих пор все норм. А когда пытаюсь выставить бит чтения:
sbi EECR,EERE ; этот (EERE) бит не ставится, и дополнительно в регистр EEDR (в не зависимости от того что там было) ставится 0b11111111.
in Time,EEDR ;и эти же 0b11111111 естественно (а не то что там было) записывается в нужный мне регистр.
Регистр EECR в котором находится бит EERE в ATtiny13 находится по адресу 0х1С. Если я не ошибаюсь, sbi бьет до 0х1F. Эту ловушку я помню).
Но даже когда я вместо
sbi EECR,EERE
ставлю:
ldi Temp1,0b00000001
out EECR,Temp1
все работает так же как и с sbi – то есть EERE не устанавливается, и в EEDR записывается 0хFF.
Проверял написанную мною программу как на AVR Studio, так и на AVR Simulator IDE.
Все работает так же само.
Значит я сам где то напартачил. Но где – не пойму.
Если нужно могу выложить весь код.
Подскажите пожалуйста – где я ошибся.
Заранее спасибо.


