|
UART не запскается, Ошибка команды SBIS на Atmega 2561 |
|
|
|
Nov 2 2010, 11:15
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата(Slavast @ Nov 2 2010, 14:08)  Доброе время суток. Подскажите что делать? Uart_snt: lds temp, UCSRA sbis temp,UDRE rjmp Uart_snt
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Nov 2 2010, 11:30
|
Частый гость
 
Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395

|
Цитата(ILYAUL @ Nov 2 2010, 15:27)  И учитывайте , что первый байт , проскакивает сразу в сдвиговый регистр и только 2-ой "задерживается" в буфере. Это к тому, что если после отсылки первго , Вам надо что-то принять. В смысле - если я после отсылки первого байта ничего не приму, то я не увижу свой изначально отправленный байт?
|
|
|
|
|
Nov 3 2010, 10:12
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Slavast @ Nov 3 2010, 13:01)  А что вначале записывать - UBRR0H или UBRR0L? Есть принципиальное отдичие? Вот интересно, вы ответы принципиально не читаете? Цитата(rx3apf @ Nov 3 2010, 12:01)  Первым должен записываться старший, после записи младшего будут обновлены оба регистра. Цитата(Палыч @ Nov 3 2010, 12:46)  Обратите внимание, что важен порядок записи в эти регистры: сначала старшую часть - в UBRR0H; затем младшую - в UBRR0L.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Nov 3 2010, 12:08
|
Частый гость
 
Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395

|
Да, спасибо! Цитата(Палыч @ Nov 3 2010, 13:44)  А, Вы высчитали: какая при этом ошибка скорости передачи получается? Это может быть важным. При Ваших данных ошибка -3,5%. Чтобы скорость USART получалась без ошибок используют тактовую 14.7456МГц или 11.0592МГц. Как же я могу поменять частоту процессора микроконтроллера Atmega 2561 16Мгц ? Выбирая не 16 Мгц, а 14.7456МГц или 11.0592МГц не будет работать, т.к. тактовая часота процессора МК Atmega 2561 16 МГц.?
|
|
|
|
|
Nov 5 2010, 09:02
|
Частый гость
 
Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395

|
UART заработал!! Но теперь вместо одного символа контроллер Atmega 2561 выводит мне в терминал бесконечный цикл этих символов. Без главного цикла все равно выводит миллион повторений того, что я нажму. Вопрос - нужно ли здесь прерывания и какой их тогда будет смысл? Заранее, низкий поклон!!
Главная программа у меня вот:
;-------Посылка байта----------
uart_rcv: lds r19, UCSR0A SBRS r19,UDRE0 ; Пропуск если нет флага готовности, RJMP uart_rcv ; вращаясь в цикле lds R16,UDR0 ; байт пришел - забираем. RET ; Выходим. Результат в R16
;-------Процедура отправки байта-------
uart_snt: lds r17, UCSR0A SBRS r17,UDRE0 ; Пропуск если нет флага готовности, ; если 1 - то готов отправлять данные RJMP uart_snt ; ждем готовности - флага UDRE sts UDR0, R16 ; шлем байт 01010101 в UDR RET ; Возврат
;------ Главный цикл -------- Main: RCALL uart_rcv ; Ждем байта INC R16 ; Делаем с ним что-то RCALL uart_snt ; Отправляем обратно. out PORTB, r18 JMP Main
|
|
|
|
|
Nov 5 2010, 09:51
|
Частый гость
 
Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395

|
Цитата(=GM= @ Nov 5 2010, 12:41)  На приём надо проверять бит RXC0, а вы проверяете UDRE0 и на приём, и на передачу. АААА!!!! РАБОТАААААЕТТТТ!)!)!)!)!))!)! Урааааааа!)))))) Огромный респект =GM=!!!!
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|