Перейти к содержанию

pedrofan

Members
  • Постов

    2
  • Зарегистрирован

  • Посещение

Весь контент pedrofan

  1. pedrofan

    Assembler Uart

    Здравствуйте, помогите, пожалуйста, данная программа должна несколько раз инкрементировать введеное с клавиатуры значение, например, если я ввожу 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
  2. Здравствуйте, помогите, пожалуйста, данная программа должна несколько раз инкрементировать введеное с клавиатуры значение, например, если я ввожу 31, то на выходе должно получиться 31 32 33 34, а в протеусе получается вот. Прилагаю код. lab_4_1.asm
×
×
  • Создать...