Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 02.10.2010, 14:44  
rocky7
Заблокирован
 
Регистрация: 03.12.2008
Сообщений: 112
Сказал спасибо: 11
Сказали Спасибо 22 раз(а) в 22 сообщении(ях)
rocky7 на пути к лучшему
По умолчанию Вывод строки в USART

Есть исходник для ATmega16. который выводит строку в COM порт.
Как изменить его, чтобы вывести кириллицу?
.INCLUDE "m16def.inc"
.equ XTAL = 14318000
.equ baudrate = 9600
.equ bauddivider = XTAL/(16*baudrate)-1
.MACRO putc
ldi R16,@0
rcall uart_snt ; вызываем подпрограмму передачи данных по UART.
.ENDMACRO


.org 0
rjmp reset_handler
.org URXCaddr
rjmp uart_rcvd ;принимать данные будем по прерыванию



reset_handler:

ldi r16,high(RAMEND) ; инициализация стека
out SPH,r16
ldi r16,low(RAMEND)
out SPL,r16
sei

LDI R16, low(bauddivider) ;инициализация уарта
OUT UBRRL,R16
LDI R16, high(bauddivider)
OUT UBRRH,R16
;LDI R16,0
;OUT UCSRA,R16
LDI R16, (1‹‹RXEN)|(1‹‹TXEN)|(1‹‹RXCIE)|(0‹‹TXCIE)
OUT UCSRB, R16
LDI R16,(1‹‹URSEL)|(1‹‹UCSZ0)|(1‹‹UCSZ1)
OUT UCSRC,R16

putc 'H' ;Приветствие, мол коннект успешен и усарт работает
putc 'e'
putc 'l'
putc 'l'
putc 'o'
putc ','
putc ' '
putc 'm'
putc 'y'
putc ' '
putc 'n'
putc 'a'
putc 'm'
putc 'e'
putc ' '
putc 'i'
putc 's'
putc ' '
putc 'A'
putc 'T'
putc 'm'
putc 'e'
putc 'g'
putc 'a'
putc '1'
putc '6'
putc '!'
putc 0x0D
putc 0x0A

ldi r16,0 ;сброс рабочих регистров, а то малоли
ldi r17,0
ldi r18,0
ldi r19,0
ldi r20,0

start: ;зацикливаем на распознание первого числа, число должно прийти двоичным и дополнено возвратом каретки и переводом строки (!!!)
cpi r16,48 ; это нолик
BREQ label1

cpi r16,49 ; это единичка
BREQ label2

cpi r16,13 ;а вдруг возврат каретки? =)
BREQ label3

cpi r16,10 ;a вдруг перевод строки? =)
breq label4

jmp start

loop:
ldi r16,150; это нужно чтоб цифирка, пришедшая не так давно, не определялась много миллионов раз =)
jmp start



label1:
;putc 'a'
lsl r17 ; r17 будет накапливать двоичное число, если нолик пришел, то просто сдвиг влево
jmp loop

label2:
;putc 'b'
inc r17 ; а если единичка, то увеличим на 1 и сдвинем влево
lsl r17
jmp loop

label3:
;putc 'c'
ldi r18,1 ; r18 будет в качестве переключателя, т.к. как в условии было, что сперва идет возврат каретки, потом переход
jmp loop

label4:
cpi r18,1 ; ура нам повезло, каретка уже вернулась, да еще и переход строки подоспел, а это значит, что мк получил первое число
BREQ start2 ; можно идти за вторым
;putc 'e'
jmp loop

start2: ;тут уже всё зациклино на получение второго числа, все так же как и в первом
cpi r16,48 ; это нолик
BREQ label21

cpi r16,49 ; это единичка
BREQ label22

cpi r16,13 ;а вдруг возврат каретки? =)
BREQ label23

cpi r16,10 ;a вдруг перевод строки? =)
breq label24

jmp start2

loop2:
ldi r16,150;
jmp start2



label21: ;число собираем в r19
lsl r19
jmp loop2

label22:
inc r19
lsl r19
jmp loop2

label23:
ldi r20,1 ; регистр р20 будет переключающим
jmp loop2

label24:
cpi r20,1
BREQ finish ; ура у нас есть два числа можем переходит к их обработке
jmp loop2

finish:
lsr r17 ; регистры сдвинулись влево из-за приема последней цифры надо поправить
andi r17,0b00001111; так как число должно быть 4х значным, то убиваем лишние биты

lsr r19 ; здесь тоже самое что и с r17
andi r19,0b00001111;

add r17,r19 ; складываем их
mov r16,r17 ; и подготавливаем к отправке

ldi r21,48 ; это опционально, перевод в систему ASCII перед отправкой
add r16,r21 ;


rcall uart_snt ;отправляем результат пользователю

putc 10 ;чтоб покрасевей было переведем строку
putc 13 ;

ldi r16,0 ; всё сбрасываем и начинаем сначала
ldi r17,0 ;
ldi r18,0 ;
ldi r19,0 ;
ldi r20,0 ;



jmp start



uart_snt:
sbis UCSRA,UDRE; Ждем пока бит UDRE в регистре UCSRA станет 1, что означет готовность УАРТА к передаче.
rjmp uart_snt
out UDR,R16 ; бросаем число из регистра 16 в регистр приемопередатчика.
ret



uart_rcvd:
in r16,udr
reti
Реклама:
rocky7 вне форума  
Сказали "Спасибо" rocky7
warel (27.06.2019)
Непрочитано 02.10.2010, 15:58  
_Serg_
Прописка
 
Регистрация: 05.03.2010
Сообщений: 173
Сказал спасибо: 28
Сказали Спасибо 70 раз(а) в 49 сообщении(ях)
_Serg_ на пути к лучшему
По умолчанию Re: Вывод строки в USART

Заменить символы:

Сообщение от rocky7 Посмотреть сообщение
putc 'H' ;Приветствие, мол коннект успешен и усарт работает
putc 'e'
putc 'l'
putc 'l'
putc 'o'
итд...

на нужные вам. Если напрямую не получиться, то воспользоваться таблицей кодов:
http://ascii.org.ru/ и подставить в hex формате.

что то типа:
putc '8F' ; П
putc '90' ; Р
putc '88' ; И
putc '82' ; В
putc '85' ; Е
putc '92' ; Т

Последний раз редактировалось _Serg_; 02.10.2010 в 16:06.
_Serg_ вне форума  
Сказали "Спасибо" _Serg_
warel (27.06.2019)
Непрочитано 02.10.2010, 18:16  
Cybermaker
Вид на жительство
 
Регистрация: 21.08.2007
Сообщений: 318
Сказал спасибо: 12
Сказали Спасибо 67 раз(а) в 61 сообщении(ях)
Cybermaker на пути к лучшему
По умолчанию Re: Вывод строки в USART

Сообщение от _Serg_ Посмотреть сообщение
что то типа:
putc '8F' ; П
putc '90' ; Р
putc '88' ; И
putc '82' ; В
putc '85' ; Е
putc '92' ; Т
Точнее так:
putc 0x8F ; П
putc 0x90 ; Р
putc 0x88 ; И
putc 0x82 ; В
putc 0x85 ; Е
putc 0x92 ; Т
Cybermaker вне форума  
Сказали "Спасибо" Cybermaker
warel (27.06.2019)
Непрочитано 02.10.2010, 19:11  
rocky7
Заблокирован
 
Регистрация: 03.12.2008
Сообщений: 112
Сказал спасибо: 11
Сказали Спасибо 22 раз(а) в 22 сообщении(ях)
rocky7 на пути к лучшему
По умолчанию Re: Вывод строки в USART

Попробую сначала в Протеусе. Спасибки!
rocky7 вне форума  
Сказали "Спасибо" rocky7
warel (27.06.2019)
Непрочитано 02.10.2010, 22:51  
_Serg_
Прописка
 
Регистрация: 05.03.2010
Сообщений: 173
Сказал спасибо: 28
Сказали Спасибо 70 раз(а) в 49 сообщении(ях)
_Serg_ на пути к лучшему
По умолчанию Re: Вывод строки в USART

упс...
а ведь и правда.. Обшибся с примером..
а ведь написал правильно:
Сообщение от _Serg_ Посмотреть сообщение
и подставить в hex формате.
_Serg_ вне форума  
Сказали "Спасибо" _Serg_
warel (27.06.2019)
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Bluetooch - USART переходник nml Микроконтроллеры, АЦП, память и т.д 12 17.08.2010 13:05
[Решено] Помогите определить семисегментник opylk Информация по радиокомпонентам 3 18.03.2010 19:38
Usart (УСАПП) wolfinstein Микроконтроллеры, АЦП, память и т.д 15 18.02.2010 19:15
Почему USART работает правильно? zhan99999 Микроконтроллеры, АЦП, память и т.д 10 24.01.2010 15:39
Радиокалькулятор ColorAndCode 9.3 optima22 Информация по радиокомпонентам 0 10.11.2009 11:01


Часовой пояс GMT +4, время: 13:33.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot