Страница 38 из 400
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт апр 16, 2010 21:44:12
GP1
Только не забудь - что каждый массив должен иметь 16 чисел, просто последним в массиве делаешь 0.

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб апр 17, 2010 08:55:30
Modest
Смотрю здесь знающие КОТЫ собрались, пользуясь случаем спрошу: как заставить работать PORTB.6 и PORTB.7 в меге 8.
Если встреваю в тему, сильно не пинайте, потом удалюсь.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб апр 17, 2010 09:40:59
GP1
А в чем проблема-то?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб апр 17, 2010 10:16:43
Modest
Ха. Если бы я знал. На этих ногах должен висеть кварц, как альтернатива. Есть для этих ног фьюзы. Но как бы я их не конфигурировал, не подать, не принять на них ничего немогу. Например пишу PORTB.6 = 1 , на ноге получаю.... ничего неполучаю!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб апр 17, 2010 10:20:25
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
если нужно снять напряжение с ножек порта, то:
ну вот в кратце... это на выход.
а что конкретно нужно?
в ассемблере не пишут в такой форме:
зачем тебе ща внешний кварц. мега8 с внутренним сконфигурирована 1мГц, если фьюзы не трогать, все работает. портБ можешь как хочешь пользовать. Можно обойтись вообще без внешнего кварца. Внутренний настраиваится фьюзами SKSEL3...0 на 1,2,4,8 мГц.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб апр 17, 2010 10:27:48
Modest
Блин я и на ASMе писал. Контроллерами занимаюсь не первый год, хоть слева и написанно что я родился! Проблема здесь не в программе. Проблема или в фъюзах или... на этом мысль обрывается.
а примеры записи пожалуйста
на С
DDRB=0xFF;
PORTB=0xFF;
или
PORTB.6=1;
PORTB.7=1;
а на асме был пример выше
ldi R16,0b00000011
out PortB,R16
Незнаю может с компилятором косяк, хотя на асме писал, та же проблема.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб апр 17, 2010 10:30:45
Alexeus
код в студию... сюда в смысле. а лучше в тему вопросы по CodeVision AVR -он Си использует.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб апр 17, 2010 12:31:32
Modest
Настраиваю весь порт б на выход, подаю в порт FF, горят все ноги кроме последних двух. Всё остальное прекрасно работает. В программе хоть использую переферию хоть нет, без разницы, результат один, последние 2 ноги неработают. Эт не на ед. мега8, а на всех скоко покупал. Разве никто не программил для меги 8 ? Разве токо у меня такие проблемы?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб апр 17, 2010 13:27:27
Alexeus
ну а запусти ДДРБ на выход ("1") в портБ тоже пусти "1" . по идее должны быть все в высоком уровне. и опроси затем пинБ и выведи куда нть- в портС или Д... если все пины будут в "1" значит может поджег внутри портБ.
таймер/счетчик2 у тебя не задействован?
прочти фьюзы, выложи сюда в каком они состоянии.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб апр 17, 2010 15:40:06
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 применить.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб апр 17, 2010 16:11:56
GP1
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".
что-то как-то не очень получилось объяснение

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб апр 17, 2010 17:30:51
Alexeus
зачем старший нимбл обнулять, в переменной будут только кнопки 0,1,2,3,4,5,6 старший нимбл и так 0х0х будет.
ничего, нормально объяснил. я понял. спс )
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб апр 17, 2010 22:51:49
GP1
Alexeus писал(а): мне еще подсказали ...
А кто подсказал, открой секрет

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс апр 18, 2010 00:21:43
Alexeus
см. ЛС.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт апр 22, 2010 23:11:50
Mikhail
Есть у кого-нибудь исходник для датчика ds18b20? А то у меня никак не получается.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт апр 23, 2010 03:54:08
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!!!
;
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт апр 23, 2010 08:39:42
Gudd-Head
Mikhail писал(а):Есть у кого-нибудь исходник для датчика ds18b20? А то у меня никак не получается.
Что именно не получается?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт апр 23, 2010 09:08:00
lex-108
как их задать числа с фиксированной точкой? как они описываются? как и куда вставить?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт апр 23, 2010 09:50:54
GP1
На АСМе числа не описываются, нужно просто определиться с разрядностью и забронировать необходимое количество регистров/ЯП.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт апр 23, 2010 18:17:06
Mikhail
Gudd-Head писал(а):Mikhail писал(а):Есть у кого-нибудь исходник для датчика ds18b20? А то у меня никак не получается.
Что именно не получается?
Я использовал этот кусок кода для датчика. И при симуляции в протеусе выдает ошибку (мк давит землю а датчик держит высокий уровень. Или наоборот.), и считывает все единицы.