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

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

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

Сообщение GP1 »

Только не забудь - что каждый массив должен иметь 16 чисел, просто последним в массиве делаешь 0. :beer:
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
Modest
Сверлит текстолит когтями
Сообщения: 1138
Зарегистрирован: Сб апр 03, 2010 08:57:35

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

Сообщение Modest »

Смотрю здесь знающие КОТЫ собрались, пользуясь случаем спрошу: как заставить работать PORTB.6 и PORTB.7 в меге 8.
Если встреваю в тему, сильно не пинайте, потом удалюсь.
[img]http://i053.radikal.ru/1102/71/0a0346d3a067.gif[/img]
[size=85]Ты думаешь ты думал как ты думаешь? (с)[/size]
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

А в чем проблема-то?
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
Modest
Сверлит текстолит когтями
Сообщения: 1138
Зарегистрирован: Сб апр 03, 2010 08:57:35

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

Сообщение Modest »

Ха. Если бы я знал. На этих ногах должен висеть кварц, как альтернатива. Есть для этих ног фьюзы. Но как бы я их не конфигурировал, не подать, не принять на них ничего немогу. Например пишу PORTB.6 = 1 , на ноге получаю.... ничего неполучаю!
[img]http://i053.radikal.ru/1102/71/0a0346d3a067.gif[/img]
[size=85]Ты думаешь ты думал как ты думаешь? (с)[/size]
Аватара пользователя
Alexeus
Вымогатель припоя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

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

Сообщение Alexeus »

Кроме состояния выводов порта PORTB=.... нужно еще и определить как будут выводы использоваться: DDRB=... По умолчанию DDRB=0, т.е. все ноги порта на ВХОД. Если выставить сейчас PORTB=1, то это ноги портаБ будут входом с ПОДТЯЖКОЙ, т.е. к ногам будет подключен внутренний резистор, второй стороной на +5вольт.

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

ldi R16,0xFF или ldi R16,0b11111111
out DDRB,R16 ; порт на выход.

ldi R16,0xff ;на все выводы портаБ подать высокий уровень +5вольт. можешь светодиоды туда подключить через 1к резистор.
out PortB,R16


если нужно снять напряжение с ножек порта, то:

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

ldi R16,0
out PortB,R16


ну вот в кратце... это на выход.

а что конкретно нужно?
в ассемблере не пишут в такой форме:

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

 PORTB.6 = 1


зачем тебе ща внешний кварц. мега8 с внутренним сконфигурирована 1мГц, если фьюзы не трогать, все работает. портБ можешь как хочешь пользовать. Можно обойтись вообще без внешнего кварца. Внутренний настраиваится фьюзами SKSEL3...0 на 1,2,4,8 мГц.
Последний раз редактировалось Alexeus Сб апр 17, 2010 10:29:28, всего редактировалось 1 раз.
Аватара пользователя
Modest
Сверлит текстолит когтями
Сообщения: 1138
Зарегистрирован: Сб апр 03, 2010 08:57:35

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

Сообщение Modest »

Блин я и на ASMе писал. Контроллерами занимаюсь не первый год, хоть слева и написанно что я родился! Проблема здесь не в программе. Проблема или в фъюзах или... на этом мысль обрывается.
а примеры записи пожалуйста
на С

DDRB=0xFF;
PORTB=0xFF;
или
PORTB.6=1;
PORTB.7=1;

а на асме был пример выше

ldi R16,0b00000011
out PortB,R16

Незнаю может с компилятором косяк, хотя на асме писал, та же проблема.
Последний раз редактировалось Modest Сб апр 17, 2010 12:12:32, всего редактировалось 3 раза.
[img]http://i053.radikal.ru/1102/71/0a0346d3a067.gif[/img]
[size=85]Ты думаешь ты думал как ты думаешь? (с)[/size]
Аватара пользователя
Alexeus
Вымогатель припоя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

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

Сообщение Alexeus »

код в студию... сюда в смысле. а лучше в тему вопросы по CodeVision AVR -он Си использует.
Аватара пользователя
Modest
Сверлит текстолит когтями
Сообщения: 1138
Зарегистрирован: Сб апр 03, 2010 08:57:35

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

Сообщение Modest »

Настраиваю весь порт б на выход, подаю в порт FF, горят все ноги кроме последних двух. Всё остальное прекрасно работает. В программе хоть использую переферию хоть нет, без разницы, результат один, последние 2 ноги неработают. Эт не на ед. мега8, а на всех скоко покупал. Разве никто не программил для меги 8 ? Разве токо у меня такие проблемы?
Последний раз редактировалось Modest Пн апр 19, 2010 07:05:37, всего редактировалось 1 раз.
[img]http://i053.radikal.ru/1102/71/0a0346d3a067.gif[/img]
[size=85]Ты думаешь ты думал как ты думаешь? (с)[/size]
Аватара пользователя
Alexeus
Вымогатель припоя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

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

Сообщение Alexeus »

ну а запусти ДДРБ на выход ("1") в портБ тоже пусти "1" . по идее должны быть все в высоком уровне. и опроси затем пинБ и выведи куда нть- в портС или Д... если все пины будут в "1" значит может поджег внутри портБ.

таймер/счетчик2 у тебя не задействован?

прочти фьюзы, выложи сюда в каком они состоянии.
Аватара пользователя
Alexeus
Вымогатель припоя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

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

Сообщение Alexeus »

GP1 писал(а):

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

       dec  key  ;уменьшаем значение клавиши на 1, я так понимаю 0 - клавиша не нажата
                     ;и умножаем на 16, как я говорил, иначе придется умножать на 15, а не все АВРки умеют это делать аппаратно
       lsl  key
       lsl  key
       lsl  key
       lsl  key
                     ;и вуаля в key у нас смещение адреса для выбора массива
       ldi  ZL,low(button1*2)    ;грузим в Z адрес первого массива
       ldi  ZH.high(button1*2)
                      ;складываем адрес и смещение
       add  ZL,key
       adc  ZH,tmp   ;tmp=0
;естественно при key=1 мы получим смещение 0, и получится адрес первого массива.

;дальше цикл


[/quote]

Очень хорошо! все так как нужно! Только пара нюансов:
1. если Key_buf=0 (кнопка не нажата), вычитаем 1, прибавляем к адресу начала первого массива и получаем адрес в памяти, стоящий за 16 байт до начала первого массива. -там может быть какие угодно значения... Ну да это не страшно, если в буфере "0", то я вообще не вызываю цикл обработки.
2. поясни пожалуйста для чего мы вычитаем еденицу от числа в буфере клавиш? все работает на ура, но я не пойму, откуда взялась такая мысль получить номер нажатой кнопки и обязательно вычесть из него еденицу, что бы потом расчитать смещение :)... туплю...
3. мне еще подсказали что вместо 4 lsl можно один swap применить.
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

1. swap - применить можно, это точно :))), только сначала надо старший нимбл обнулить,

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

     andi   key_buf,0x0F

просто когда мне нужно умножить на х2, х4, х8, х16 я пишу lsl -привычка :dont_know:
2. с Key_buf=0 все правильно, прежде чем вызывать цикл надо проверить на 0.
3. Почему вычитаем 1? Делов том что мк, как и все цифровые схемы считает 0-1-2-..., а у нас 0 - клавиша не нажата, нажатые клавиши соответственно 1-2-3-..., а так как мы вычисляем смещение относительно начального массива button1, то для кнопки с №1 должно быть нулевое смешение, т.е. для кнопки №1 имеем 16*(key_buf-1)=16*0=0, т.е. смещения нет и указатель содержит адрес "батон1".
что-то как-то не очень получилось объяснение :dont_know:
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
Alexeus
Вымогатель припоя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

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

Сообщение Alexeus »

зачем старший нимбл обнулять, в переменной будут только кнопки 0,1,2,3,4,5,6 старший нимбл и так 0х0х будет.
ничего, нормально объяснил. я понял. спс )
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

Alexeus писал(а): мне еще подсказали ...

А кто подсказал, открой секрет :wink:
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
Alexeus
Вымогатель припоя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

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

Сообщение Alexeus »

см. ЛС.
Mikhail
Родился
Сообщения: 9
Зарегистрирован: Пт май 04, 2007 22:32:16
Откуда: Великий Новгород
Контактная информация:

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

Сообщение Mikhail »

Есть у кого-нибудь исходник для датчика ds18b20? А то у меня никак не получается.
lex-108
Родился
Сообщения: 18
Зарегистрирован: Пн апр 12, 2010 09:18:02

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

Сообщение lex-108 »

а у меня такой вопрос: что должно поменяться в коде если используется числа с фиксированной запятой?
.include "tn2313def.inc"

;инициализация USART
; Set baud rate
ldi r17,0 ;загружаем в регистр r17 ноль
ldi r16,0x33 ;загружаем в регистр r16 число 0b00110011
out UBRRH, r17 ;определяем старший байт скорости по USART
out UBRRL, r16 ;определяем младший байт скорости по USART
; Enable receiver and transmitter
ldi r16, (1<<RXEN)|(1<<TXEN) ;загружаем в r16 число 0b00011000
out UCSRB,r16 ;засылаем его в регистр управления и контроля В.
; Set frame format: 8data, 2stop bit
ldi r16, (1<<USBS)|(3<<UCSZ0) ;загружаем в r16 число 0b00001010
out UCSRC,r16 ;засылаем его в регистр управления и контроля С.


;прием первого числа
USART_Receive_1:
; Wait for data to be received
sbis UCSRA, RXC ;проверяем флаг приема
rjmp USART_Receive_1 ;если не готов, то снова ждем
; Get and return received data from buffer
in r16, UDR ;считываем принятый байт в r16

;прием второго числа
USART_Receive_2:
; Wait for data to be received
sbis UCSRA, RXC
rjmp USART_Receive_2
; Get and return received data from buffer
in r17, UDR ;считываем принятый байт в r17

;итак, получены два числа.
;Первое в r16, второе в r17
;

;перемножаем
MOV R0,R17 ;содержимое r17 посылаем в r0
SUB R17,R17 ;вычитаем из r17 содержимое r17
LDI R27,9 ;загружаем в r27 число 9
RJMP met1 ;переход на met1
met3:
BRCC met2 ;в случае сброшенного флага переноса уходим на met2
ADD R17,R0 ;складываем r17 и r0. Результат помещаетсяв r17.
met2:
LSR R17 ;сдвигаем r17 вправо (логический).
met1:
ROR R16 ;ротация r16 вправо
DEC R27 ;вычитаем из r27 единницу
BRNE met3 ;если результат не равен нулю, то переходим на met3.

;результат перемножения в r16



;отправляем
USART_Transmit:
; Wait for empty transmit buffer
sbis UCSRA,UDRE ;проверяем готовность регистра передачи
rjmp USART_Transmit ;если не готов, то опять ждем
; Put data (r16) into buffer, sends the data
out UDR,r16 ;засылаем содержимое r16 в регистр передачи USART

;
;ALLES IN ORDNUNG!!!
;
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20091
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

Mikhail писал(а):Есть у кого-нибудь исходник для датчика ds18b20? А то у меня никак не получается.

Что именно не получается?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
lex-108
Родился
Сообщения: 18
Зарегистрирован: Пн апр 12, 2010 09:18:02

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

Сообщение lex-108 »

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

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

Сообщение GP1 »

На АСМе числа не описываются, нужно просто определиться с разрядностью и забронировать необходимое количество регистров/ЯП.
Чем дальше, тем больше становлюсь занудой...
Изображение
Mikhail
Родился
Сообщения: 9
Зарегистрирован: Пт май 04, 2007 22:32:16
Откуда: Великий Новгород
Контактная информация:

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

Сообщение Mikhail »

Gudd-Head писал(а):
Mikhail писал(а):Есть у кого-нибудь исходник для датчика ds18b20? А то у меня никак не получается.

Что именно не получается?

Я использовал этот кусок кода для датчика. И при симуляции в протеусе выдает ошибку (мк давит землю а датчик держит высокий уровень. Или наоборот.), и считывает все единицы.
Вложения
DS18B20.txt
(4.52 КБ) 301 скачивание
Ответить

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