Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение DX168B »

Gudd-Head писал(а): :) http://easyelectronics.ru/
Кстати, отличный сайт. Сам там бываю иногда. :) :beer:
I am DX168B and this is my favourite forum on internet!
Реклама
Аватара пользователя
ciph
Встал на лапы
Сообщения: 111
Зарегистрирован: Вт окт 05, 2010 08:11:41
Откуда: г. Петрозаводск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ciph »

Уважаемые, соединил 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

в принципе все работает. Вопрос в том, как это можно сделать что бы текст посылался одной строкой. Понимаю что для этого нужно использовать что то на подобии массива.
Реклама
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

Обычным циклом.
Текст можно сохранить в памяти программ как массив байт:

Код: Выделить всё

my_text:
.db "Privet!"
Аватара пользователя
ciph
Встал на лапы
Сообщения: 111
Зарегистрирован: Вт окт 05, 2010 08:11:41
Откуда: г. Петрозаводск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ciph »

аа можно чуток чуток подробнее, я вот нашел в обучалке:
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

корни отсюда брать? И еще как я понимаю прерывания надо использовать?
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

Можно и без прерываний:

Код: Выделить всё

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!"
Реклама
Аватара пользователя
ciph
Встал на лапы
Сообщения: 111
Зарегистрирован: Вт окт 05, 2010 08:11:41
Откуда: г. Петрозаводск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ciph »

Спасибо! Буду пробовать
Реклама
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение DX168B »

Кусок одной из моих программ. Немного по ламерски, просто было не до изяществ.
п\программа передачи по 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!
Аватара пользователя
ciph
Встал на лапы
Сообщения: 111
Зарегистрирован: Вт окт 05, 2010 08:11:41
Откуда: г. Петрозаводск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ciph »

Возникла еще одна задача:
Принимаем по uart с пк допустим строку, состоящую из n количества символов. Нужно в этой строке найти определенные символы. При положительном результате делаем какое либо действие дальше... Как нужно?-запихнуть эту строку в озу и потом начать сравнивать или есть другой способ?
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Gudd-Head »

ciph писал(а):есть другой способ?
Если только сразу сравнивать принятный символ.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Jack_A »

ciph писал(а):Как нужно?-запихнуть эту строку в озу и потом начать сравнивать
Именно так. А разве на этом пути есть какие-то непреодолимые трудности? Строка по любому принимается в ОЗУ.
Аватара пользователя
ciph
Встал на лапы
Сообщения: 111
Зарегистрирован: Вт окт 05, 2010 08:11:41
Откуда: г. Петрозаводск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ciph »

Jack_A писал(а): есть какие-то непреодолимые трудности?
Есть, но надеюсь не непреодолимые. Все находится в стадии освоения и изучения мк.
Аватара пользователя
nibiluk
Потрогал лапой паяльник
Сообщения: 383
Зарегистрирован: Пн мар 16, 2009 23:35:42
Откуда: Украина Новоднестровск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение nibiluk »

Нужна такая задача, есть переменная в озу, есть одна кнопка, нажал на кнопку даные с одного регистра записались в озу, нажел еще раз с другого регистра в ту же переменную, и так желательно 4 раза, как это записать кодом ? кто подскажет.
Всем известно что любая микросхема работает на дыме, и если волшебный дым из неё вышел то она перестает работать.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение pyzhman »

Код: Выделить всё

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 в вопросах и ответах

Сообщение Gudd-Head »

pyzh_man писал(а):
А антидребезг? :)
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
nibiluk
Потрогал лапой паяльник
Сообщения: 383
Зарегистрирован: Пн мар 16, 2009 23:35:42
Откуда: Украина Новоднестровск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение nibiluk »

Не совсем понятно как прога узнает нажал я один раз или 10 раз.
Всем известно что любая микросхема работает на дыме, и если волшебный дым из неё вышел то она перестает работать.
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение GP1 »

nibiluk писал(а):Не совсем понятно как прога узнает нажал я один раз или 10 раз.
как поставлен вопрос, так и задача решена.
Gudd-Head писал(а): А антидребезг? :)
вопроса про антидребезг не было.

если надо сначала получит число нажатий, а потом уже анализировать.
nibiluk писал(а): нажел еще раз с другого регистра в ту же переменную...
то и задачу надо обрисовывать конкретней
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
nibiluk
Потрогал лапой паяльник
Сообщения: 383
Зарегистрирован: Пн мар 16, 2009 23:35:42
Откуда: Украина Новоднестровск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение nibiluk »

Ладно скажу по другому, есть цикл индикации на семисегментник,хочу одной кнопкой менять содержимое которое отображается. Не пинайте сильно програмирование только начал осваивать.
Всем известно что любая микросхема работает на дыме, и если волшебный дым из неё вышел то она перестает работать.
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение GP1 »

опять же, тут куча вариантов реализации, как вариант:

в памяти организуем N-переменных
по каждому нажатию кнопки меняем счетчик, ес-но проверяем на макс/мин значения
перед вызовом цикла индикации (я бы сделал в прерывании) проверяем кнопку (значение которое накопил) если оно поменялось
грузим из памяти новое значение
если нет оставляем старое.

ну и т.д.
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение pyzhman »

GP1 писал(а):как поставлен вопрос, так и задача решена.
GP1 - :beer:
Gudd-Head - :)
nibiluk - если хотите получить ясный и внятный ответ, описывайте сразу все и досконально. Отвечающий может и рад бы вам помочь, но после тридесятого холостого написания кода руки опускаются. "Ладно скажу по другому" - вас никто не уговаривает, нужно вам.
Docendo discimus
Аватара пользователя
nibiluk
Потрогал лапой паяльник
Сообщения: 383
Зарегистрирован: Пн мар 16, 2009 23:35:42
Откуда: Украина Новоднестровск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение nibiluk »

Всем спасибо нашел нужное решение тут http://easyelectronics.ru/avr-uchebnyj- ... eniya.html
Всем известно что любая микросхема работает на дыме, и если волшебный дым из неё вышел то она перестает работать.
Ответить

Вернуться в «AVR»