Здравствуйте, помогите, пожалуйста, данная программа должна несколько раз инкрементировать введеное с клавиатуры значение, например, если я ввожу 31, то на выходе должно получиться 31 32 33 34, а в протеусе получается вот. Прилагаю код.
.include "C:\Program Files (x86)\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRAssembler\2.1.51.64\avrassembler\include\m328Pdef.inc" // Подключаем заголовочный файл
.def temp = r16 // Присваиваем символические имена регистрам
.def sys = r17
.def count = r18
.equ Bitrate = 38400 // Указываем битрейт на котором будем работать
.equ BAUD = 8000000 / (16 * Bitrate) - 1 // Вычисляем число, которое запишем в регистр UBRR
.cseg
.org 0x00
rjmp RESET
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
.org URXCaddr // Адрес вектора прерывания по приему байта
rjmp USART_RXC
reti
RJMP USART_TXC
RETI
RETI
RETI
RETI
RETI
RESET:
LDI temp, HIGH(RAMEND)
OUT SPH, temp
LDI temp, LOW(RAMEND)
OUT SPL, temp
LDI temp, HIGH(BAUD)
STS UBRR0H, temp
LDI temp, LOW(BAUD)
STS UBRR0L, temp
ldi temp, 0b11011000 // Устанавливаем биты RXCIE, TXCIE, RXEN, TXEN, биты разрешают прерывания
sts UCSR0B, temp // И работу с USART
ldi temp, 0b00000110 //
sts UCSR0C, temp // биты UCSZ говорят о том, что прием/передача будет по 8 бит
sei
jmp pc
USART_RXC: // Прерывание по приему
ldi count,0
lds sys, UDR0 // Дергаем из UDR пришедший байт с компьютера(терминала)
sts UDR0, sys // Отправляем обратно на компьютер
loop: // Прерывание по отсылке байта
lds temp, UCSR0A
sbrs temp,UDRE0 // Стандартная проверка из тех.дока, если UDRE = 1 пропускаем следующую строку
rjmp loop // Либо вращаемся в цикле
inc sys // Повышаем на единицу sys
sts UDR0, sys // И посылаем снова на компьютер */
inc count // Повышаем на единицу счетчик
cpi count, 2
brne loop
reti
USART_TXC: reti
.exit