Заранее, спасибо"!
- Вложения
-
- UART5.RAR
- (8.03 КБ) 189 скачиваний
Код: Выделить всё
.db 0xCF,"ривет Комсомолу!!!",0x00Код: Выделить всё
ReadArray:
ldi ZH,High(MyArray*2) ;çàãðóçêà àäðåñà 0-ãî
ldi ZL,Low(MyArray*2) ;ýëåìåíòà â ðåã. ïàðó Z
ldi Temp1,0
add ZL,Temp ;ïðèáàâëåíèå
adc ZH,Temp1 ;âíóòð. àäðåñà
lpm ;çàãðóçêà èç ÏÇÓ
mov Temp1,R0 ;êîïèðîâàíèå
rcall uart_snt
cpi temp1, '.'
breq finito
inc Temp ;óâåëè÷. âíóòð. àäðåñà
rjmp ReadArray ;â íà÷àëî öèêëàКод: Выделить всё
ReadArray:
ldi ZH,High(MyArray<<1)
ldi ZL,Low(MyArray<<1)
lpm Temp1, Z+
cpi temp1, 0
breq finito
rcall uart_snt
rjmp ReadArray
Что именно сработало? 0xFC вместо буквы "П" или скорость поменять?Slavast писал(а):Попробовал!
Поменял скорость UART на более меньшую! заработало!
Спасибо.
Engineer_Keen писал(а):Что именно сработало? 0xFC вместо буквы "П" или скорость поменять?Slavast писал(а):Попробовал!
Поменял скорость UART на более меньшую! заработало!
Спасибо.
Foks писал(а):Чето все слишком сложно. Во-первых, мы добавили в конце строки нуль, так что выход должен теперь происходить по сравнению с нулем. Кроме того, к ZH:ZL прибавляется единица мега-сложным путем. Я бы переписал весь кусок кода вот так:Код: Выделить всё
ReadArray: ldi ZH,High(MyArray*2) ;çàãðóçêà àäðåñà 0-ãî ldi ZL,Low(MyArray*2) ;ýëåìåíòà â ðåã. ïàðó Z ldi Temp1,0 add ZL,Temp ;ïðèáàâëåíèå adc ZH,Temp1 ;âíóòð. àäðåñà lpm ;çàãðóçêà èç ÏÇÓ mov Temp1,R0 ;êîïèðîâàíèå rcall uart_snt cpi temp1, '.' breq finito inc Temp ;óâåëè÷. âíóòð. àäðåñà rjmp ReadArray ;â íà÷àëî öèêëàПозвольте узнать, от чего тактируется Ваша схема?Код: Выделить всё
ReadArray: ldi ZH,High(MyArray<<1) ldi ZL,Low(MyArray<<1) lpm Temp1, Z+ cpi temp1, 0 breq finito rcall uart_snt rjmp ReadArray
Для работы UART всегда используют кварцевый резонатор! Внутренний генератор имеет ОЧЕНЬ плохую точность и когда у Вас температура в комнате на 5 градусов поменяется, Вы можете уже и остальных букв не увидеть.
Сдвиг MyArray влево на 1 бит, это тоже самое что и умножение на 2Slavast писал(а):А что означает: MyArray<<1 ?
А как? Если сравнивается с числом 0, то cpi temp1,0, если с символом "0", то либо cpi temp1,'0', либо cpi temp1,0x30 (0x30=48=ASCII код символа "0")Slavast писал(а):И почему так сравнивается с 0: cpi temp1, 0 ?
Slavast писал(а):Похоже в данном случае дело было просто в ошибках синхронизации на скорости 115200
В коде Foksа есть ошибочка. RJMP нужно делать не на строкуSlavast писал(а):Ваш код не работает - выводит только бесконечно букву П, первую букву слова Привет.
Код: Выделить всё
ldi ZH,High(MyArray<<1)Код: Выделить всё
lpm Temp1, Z+Всем спасибо!Engineer_Keen писал(а):Slavast писал(а):Ваш код не работает - выводит только бесконечно букву П, первую букву слова Привет.
Для 16МГц-ового кварца, для 115200 на UART-е, надо ставить UART в режим двойной скорости - тогда расхождение частоты получается меньше. Абсолютное значение ошибки - 2.1% против 3.5%. А вообще рекомендуют не более 1.5-2.0% расхождение. В общем, за подробностями,как обычно, в даташит...Slavast писал(а):Тактируюсь спомощью предделителя UARTA. A на самом микроконтроллере навешен кварц 16 МГц!
Понял! Спасибо)Kavka писал(а): Для 16МГц-ового кварца, для 115200 на UART-е, надо ставить UART в режим двойной скорости - тогда расхождение частоты получается меньше. Абсолютное значение ошибки - 2.1% против 3.5%. А вообще рекомендуют не более 1.5-2.0% расхождение. В общем, за подробностями,как обычно, в даташит...