Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.96/23: Рейтинг темы: голосов - 23, средняя оценка - 4.96
tokoyoshy
0 / 0 / 0
Регистрация: 01.10.2011
Сообщений: 11
1

Проблема с UART

04.10.2011, 13:03. Просмотров 4153. Ответов 9
Метки нет (Все метки)

День добрый.

Продолжаю изучать AVR и наткнулся на проблему при изучении UART(работаю с платой Pinboard). Скопипастил программу из учебного курса.

Код
.include "m16def.yms"
.DSEG

.CSEG

LDI    R16,Low(ROMEND)   ; Инициализация стека
OUT    SPL,R16         ; Обязательно!!!
LDI    R16,High(ROMEND)
OUT    SPH,R16
LDI    R16,0x30

MainBlock:
RCALL   uart_rcv   ; Ждем байта

INC   R16      ; Делаем с ним что-то

RCALL   uart_snt   ; Отправляем обратно.

RJMP MainBlock

; Internal Hordware Init  ======================================
.equ    XTAL = 8000000
.equ    baudrate = 9600
.equ    bauddivider = XTAL/(16*baudrate)-1

uart_init:   LDI    R16, low(bauddivider)
OUT    UBRRL,R16
LDI    R16, high(bauddivider)
OUT    UBRRH,R16

LDI    R16,0
OUT    UCSRA, R16

; Прерывания запрещены, прием-передача разрешен.
LDI    R16, (1<<RXEN)|(1<<TXEN)|(0<<RXCIE)|(0<<TXCIE)|(0<<UDRIE)
OUT    UCSRB, R16

; Формат кадра - 8 бит, пишем в регистр UCSRC, за это отвечает бит селектор
LDI    R16, (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1)
OUT    UCSRC, R16

uart_snt:
SBIS    UCSRA,UDRE   ; Пропуск если нет флага готовности
RJMP   uart_snt    ; ждем готовности - флага UDRE

OUT   UDR, R16   ; шлем байт
RET         ; Возврат

uart_rcv:
SBIS   UCSRA,RXC   ; Ждем флага прихода байта
RJMP   uart_rcv   ; вращаясь в цикле

IN   R16,UDR      ; байт пришел - забираем.
RET         ; Выходим. Результат в R16
И получил следующий результат http://newsujet.com/avr.png
Физику порта уже проверил
Что я делаю не так?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2011, 13:03
Ответы с готовыми решениями:

Проблема с UART
Здравствуйте. Программирую МК не давно, и поэтому столкнулся с проблемой при работе через UART....

Проблема с UART
Здраствуйте! Хочу общатся с МК через UART, но возникли проблемы... использую st232bn и МК...

Atmega88 + UART = проблема
Приветствую! Пытаюсь соединить два камня по USORT интерфейсу. Для тактирования в обоих камнях...

проблема с передачей по UART
Добрый день! Сейчас занимаюсь разработкой одного устройства (контроллер ATmega8535). Оно передает...

Странная проблема uart
mega8515, от внутреннего генератора 1MHz, .include &quot;m8515def.yms&quot; ; Internal Hordware...

9
ptoop
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 1,761
04.10.2011, 13:06 2
А что не так?
0
ptoop
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 1,761
04.10.2011, 13:10 3
Только не забудь, что посылая в порт "1" ты посылаешь туда символ "1", который имеет код 31h, а не число 1
0
tokoyoshy
0 / 0 / 0
Регистрация: 01.10.2011
Сообщений: 11
04.10.2011, 13:11 4
По программе он должен был присылать одно и то же число (код единицы увеличинный на 1)
а
1) присылает разные коды
2) код 1 0x31 соответственно он должен слать 0x32 а этого я не вижу
0
Otikzzz
0 / 0 / 0
Регистрация: 28.02.2011
Сообщений: 461
04.10.2011, 13:13 5
Вызова uart_init не вижу.
0
tokoyoshy
0 / 0 / 0
Регистрация: 01.10.2011
Сообщений: 11
04.10.2011, 13:19 6
Otykzzz спасибо огромное. Два дня ведь мучался))
0
R_uro
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 1,088
08.10.2011, 23:09 7
Вроде бы разобрался с Юартом. Но подумал - что будет, если в процессе передачи исказится один бит? Будет неправильно и плохо. Просмотрел несколько библиотек для работы с Юартом, нигде этот момент не учитывается. Как-то с такой возможностью ошибки борются или это у меня уже паранойя?
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
08.10.2011, 23:16 8
Например при помощи контроля четности (parity) или CRC
0
R_uro
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 1,088
08.10.2011, 23:19 9
Цитата Сообщение от dsodir
Например при помощи контроля четности (parity) или CRC
Где можно посмотреть?
Предположим выявили неправильный байт. Ну и дальше что? Отправили назад сообщение, что команда ошибочна. А на передающей стороне уже в буфере все поменялось. Как быть?
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
09.10.2011, 01:22 10
Контроль четности описан в даташите. Про CRC можно посмотреть на википедии.

Ну, по-идее, передающий девайс должен быть готов к тому, что ему скажут "А? Что ты сказал? Я не понял!" И в этом случае он должен отправить данные еще раз.
0
09.10.2011, 01:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2011, 01:22

Проблема с UART на Atmega128
Всем доброго времение суток, надеюсь поможете разобраться с проблемой. Предистория: устройство на...

Проблема с UART (ATmega88)
Добрый день! Уже долгое время пытаюсь разобраться с работой uart. Наваял программу, по которой мк...

AVR GCC проблема с UART
решил вот лампочками помигать - ambilight сделать - и вот на грабли наткнулся -какая то неведомая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru