Jump to content

pedrofan

Members
  • Content Count

    2
  • Joined

  • Last visited

Community Reputation

0 Обычный

About pedrofan

  • Rank
    Новенький

Электроника

  • Стаж в электронике
    1-2 года

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  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
×
×
  • Create New...