реклама на сайте
подробности

 
 
> Assembler uart
KIG
сообщение Jan 11 2009, 17:02
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 25-12-06
Пользователь №: 23 884



Здравствуйте.
Написал программу для передачи символа через 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Goodefine
сообщение Jan 11 2009, 19:27
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581



Цитата(KIG @ Jan 11 2009, 21:46) *
Согласно описания МК регистры имеют следующие адреса:
.equ UBRR0L = 0xc4 ; MEMORY MAPPED
.equ UBRR0H = 0xc5 ;

И правда, не глянул какая мега...
Цитата(KIG @ Jan 11 2009, 21:46) *
На языке СИ задаю сначала младший регистр, а затем старший и все работает нормально.

Если на Си у вас работает, загляните в листинг. Вот, например, как CAVR генерит начальный код инициализации USART0:
На Cи:
Код
// USART0 initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART0 Receiver: On
// USART0 Transmitter: On
// USART0 Mode: Asynchronous
// USART0 Baud Rate: 19200
UCSR0A=0x00;
UCSR0B=0x18;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x17;

На асме:
Код
;0000 007F // USART0 initialization
;0000 0080 // Communication Parameters: 8 Data, 1 Stop, No Parity
;0000 0081 // USART0 Receiver: On
;0000 0082 // USART0 Transmitter: On
;0000 0083 // USART0 Mode: Asynchronous
;0000 0084 // USART0 Baud Rate: 19200
;0000 0085 UCSR0A=0x00;
    STS  192,R30
;0000 0086 UCSR0B=0x18;
    LDI  R30,LOW(24)
    STS  193,R30
;0000 0087 UCSR0C=0x06;
    LDI  R30,LOW(6)
    STS  194,R30
;0000 0088 UBRR0H=0x00;
    LDI  R30,LOW(0)
    STS  197,R30
;0000 0089 UBRR0L=0x17;
    LDI  R30,LOW(23)
    STS  196,R30


Сообщение отредактировал Goodefine - Jan 11 2009, 19:45


--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 20:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01354 секунд с 7
ELECTRONIX ©2004-2016