Ассемблер (ASM) для AVR в вопросах и ответах
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Только не забудь - что каждый массив должен иметь 16 чисел, просто последним в массиве делаешь 0. 
- Реклама
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Смотрю здесь знающие КОТЫ собрались, пользуясь случаем спрошу: как заставить работать PORTB.6 и PORTB.7 в меге 8.
Если встреваю в тему, сильно не пинайте, потом удалюсь.
Если встреваю в тему, сильно не пинайте, потом удалюсь.
[img]http://i053.radikal.ru/1102/71/0a0346d3a067.gif[/img]
[size=85]Ты думаешь ты думал как ты думаешь? (с)[/size]
[size=85]Ты думаешь ты думал как ты думаешь? (с)[/size]
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А в чем проблема-то?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Ха. Если бы я знал. На этих ногах должен висеть кварц, как альтернатива. Есть для этих ног фьюзы. Но как бы я их не конфигурировал, не подать, не принять на них ничего немогу. Например пишу PORTB.6 = 1 , на ноге получаю.... ничего неполучаю!
[img]http://i053.radikal.ru/1102/71/0a0346d3a067.gif[/img]
[size=85]Ты думаешь ты думал как ты думаешь? (с)[/size]
[size=85]Ты думаешь ты думал как ты думаешь? (с)[/size]
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Кроме состояния выводов порта PORTB=.... нужно еще и определить как будут выводы использоваться: DDRB=... По умолчанию DDRB=0, т.е. все ноги порта на ВХОД. Если выставить сейчас PORTB=1, то это ноги портаБ будут входом с ПОДТЯЖКОЙ, т.е. к ногам будет подключен внутренний резистор, второй стороной на +5вольт.
если нужно снять напряжение с ножек порта, то:
ну вот в кратце... это на выход.
а что конкретно нужно?
в ассемблере не пишут в такой форме:
зачем тебе ща внешний кварц. мега8 с внутренним сконфигурирована 1мГц, если фьюзы не трогать, все работает. портБ можешь как хочешь пользовать. Можно обойтись вообще без внешнего кварца. Внутренний настраиваится фьюзами SKSEL3...0 на 1,2,4,8 мГц.
Код: Выделить всё
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
Последний раз редактировалось Alexeus Сб апр 17, 2010 10:29:28, всего редактировалось 1 раз.
- Реклама
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Блин я и на ASMе писал. Контроллерами занимаюсь не первый год, хоть слева и написанно что я родился! Проблема здесь не в программе. Проблема или в фъюзах или... на этом мысль обрывается.
а примеры записи пожалуйста
на С
DDRB=0xFF;
PORTB=0xFF;
или
PORTB.6=1;
PORTB.7=1;
а на асме был пример выше
ldi R16,0b00000011
out PortB,R16
Незнаю может с компилятором косяк, хотя на асме писал, та же проблема.
а примеры записи пожалуйста
на С
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]
[size=85]Ты думаешь ты думал как ты думаешь? (с)[/size]
Re: Ассемблер (ASM) для AVR в вопросах и ответах
код в студию... сюда в смысле. а лучше в тему вопросы по CodeVision AVR -он Си использует.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Настраиваю весь порт б на выход, подаю в порт FF, горят все ноги кроме последних двух. Всё остальное прекрасно работает. В программе хоть использую переферию хоть нет, без разницы, результат один, последние 2 ноги неработают. Эт не на ед. мега8, а на всех скоко покупал. Разве никто не программил для меги 8 ? Разве токо у меня такие проблемы?
Последний раз редактировалось Modest Пн апр 19, 2010 07:05:37, всего редактировалось 1 раз.
[img]http://i053.radikal.ru/1102/71/0a0346d3a067.gif[/img]
[size=85]Ты думаешь ты думал как ты думаешь? (с)[/size]
[size=85]Ты думаешь ты думал как ты думаешь? (с)[/size]
Re: Ассемблер (ASM) для AVR в вопросах и ответах
ну а запусти ДДРБ на выход ("1") в портБ тоже пусти "1" . по идее должны быть все в высоком уровне. и опроси затем пинБ и выведи куда нть- в портС или Д... если все пины будут в "1" значит может поджег внутри портБ.
таймер/счетчик2 у тебя не задействован?
прочти фьюзы, выложи сюда в каком они состоянии.
таймер/счетчик2 у тебя не задействован?
прочти фьюзы, выложи сюда в каком они состоянии.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
[/quote]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, и получится адрес первого массива. ;дальше цикл
Очень хорошо! все так как нужно! Только пара нюансов:
1. если Key_buf=0 (кнопка не нажата), вычитаем 1, прибавляем к адресу начала первого массива и получаем адрес в памяти, стоящий за 16 байт до начала первого массива. -там может быть какие угодно значения... Ну да это не страшно, если в буфере "0", то я вообще не вызываю цикл обработки.
2. поясни пожалуйста для чего мы вычитаем еденицу от числа в буфере клавиш? все работает на ура, но я не пойму, откуда взялась такая мысль получить номер нажатой кнопки и обязательно вычесть из него еденицу, что бы потом расчитать смещение
3. мне еще подсказали что вместо 4 lsl можно один swap применить.
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
1. swap - применить можно, это точно
, только сначала надо старший нимбл обнулить,
просто когда мне нужно умножить на х2, х4, х8, х16 я пишу lsl -привычка
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".
что-то как-то не очень получилось объяснение
Код: Выделить всё
andi key_buf,0x0F
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".
что-то как-то не очень получилось объяснение
Re: Ассемблер (ASM) для AVR в вопросах и ответах
зачем старший нимбл обнулять, в переменной будут только кнопки 0,1,2,3,4,5,6 старший нимбл и так 0х0х будет.
ничего, нормально объяснил. я понял. спс )
ничего, нормально объяснил. я понял. спс )
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А кто подсказал, открой секретAlexeus писал(а): мне еще подсказали ...
-
Mikhail
- Родился
- Сообщения: 9
- Зарегистрирован: Пт май 04, 2007 22:32:16
- Откуда: Великий Новгород
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Есть у кого-нибудь исходник для датчика ds18b20? А то у меня никак не получается.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
а у меня такой вопрос: что должно поменяться в коде если используется числа с фиксированной запятой?
.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!!!
;
.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
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Что именно не получается?Mikhail писал(а):Есть у кого-нибудь исходник для датчика ds18b20? А то у меня никак не получается.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Ассемблер (ASM) для AVR в вопросах и ответах
как их задать числа с фиксированной точкой? как они описываются? как и куда вставить?
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
На АСМе числа не описываются, нужно просто определиться с разрядностью и забронировать необходимое количество регистров/ЯП.
-
Mikhail
- Родился
- Сообщения: 9
- Зарегистрирован: Пт май 04, 2007 22:32:16
- Откуда: Великий Новгород
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Я использовал этот кусок кода для датчика. И при симуляции в протеусе выдает ошибку (мк давит землю а датчик держит высокий уровень. Или наоборот.), и считывает все единицы.Gudd-Head писал(а):Что именно не получается?Mikhail писал(а):Есть у кого-нибудь исходник для датчика ds18b20? А то у меня никак не получается.
- Вложения
-
- DS18B20.txt
- (4.52 КБ) 302 скачивания



