|
MEGA64 + uart, что за ошибка не пойму |
|
|
|
Feb 17 2007, 08:20
|
Частый гость
 
Группа: Свой
Сообщений: 186
Регистрация: 23-04-06
Из: Сочи
Пользователь №: 16 411

|
привет всем. Короче, пытаюсь передать по rs232 из Mega64 в комп данные, но что-то не получается (передает "00" и все тут). Кварц = 11,059 МГц Питание везде проверил - все норм. "Соплей" тоже нет. Текст самый простенький: .include "m64def.inc" .CSEG .org 0 rjmp reset reset: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 ;------------------------------------------------------------------------------- ;UART enabled ldi r16,(3<<UCSZ00) | (1<<UCPOL0) ;8 bit sts UCSR0C,r16 ldi r20,17 ;определение скорости = 38400 out UBRR0L,r20 ldi r21,0 sts UBRR0H,r21 ldi r16,(1<<TXEN0) ;разрешение прередатчика out UCSR0B,r16 ;------------------------------------------------------------------------------- ldi r16,0xAA out UDR0,r16 rep: rjmp rep ;------------------------------------------------------------------------------- НЕ вижу ошибки - хоть убей  Прога для приема COM Port Toolkit. Данные передаются, но только = "0x00" вместо "0xAA". Помогите плз. Заранее благодарю.
|
|
|
|
|
 |
Ответов
(1 - 14)
|
Feb 17 2007, 10:13
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 8-01-07
Из: Одесса
Пользователь №: 24 196

|
Цитата(skilful @ Feb 17 2007, 07:20)  привет всем. Короче, пытаюсь передать по rs232 из Mega64 в комп данные, но что-то не получается (передает "00" и все тут). Кварц = 11,059 МГц UCSR0C не настраивай оставь по умолчанию. Байты передавай с небольшой задержкой. Один байт терминал может глотнуть.
--------------------
Опыт - это та чудесная штука, которая позволяет вам узнать ошибку, когда вы ее повторите.
|
|
|
|
|
Feb 17 2007, 20:42
|
Частый гость
 
Группа: Свой
Сообщений: 186
Регистрация: 23-04-06
Из: Сочи
Пользователь №: 16 411

|
блин, снова не получается - все сделал как Вы предлагали, но без результатно (нули передаются), даже на другой порт перекинул все. Получилаьс такая эспериментальная фигня. .include "m64def.inc" .CSEG .org 0 rjmp reset reset: ldi r16,low(RAMEND) out SPL,r16 ldi r16,high(RAMEND) out SPH,r16 ;------------------------------------------------------------------------------- ;передача массива чисел ;UART enabled ; ldi r16,(3<<UCSZ00) | (1<<UCPOL0) sts UCSR0C,r16 ldi r21,0 sts UBRR1H,r21 ldi r20,17 ;определение скорости = 38400 sts UBRR1L,r20 ldi r16,(1<<TXEN1) ;разрешение прередатчика sts UCSR1B,r16 ;------------------------------------------------------------------------------- ldi r16,0xAA sts UDR1,r16 nop nop nop nop nop nop nop nop nop nop nop nop nop nop ldi r16,0xAB sts UDR1,r16 rep: rjmp rep Да вот еще решил фьюзы посмотреть - оказалось стоял M103C. Думал из-за него. Сейчас фьюзы таковы: Может из-за них, ща еще и сам в даташите посмотрю...Спасибо за ответы
Эскизы прикрепленных изображений
|
|
|
|
|
Feb 17 2007, 21:31
|
Местный
  
Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425

|
Цитата(skilful @ Feb 17 2007, 20:42)  Да, про фузы я забыл спросить. Конечно, они не правильные. У вас работает от внутреннего генератора. Все фузы убрать (в Pony Prog), включить только CKOPT.
Эскизы прикрепленных изображений
|
|
|
|
|
Feb 17 2007, 23:37
|
Частый гость
 
Группа: Свой
Сообщений: 186
Регистрация: 23-04-06
Из: Сочи
Пользователь №: 16 411

|
понял, только или я с ними доигрался или программатор криво сделал, не читается ниче вообще  ) Вроде верхний ряд фьюзов вообще не ставил, а тут теперь не читается и не шьется ничего. А можно ли как-нить узнать выставлены ли ЛОК биты? Пони прог позволяет? З.ы. спасибо за ответ
|
|
|
|
|
Feb 18 2007, 00:05
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(skilful @ Feb 17 2007, 17:42)  блин, снова не получается - все сделал как Вы предлагали, но без результатно (нули передаются), даже на другой порт перекинул все. Получилась такая эспериментальная фигня.
;UART enabled ; ldi r16,(3<<UCSZ00) | (1<<UCPOL0) sts UCSR0C,r16 ldi r21,0 sts UBRR1H,r21 ldi r20,17 ;определение скорости = 38400 sts UBRR1L,r20 ldi r16,(1<<TXEN1) ;разрешение прередатчика sts UCSR1B,r16 ;------------------------------------------------------------------------------- ldi r16,0xAA sts UDR1,r16 nop nop nop nop nop nop nop nop nop nop nop nop nop nop ldi r16,0xAB sts UDR1,r16 rep: rjmp rep Да вот еще решил фьюзы посмотреть - оказалось стоял M103C. Думал из-за него. Сейчас фьюзы таковы: Может из-за них, ща еще и сам в даташите посмотрю...Спасибо за ответы 1) Вообще-то, честнее было бы перед записью байта в UDR1 проверять бит UDRE1 на предмет готовности передатчика к передаче. 2) Через 15 тактов (а это порядка 1.4 мкс) после передачи первого байта вы начинаете передачу второго байта, прерывая тем самым передачу первого. Передатчик, конечно, начнет передавать второй байт, но что будет на приемном конце? Поэтому надо обязательно проверять бит UDR1 (или бит ТХС1, зависит от задачи). Как-то так Код wait: sbis UCSR1A,UDRE1 rjmp wait sts UDR1,r16
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|