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

Проблема с UART

21.07.2010, 01:06. Просмотров 6339. Ответов 7
Метки нет (Все метки)

Здравствуйте. Программирую МК не давно, и поэтому столкнулся с проблемой при работе через UART. Проблема заключается в том, что при отправки данных от МК к компьютеру, старший бит передаваемого байта равен 1 (т.е. передаю 0x15, а получаю 0x95), от компьютера до МК данные идут нормально. МК: ATmega162, работаю через USORT1.
Все делал по статье.
код.include "m162def.yms"

.CSEG
.equ XTAL=1000000
.equ baudrate=4800 //при 9600 та же фигня
.equ bauddivider = XTAL/(16*baudrate)-1

.ORG 0x00
RJMP START

.ORG 0x0030
START:
LDI R16,low(ROMEND)
OUT SPL,R16

LDI R16,high(ROMEND)
OUT SPH,R16

LDI R16,0xFF
OUT DDRD, R16
OUT PORTD, R16

CLR R16

LDI R16,low(bauddivider)
OUT UBRR1L,R16
LDI R16,high(bauddivider)
OUT UBRR1H,R16

CLR R16

OUT UCSR1A,R16

; Прерывания запрещены, прием-передача разрешен.
LDI R16, (1<<RXEN1)|(1<<TXEN1)|(0<<RXCIE1)|(0<<TXCIE1)|(0<<UDRIE1)
OUT UCSR1B, R16

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

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

IN R16,UDR1 ; байт пришел - забираем.
OUT PORTD,R16

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

LDI R16,0x10
OUT UDR1, R16 ; шлем байт

RJMP BEGIN
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2010, 01:06
Ответы с готовыми решениями:

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

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

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

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

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

7
BykTiho
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 3,260
22.07.2010, 10:15 2
Проверьте установку скорости передачи, стоповых битов, количества битов и подобные настройки порта...
0
hixFF
0 / 0 / 0
Регистрация: 30.01.2010
Сообщений: 641
22.07.2010, 10:28 3
Поставь кварц 8 (а лучше- 7,3728) Мгц, увеличь скорость до 9600.
Что за проект? Кварц точно 1 Мгц, или нолик пропустил?
0
Myst
0 / 0 / 0
Регистрация: 14.12.2014
Сообщений: 5
22.07.2010, 14:20 4
Цитата Сообщение от hixFF
Поставь кварц 8 (а лучше- 7,3728) Мгц, увеличь скорость до 9600.
Что за проект? Кварц точно 1 Мгц, или нолик пропустил?
Скорости менял (9600 ставил), та же фигня. Как такового проекта нет, просто решил разобраться с UART, и работой с COM портом. А кварц внешний не подключал, фьюзы не трогал (пока не сильно в них разобрался), где то вычитал что по дефолту работает на 1 Мгц. От компьютера принимает идеально, специально проверил все 255 комбинаций)), а вот когда от МК почему то всегда старший бит равен 1. Я предположил, что МК шлет 7 бит, а 8 отправляет стоп бит, а компьютер читает все 8 битов, а так как после отправки данных на линии высокий уровень, то он его заглатывает как стоп бит. Такое быть может? или я где то туплю? и какой флаг отвечает за количество отправленных бит?
0
Joit.Dosi
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 433
22.07.2010, 14:50 5
Цитата Сообщение от myst
А кварц внешний не подключал
Возможно в этом и проблема. Для UART требуется точный генератор, а внутренний таким не является
0
Myst
0 / 0 / 0
Регистрация: 14.12.2014
Сообщений: 5
22.07.2010, 21:50 6
Цитата Сообщение от Joit.Dosi
Возможно в этом и проблема. Для UART требуется точный генератор, а внутренний таким не является
Куплю на днях попробую. Но все таки мне кажется это странным, так как если бы не работал вообще или приходил мусор, было бы понятно... а так только один бит из байта, всегда равен единице... странно это все)
0
hixFF
0 / 0 / 0
Регистрация: 30.01.2010
Сообщений: 641
23.07.2010, 00:45 7
Переходник с ком- порта исправен? Попробуй возвращать в программе не константу, а эхо, то есть, что принял- вывел в порт Д, и пнул назад в комп. У меня как- то была похожая проблема, вместо FF, посылаемых компьютеру, он получал 7F. Решилось напайкой кварца.
0
DiVOuR
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 111
25.07.2010, 12:52 8
Был подобный косяк на мсп430, тоже всегда старший бит равнялся 1-це. Пробовался и внешний кварц до 20МГц, ивнутренним генератором на назких скоростях юарта - нифига. Так и не одолели его.
0
25.07.2010, 12:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.07.2010, 12:52

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

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

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


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

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

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