Страница 38 из 400

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

Добавлено: Пт апр 16, 2010 21:44:12
GP1
Только не забудь - что каждый массив должен иметь 16 чисел, просто последним в массиве делаешь 0. :beer:

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
если нужно снять напряжение с ножек порта, то:

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

ldi R16,0
out PortB,R16
ну вот в кратце... это на выход.

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

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

 PORTB.6 = 1
зачем тебе ща внешний кварц. мега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 - применить можно, это точно :))), только сначала надо старший нимбл обнулить,

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

     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:

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 писал(а): мне еще подсказали ...
А кто подсказал, открой секрет :wink:

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? А то у меня никак не получается.
Что именно не получается?
Я использовал этот кусок кода для датчика. И при симуляции в протеусе выдает ошибку (мк давит землю а датчик держит высокий уровень. Или наоборот.), и считывает все единицы.