Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

2Aleksey75, Вы вчера ответили на "Proteus и AVR Mega8", я попробовал ... не совсем получилось ... +++

Отправлено Ivax 16 января 2007 г. 18:58


>Отправлено Aleksey75 15 января 2007 г. 23:14
>Вы выложили весь код? если весь то +
>Он работать не будет, нет определения работы портов,

Позвольте с Вами не согласиться по поводу необходимости конфигурирования портов для использования UART. Согласно Atmel doc2486 p.61

• TXD – Port D, Bit 1
TXD, Transmit Data (Data output pin for the USART). When the USART Transmitter is enabled, this pin is configured as an output regardless of the value of DDD1.

• RXD – Port D, Bit 0
RXD, Receive Data (Data input pin for the USART). When the USART Receiver is
enabled this pin is configured as an input regardless of the value of DDD0. When the USART forces this pin to be an input, the pull-up can still be controlled by the PORTD0 bit.

Что в переводе, как мне кажется, означает - пофиг как я настрою порт, при включении UART пины переконфигурируются как им надо.

Проверил в эмуляторе Proteus предложенный Вами (или Atmel doc2486 p.136-137) вариант. Да, замечательно работает. Но только используя поллинг. Стоит разрешить прерывание по завершении передачи и дальше одни ошибки в окне лога. :(

Вот полный текст пробы:

.EQU R16=0x10
.EQU UBRRL=0x09
.EQU UBRRH=0x20
.EQU UDR=0x0C
.EQU UCSRA=0x0B
.EQU UCSRB=0x0A
.EQU UDRE=0x05
.EQU TXEN=0x03
.EQU RXEN=0x04
.EQU UDRIE=0x05
.EQU TXCIE=0x06
.EQU RXCIE=0x07
.EQU SPL=0x3D
.EQU SPH=0x3E

.DEF tmp=R16
.DEF a_x=R17

.DSEG
.ORG 0x60
a_x: .BYTE 0xBB

.equ fosc = 16000000 ;XTAL frequency, HZ
.equ baud = 115200 ;UART Baud rate
.equ bauddiv = (fosc/(16*baud))-1 ;UBRR value for the required Baud rate
;-/-/-/-/-/-/
;---------------- UART BAUD RATE ------------------------------------
.CSEG
.ORG 0
RJMP START
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00

START:
ldi tmp, 0xF0 ; указатель стека
out spl, tmp
ldi tmp, 0xAA ; переменная
sts a_x, tmp
;-------------------------------------------------
ldi tmp,low(bauddiv) ;Set up UART Baud rate
out UBRRL,tmp
ldi tmp,high(bauddiv)
out UBRRH,tmp
;-------------------------------------------------
sbis ucsra,udre
rjmp pc-1
sbi UCSRB,txen

lds tmp,a_x
out UDR,tmp ; передача байта

;--------------------------------------------------------------
; разрешение прерывания. и неважно до или после записи в UDR
sbi UCSRB,TXCIE ; <----- RXCIE or TXCIE or UDRIE
sei
;--------------------------------------------------------------

rjmp pc

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

Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
поделите двойку на единицу:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru