Уважаемые форумчане, объясните, пожалуйста, "чайнику" в чем прикол (или прокол?). Программка простая, как два пальца, по идее должна вывести в порт 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 ;зациклить программу
|