Уважаемые форумчане, объясните, пожалуйста, "чайнику" в чем прикол (или прокол?). Программка простая, как два пальца, по идее должна вывести в порт RS232 удвоенное количество байтов от числа, находящегося в счетчике (регистр Z). Реально же выводится 4608, т.е. четвертая часть. Где я допустил ошибку? Пробовал также на Mega8 - результат тот же.
.include "2333def.inc"
.def Tmp =r16
.cseg
.org 0
reset:
clr Tmp
out UBRRH,Tmp
ldi Tmp,$19
out UBRRL,Tmp ;Настройка скорости СОМ-порта
clr Tmp
out UCSRA,Tmp
ldi Tmp,$18
out UCSRB,Tmp ;Настройка UART
in Tmp,WDTCR
ori Tmp,$18
out WDTCR,Tmp
clr Tmp
out WDTCR,Tmp ;Отключение WDT
ldi Tmp,$20
out DDRC,Tmp ;Определение линии порта С как выход
cbi PortC,5 ;Включить светодиод
ldi ZL,Low(9216)
ldi ZH,high(9216) ;Загрузка счетчика байтов
Loop:
subi ZL,1
sbci ZH,0 ;Декремент счетчика
Wait1:
sbis UCSRA,UDRE ;Ожидание готовности UART
rjmp Wait1
out UDR,ZH ;Вывод старшего байта счетчика
Wait2:
sbis UCSRA,UDRE ;Ожидание готовности UART
rjmp Wait2
out UDR,ZL ;Вывод младшего байта
cpi ZL,0
ldi Tmp,0
cpc ZH,Tmp ;Проверка счетчика на 0
brne Loop ;Не 0 - возврат
sbi PortC,5 ;Иначе - выключить светодиод и
Cycle:
rjmp Cycle ;зациклить программу