Перейти к содержанию
С Днём Победы! ×

Assembler Uart


KIG

Рекомендуемые сообщения

Здравствуйте.

Написал программу для передачи символа через UART на Ассемблере. Прошил МК, а символ получить не могу. Подскажите, пожалуйста, что не так?

Программа следующая (Atmega164P, кварц 7,3728МГц):

include <m164def.inc>

#include <iomacros.inc>

.def dummy=R19

.cseg

ldi R24, low(RAMEND) ; SP = RAMEND

ldi R25, high(RAMEND)

out SPL, R24

out SPH, R25

; ---------------------------------- init UART ------------------------------------------

ldi R24, 23 ; Baud rate = 19.2 bps

sts UBRR0L, R24

ldi R24,0

sts UBRR0H, R24

ldi R24,(1<<RXEN0)|(1<<TXEN0) ; Enable receiver & transmitter, 8-bit mode

sts UCSR0B,R24

rcall uartSend ; send the read character via the UART

uartSend:

SKBS UCSR0A,UDRE0,dummy ; wait for empty transmit buffer (until UDRE==1)

rjmp uartSend

ldi R16, 48

STORE UDR0,R16 ; UDR = R16, start transmission

Delay:

ldi R16,10

rjmp Delay

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

  • 10 лет спустя...

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Здравствуйте, помогите, пожалуйста, данная программа должна несколько раз инкрементировать введеное с клавиатуры значение, например, если я ввожу 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

23565872_.jpg.a3c3bd20ed802ee2a6720fd34913f5b1.jpg

Ссылка на комментарий
Поделиться на другие сайты

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...