Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
m@tem@tik
14 / 14 / 0
Регистрация: 22.10.2012
Сообщений: 336
1

Работа с UART. Сбрасывается регистр UDR в эмуляторе

15.03.2016, 13:30. Просмотров 488. Ответов 6
Метки нет (Все метки)

Приветствую! Пытаюсь понять работу USORT у Atiny2313. Ассемблерный код пишу в AVR студии. Во время отладки, после ручной записи данных в регистр UDR на следующем же шаге он сбрасывается в ноль. Прочитать данные из этого регистра получается только тогда, когда прописываю в него биты непосредственно перед выполнением команды IN РОН, UDR. Возникает мысль, что просто напросто неправильно работает эмулятор. Так ли это? И еще вопрос. Имеется простая программа записи данных в порт:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
RESET:
    LDI     r16, low(RAMEND)
    OUT     SPL, r16
    
    ldi r16, BAUD
    out UBRR, r16
 
    LDI     R16, (1<<RXEN)|(1<<TXEN)|(0<<RXCIE)|(0<<TXCIE)
    OUT     UCSRB, R16
    
    LDI     R16, (1<<UCSZ0)|(1<<UCSZ1)
    OUT     UCSRC, R16
    LDI     r17, 0xCC
    sei
 
 
PROGRAM:
    rcall uart_snt
    rjmp PROGRAM
 
uart_snt:   
    SBIS    UCSRA,UDRE  
    RJMP    uart_snt    
 
    OUT UDR, R17    
    RET
После запуска программы в Протеусе в виртуальный терминал выводятся только нули, хотя по идее должно выводиться СС. С чем это может быть связано?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2016, 13:30
Ответы с готовыми решениями:

Регистр UDR ATtiny2313
Посылаю байт на UART через виртуальный ком-порт, эмулирую в протеусе. Байт приходит, цикл...

tiny2313 UART проблема с готовностью UDR (UDRE)
Приветствую всех. Не могу найти причину проблемы с кодом приведенным ниже. Байты отправляются в...

Работа с файлами на эмуляторе
Всем привет. У меня вопрос след. характера. Моя программа читает и создает xml файлы на андроиде....

Работа с UART ATMega8
к примеру надо отправить число 21367 в ком порт с атмеги8 чтобы потом на компе программой считать....

Работа с UART в МК ATMega8
Не хочет работать передача данных. Подключаю к ножкам PD0 и PD1 через USB/UART TTL конвертор...

6
pyzhman
802 / 493 / 69
Регистрация: 15.05.2012
Сообщений: 2,783
15.03.2016, 15:42 2
Цитата Сообщение от m@tem@tik Посмотреть сообщение
Во время отладки
Что говорит хелп?
Цитата Сообщение от m@tem@tik Посмотреть сообщение
выводятся только нули
Частоты тактирования совпадают?
0
m@tem@tik
14 / 14 / 0
Регистрация: 22.10.2012
Сообщений: 336
15.03.2016, 15:46  [ТС] 3
Цитата Сообщение от pyzhman Посмотреть сообщение
Что говорит хелп?
Не понял вопроса.
Частоты совпадают, в этом плане я все проверил. Как я понимаю, даже если частоты не будут совпадать, все равно что то должно выводиться, но не нули.
0
Voland_
1694 / 1038 / 98
Регистрация: 04.01.2010
Сообщений: 3,524
15.03.2016, 17:27 4
m@tem@tik, вам, по-видимому, намекнули, что вы не вчитались в даташит tiny2313 по части ее USORT. У нее УАРТ работает по принципе двойного буфера. То есть один байт отправляется, второй уже ждет отправки.
Второе - регистры это не всегда "переменные", запись и чтение для них представляют собой совершенно разные действия. Так что писать можно одно (например, как здесь - отправлять данные по UART, то есть управлять передатчиком), а читать - другое (то есть по сути забирать данные из буфера приемника). Именно поэтому у вас при чтении регистра "уже на следующем такте" ноль. Потому что читается буфер приемника.

Третье - у вас в алгоритме вы отправляете R17 в буфер TX, но при этом пытаетесь контролировать флаг UDRE (Uart Data Ready, если правильно помню), который отвечает за приемник. Для контроля состояния передатчика существует два других флага.
2
m@tem@tik
14 / 14 / 0
Регистрация: 22.10.2012
Сообщений: 336
15.03.2016, 21:36  [ТС] 5
Всё взбесило! Сходил в магазин и купил тиньку, прошил ее и все заработало с первого раза. Проблема крылась и в симуляторе студии и в симуляторе протеуса. Не первый раз трачу столько времени из-за неправильной работы различных программ моделирования
0
Voland_
1694 / 1038 / 98
Регистрация: 04.01.2010
Сообщений: 3,524
15.03.2016, 22:58 6
Цитата Сообщение от m@tem@tik Посмотреть сообщение
прошил ее и все заработало с первого раза.
конечно "заработало". Но программа работает не так, как было задумано. Если для вас важен визуальный результат, то это еще не значит, что вы нашли какую-то ошибку в эмуляторе.

ЗЫ: тут давеча люди написали, что "в реальном чипе прога работает", а в "протеусе нет". А выяснилось, что у них в main() нету бесконечного цикла, и контроллер каждый "цикл" ходит через ресет. Работает? Конечно работает. Но это ж бред...
0
m@tem@tik
14 / 14 / 0
Регистрация: 22.10.2012
Сообщений: 336
16.03.2016, 16:37  [ТС] 7
Voland_, предоставленый код писался по образу и подобию примера из даташита. Потом попробовал в протеусе эпулировать весь пример, все то же самое, контроллер работает, модель в протеусе нет.
Ps: дабы не получать сильных пинков, скажу, что знакомство с асм в общем и avr в частности начал две недели назад, поэтому могу не знать некоторых очевидных, но для меня пока не понятных вещей
0
16.03.2016, 16:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2016, 16:37

Работа с UART в Orange Pi One
На днях получил Orange Pi One и начал в ней разбираться, решил понять как пользоваться RX и TX на 8...

MSP430F5435A. Работа с UART
написал такую програмку для отправки по UART... эффекта нету, со стороны схемы всё норм, в чём...

Работа с UART (ATMega328)
Всем привет. Сижу мучаю атмегу и понять не могу что не так. Мне надо сделать uart c ехом. Но это...


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

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

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