Кстати, отличный сайт. Сам там бываю иногда.Gudd-Head писал(а):http://easyelectronics.ru/
Ассемблер (ASM) для AVR в вопросах и ответах
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
I am DX168B and this is my favourite forum on internet!
- Реклама
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Уважаемые, соединил atmega 8 c компом, прошил мк вот этим:
.include "c:\...\m8def.inc"
.cseg
.org 0
ldi R16,high(RAMEND)
out SPH,R16
ldi R16,low(RAMEND)
out SPL,R16
;Инициализация USART
ldi R16,$00 ;USART.Mode=9600,N,1(8Mhz)
out UCSRA,R16
ldi R16,$86
out UCSRC,R16
ldi R16,$33
out UBRRL,R16
ldi R16,$00
out UBRRH,R16
ldi R16,$F9
out UCSRB,R16
;Передача байта (символа) данных
ldi R16,$04 ;USART.Data=$04
out UDR,R16
;Ожидание конца передачи
in R16,UCSRA ;USART.WAIT(UDRE)
sbrs R16,UDRE
rjmp (PC-2)
;Передача байта (символа) данных
ldi R16,'P' ;USART.Data="P"
out UDR,R16
;Ожидание конца передачи
in R16,UCSRA ;USART.WAIT(UDRE)
sbrs R16,UDRE
rjmp (PC-2)
;Передача байта (символа) данных
ldi R16,'r' ;USART.Data="r"
out UDR,R16
;Ожидание конца передачи
in R16,UCSRA ;USART.WAIT(UDRE)
sbrs R16,UDRE
rjmp (PC-2)
ldi R16,'i' ;USART.Data="i"
out UDR,R16
in R16,UCSRA ;USART.WAIT(UDRE)
sbrs R16,UDRE
rjmp (PC-2)
ldi R16,'v' ;USART.Data="v"
out UDR,R16
in R16,UCSRA ;USART.WAIT(UDRE)
sbrs R16,UDRE
rjmp (PC-2)
ldi R16,'e' ;USART.Data="e"
out UDR,R16
in R16,UCSRA ;USART.WAIT(UDRE)
sbrs R16,UDRE
rjmp (PC-2)
ldi R16,'t' ;USART.Data="t"
out UDR,R16
in R16,UCSRA ;USART.WAIT(UDRE)
sbrs R16,UDRE
rjmp (PC-2)
ldi R16,'!' ;USART.Data="!"
out UDR,R16
in R16,UCSRA ;USART.WAIT(UDRE)
sbrs R16,UDRE
rjmp (PC-2)
;Конец программы (бесконечный цикл)
END_PROG: ;END PROG
rjmp END_PROG
в принципе все работает. Вопрос в том, как это можно сделать что бы текст посылался одной строкой. Понимаю что для этого нужно использовать что то на подобии массива.
.include "c:\...\m8def.inc"
.cseg
.org 0
ldi R16,high(RAMEND)
out SPH,R16
ldi R16,low(RAMEND)
out SPL,R16
;Инициализация USART
ldi R16,$00 ;USART.Mode=9600,N,1(8Mhz)
out UCSRA,R16
ldi R16,$86
out UCSRC,R16
ldi R16,$33
out UBRRL,R16
ldi R16,$00
out UBRRH,R16
ldi R16,$F9
out UCSRB,R16
;Передача байта (символа) данных
ldi R16,$04 ;USART.Data=$04
out UDR,R16
;Ожидание конца передачи
in R16,UCSRA ;USART.WAIT(UDRE)
sbrs R16,UDRE
rjmp (PC-2)
;Передача байта (символа) данных
ldi R16,'P' ;USART.Data="P"
out UDR,R16
;Ожидание конца передачи
in R16,UCSRA ;USART.WAIT(UDRE)
sbrs R16,UDRE
rjmp (PC-2)
;Передача байта (символа) данных
ldi R16,'r' ;USART.Data="r"
out UDR,R16
;Ожидание конца передачи
in R16,UCSRA ;USART.WAIT(UDRE)
sbrs R16,UDRE
rjmp (PC-2)
ldi R16,'i' ;USART.Data="i"
out UDR,R16
in R16,UCSRA ;USART.WAIT(UDRE)
sbrs R16,UDRE
rjmp (PC-2)
ldi R16,'v' ;USART.Data="v"
out UDR,R16
in R16,UCSRA ;USART.WAIT(UDRE)
sbrs R16,UDRE
rjmp (PC-2)
ldi R16,'e' ;USART.Data="e"
out UDR,R16
in R16,UCSRA ;USART.WAIT(UDRE)
sbrs R16,UDRE
rjmp (PC-2)
ldi R16,'t' ;USART.Data="t"
out UDR,R16
in R16,UCSRA ;USART.WAIT(UDRE)
sbrs R16,UDRE
rjmp (PC-2)
ldi R16,'!' ;USART.Data="!"
out UDR,R16
in R16,UCSRA ;USART.WAIT(UDRE)
sbrs R16,UDRE
rjmp (PC-2)
;Конец программы (бесконечный цикл)
END_PROG: ;END PROG
rjmp END_PROG
в принципе все работает. Вопрос в том, как это можно сделать что бы текст посылался одной строкой. Понимаю что для этого нужно использовать что то на подобии массива.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Обычным циклом.
Текст можно сохранить в памяти программ как массив байт:
Текст можно сохранить в памяти программ как массив байт:
Код: Выделить всё
my_text:
.db "Privet!"
Re: Ассемблер (ASM) для AVR в вопросах и ответах
аа можно чуток чуток подробнее, я вот нашел в обучалке:
ldi Temp,0 ;инициализация регистра
;внутренней адресации массива
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 ;копирование
out PortB,Temp1 ;вывод в порт
inc Temp ;увелич. внутр. адреса
rjmp ReadArray ;в начало цикла
MyArray:
.db 12,16,3,4,10,17,255,37,158,14,13,98
.db 14,85,30,9,145,52,64,49,119,72,209,46
корни отсюда брать? И еще как я понимаю прерывания надо использовать?
ldi Temp,0 ;инициализация регистра
;внутренней адресации массива
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 ;копирование
out PortB,Temp1 ;вывод в порт
inc Temp ;увелич. внутр. адреса
rjmp ReadArray ;в начало цикла
MyArray:
.db 12,16,3,4,10,17,255,37,158,14,13,98
.db 14,85,30,9,145,52,64,49,119,72,209,46
корни отсюда брать? И еще как я понимаю прерывания надо использовать?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Можно и без прерываний:
Код: Выделить всё
ldi ZL,Low(my_text*2)
ldi ZH,High(my_text*2)
ldi R16,7 ; длина строки
loop:
sbis UCSRA,UDRE
rjmp loop ; ожидание
lpm R17,Z+ ; читаем и увеличиваем адрес в Z
out UDRE,R17 ; отправляем байт
dec R16 ; проверим сколько отправили
brne loop ; если не всё - зацикливаем
;-------------
my_text:
.db "Privet!"- Реклама
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Спасибо! Буду пробовать
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Кусок одной из моих программ. Немного по ламерски, просто было не до изяществ.
п\программа передачи по UART вынесена отдельно, так как применяется практически везде.
(вывод логов всех действий девайса по UART)
п\программа передачи по UART вынесена отдельно, так как применяется практически везде.
(вывод логов всех действий девайса по UART)
Код: Выделить всё
..............
rcall PRC_STOP
................
...
;----------------------------------------------
PRC_STOP:
ldi ZL, Low(ARRAY10*2)
ldi ZH, High(ARRAY10*2)
ldi R17, 14
PRC_STOP_LOOP:
lpm r16, Z+
rcall USART_TX
dec r17
brne PRC_STOP_LOOP
ret
;----------------------------------------------
USART_TX:
;---
sbis UCSRA, UDRE
rjmp USART_TX
;---
out UDR, r16
ret
;----------------------------------------------
ARRAY10:
.db "PROC STOPPED.", 10
I am DX168B and this is my favourite forum on internet!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Возникла еще одна задача:
Принимаем по uart с пк допустим строку, состоящую из n количества символов. Нужно в этой строке найти определенные символы. При положительном результате делаем какое либо действие дальше... Как нужно?-запихнуть эту строку в озу и потом начать сравнивать или есть другой способ?
Принимаем по uart с пк допустим строку, состоящую из n количества символов. Нужно в этой строке найти определенные символы. При положительном результате делаем какое либо действие дальше... Как нужно?-запихнуть эту строку в озу и потом начать сравнивать или есть другой способ?
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Если только сразу сравнивать принятный символ.ciph писал(а):есть другой способ?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Именно так. А разве на этом пути есть какие-то непреодолимые трудности? Строка по любому принимается в ОЗУ.ciph писал(а):Как нужно?-запихнуть эту строку в озу и потом начать сравнивать
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Есть, но надеюсь не непреодолимые. Все находится в стадии освоения и изучения мк.Jack_A писал(а): есть какие-то непреодолимые трудности?
- nibiluk
- Потрогал лапой паяльник
- Сообщения: 383
- Зарегистрирован: Пн мар 16, 2009 23:35:42
- Откуда: Украина Новоднестровск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Нужна такая задача, есть переменная в озу, есть одна кнопка, нажал на кнопку даные с одного регистра записались в озу, нажел еще раз с другого регистра в ту же переменную, и так желательно 4 раза, как это записать кодом ? кто подскажет.
Всем известно что любая микросхема работает на дыме, и если волшебный дым из неё вышел то она перестает работать.
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Код: Выделить всё
L0: SBIC PINB,0
RJMP L0
STS var, R16
L1: SBIS PINB,0
RJMP L1
L2: SBIC PINB,0
RJMP L2
STS var, R17
L3: SBIS PINB,0
RJMP L3
L4: SBIC PINB,0
RJMP L4
STS var, R18
L5: SBIS PINB,0
RJMP L5
L6: SBIC PINB,0
RJMP L6
STS var, R19
L7: SBIS PINB,0
RJMP L7
Docendo discimus
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А антидребезг?pyzh_man писал(а):Код: Выделить всё
...
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- nibiluk
- Потрогал лапой паяльник
- Сообщения: 383
- Зарегистрирован: Пн мар 16, 2009 23:35:42
- Откуда: Украина Новоднестровск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Не совсем понятно как прога узнает нажал я один раз или 10 раз.
Всем известно что любая микросхема работает на дыме, и если волшебный дым из неё вышел то она перестает работать.
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
как поставлен вопрос, так и задача решена.nibiluk писал(а):Не совсем понятно как прога узнает нажал я один раз или 10 раз.
вопроса про антидребезг не было.Gudd-Head писал(а): А антидребезг?
если надо сначала получит число нажатий, а потом уже анализировать.
то и задачу надо обрисовывать конкретнейnibiluk писал(а): нажел еще раз с другого регистра в ту же переменную...
- nibiluk
- Потрогал лапой паяльник
- Сообщения: 383
- Зарегистрирован: Пн мар 16, 2009 23:35:42
- Откуда: Украина Новоднестровск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Ладно скажу по другому, есть цикл индикации на семисегментник,хочу одной кнопкой менять содержимое которое отображается. Не пинайте сильно програмирование только начал осваивать.
Всем известно что любая микросхема работает на дыме, и если волшебный дым из неё вышел то она перестает работать.
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
опять же, тут куча вариантов реализации, как вариант:
в памяти организуем N-переменных
по каждому нажатию кнопки меняем счетчик, ес-но проверяем на макс/мин значения
перед вызовом цикла индикации (я бы сделал в прерывании) проверяем кнопку (значение которое накопил) если оно поменялось
грузим из памяти новое значение
если нет оставляем старое.
ну и т.д.
в памяти организуем N-переменных
по каждому нажатию кнопки меняем счетчик, ес-но проверяем на макс/мин значения
перед вызовом цикла индикации (я бы сделал в прерывании) проверяем кнопку (значение которое накопил) если оно поменялось
грузим из памяти новое значение
если нет оставляем старое.
ну и т.д.
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
GP1 -GP1 писал(а):как поставлен вопрос, так и задача решена.
Gudd-Head -
nibiluk - если хотите получить ясный и внятный ответ, описывайте сразу все и досконально. Отвечающий может и рад бы вам помочь, но после тридесятого холостого написания кода руки опускаются. "Ладно скажу по другому" - вас никто не уговаривает, нужно вам.
Docendo discimus
- nibiluk
- Потрогал лапой паяльник
- Сообщения: 383
- Зарегистрирован: Пн мар 16, 2009 23:35:42
- Откуда: Украина Новоднестровск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Всем спасибо нашел нужное решение тут http://easyelectronics.ru/avr-uchebnyj- ... eniya.html
Всем известно что любая микросхема работает на дыме, и если волшебный дым из неё вышел то она перестает работать.



