|
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". Помогите плз. Заранее благодарю.
|
|
|
|
|
 |
Ответов
|
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 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
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
Сообщений в этой теме
skilful MEGA64 + uart Feb 17 2007, 08:20 WHALE а кварц какой? Feb 17 2007, 09:55 satellite-plus Цитата(skilful @ Feb 17 2007, 07:20) прив... Feb 17 2007, 10:13 Dopler Ошибка в том, что вы пишете UBRR0L раньше UBRR0H. ... Feb 17 2007, 13:06 Dopler Цитата(skilful @ Feb 17 2007, 20:42)
Да... Feb 17 2007, 21:31 skilful понял, только или я с ними доигрался или программа... Feb 17 2007, 23:37 skilful да я так делал сначала, но результат один - приним... Feb 18 2007, 00:18 =GM= Цитата(skilful @ Feb 17 2007, 21:18) да я... Feb 18 2007, 01:05 skilful ну конечно, через max232 Feb 18 2007, 01:28 Dopler Короче суть в том, что при частоте больше 8Мгц и п... Feb 18 2007, 10:18 skilful Спасибо Доплер. Последовал твоему совету. Начало ч... Feb 20 2007, 21:31 skilful Спааасибо Доплер - все заработало!!! В... Feb 20 2007, 22:07 Dopler Да, все галки убрать, оставить только CKOPT. Feb 20 2007, 22:24
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|