Камень?GP1 писал(а):Дано:
Студия 4.18 SP2 b.700
Ассемблер (ASM) для AVR в вопросах и ответах
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Реклама
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Какова модель МК?
Код для ATtiny26L:
Код для ATtiny26L:
Код: Выделить всё
ldi temp4, 15 ;При частоте кварца 8Мгц, прерывание по переполнению
out TCCR1B, temp4 ;таймера Т1 происходит раз в ~0,5 секунд. (8/16384)
ldi temp4, (1<<PLOCK)
out PLLCSR, temp4
ldi temp4, (1<<TOIE1) ;Включаем прерывание по переполнению.
out TIMSK, temp4
I am DX168B and this is my favourite forum on internet!
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Сорри, склероз.
мк - tiny24
мк - tiny24
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Не знаю, у меня всё работает (Студия 4.18 b.700). Ищите косяк в тексте проги.GP1 писал(а):мк - tiny24

[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Дело не в проге, переустановил студию и все заработало, что за глюк так и не понял 
по поводу "и все заработало" - погорячился,
перестало генерироваться прерывание PCI, хотя точно знаю до этого работало и в симе и в железе
это просто полный ппц,
, "кто виноват? и что делать?"

по поводу "и все заработало" - погорячился,
это просто полный ппц,
- Вложения
-
- t24.JPG
- а не работает
- (156.29 КБ) 313 скачиваний
- Реклама
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Кто-нибудь может мне на пальцах разъяснить, как они втиснули в 25 слов преобразование 16-битного двоичного слова в пять двоично-десятичных (три байта)? Код смотрел, прогонял в симуляторе. Работает, но вот КАК
понять до сих пор не могу.
Код: Выделить всё
;***************************************************************************
;* "bin2BCD16" - 16-bit Binary to BCD conversion
;*
;* This subroutine converts a 16-bit number (fbinH:fbinL) to a 5-digit
;* packed BCD number represented by 3 bytes (tBCD2:tBCD1:tBCD0).
;* MSD of the 5-digit number is placed in the lowermost nibble of tBCD2.
;*
;* Number of words :25
;* Number of cycles :751/768 (Min/Max)
;* Low registers used :3 (tBCD0,tBCD1,tBCD2)
;* High registers used :4(fbinL,fbinH,cnt16a,tmp16a)
;* Pointers used :Z
;***************************************************************************
;***** Subroutine Register Variables
.equ AtBCD0 =13 ;address of tBCD0
.equ AtBCD2 =15 ;address of tBCD1
.def tBCD0 =r13 ;BCD value digits 1 and 0
.def tBCD1 =r14 ;BCD value digits 3 and 2
.def tBCD2 =r15 ;BCD value digit 4
.def fbinL =r16 ;binary value Low byte
.def fbinH =r17 ;binary value High byte
.def cnt16a =r18 ;loop counter
.def tmp16a =r19 ;temporary value
;***** Code
bin2BCD16:
ldi cnt16a,16 ;Init loop counter
clr tBCD2 ;clear result (3 bytes)
clr tBCD1
clr tBCD0
clr ZH ;clear ZH
bBCDx_1:lsl fbinL ;shift input value
rol fbinH ;through all bytes
rol tBCD0 ;
rol tBCD1
rol tBCD2
dec cnt16a ;decrement loop counter
brne bBCDx_2 ;if counter not zero
ret ; return
bBCDx_2:ldi r30,AtBCD2+1 ;Z points to result MSB + 1
bBCDx_3:
ld tmp16a,-Z ;get (Z) with pre-decrement
subi tmp16a,-$03 ;add 0x03
sbrc tmp16a,3 ;if bit 3 not clear
st Z,tmp16a ; store back
ld tmp16a,Z ;get (Z)
subi tmp16a,-$30 ;add 0x30
sbrc tmp16a,7 ;if bit 7 not clear
st Z,tmp16a ; store back
cpi ZL,AtBCD0 ;done all three?
brne bBCDx_3 ;loop again if not
rjmp bBCDx_1 [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
к нему идет pdf-ка, там есть описание алгоритма.
- Pooher
- Мучитель микросхем
- Сообщения: 491
- Зарегистрирован: Вс янв 07, 2007 01:45:48
- Откуда: Российская Федерация, будь она неладна...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Не моё, с какого-то форума:
;1.Сдвигать в лево
;2.Прибавлять 3 к каждой BCD тетраде которая >=5
;Повторять столько раз сколько бит в числе
;в последнем цикле прибавлять 3 не нужно !!!
;Пример 8 бит число: $F9 в BCD
результат исходное
;0000 0000 0000 : 1111 1001
;0000 0000 0001 : 1111 0010 (сдвиг в лево)
;0000 0000 0011 : 1110 0100 (сдвиг в лево)
;0000 0000 0111 : 1100 1000 (сдвиг в лево)
;0000 0000 1010 : 1100 1000 (add 3)
;0000 0001 0101 : 1001 0000 (сдвиг в лево)
;0000 0001 1000 : 1001 0000 (add 3)
;0000 0011 0001 : 0010 0000 (сдвиг в лево
;0000 0110 0010 : 0100 0000 (сдвиг в лево)
;0000 1001 0010 : 0100 0000 (add 3)
;0001 0010 0100 : 1000 0000 (сдвиг в лево)
;0010 0100 1001 : 0000 0000 (сдвиг в лево)
;В результате получим BCD 249.
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Хитро... А почему именно 3 прибавляется и именно где >=5?
Сдвиг влево равносилен умножению на 2... Это, типа, перенос старшего разряда?
Сдвиг влево равносилен умножению на 2... Это, типа, перенос старшего разряда?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
-
SII
- Вымогатель припоя
- Сообщения: 635
- Зарегистрирован: Пт янв 30, 2009 14:50:35
- Откуда: Солнечногорск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Как в привычной нам десятичной системе быстро умножить на 10 число, например, 123? Просто дописать справа нуль: 1230. То же самое и в двоичной, только там умножение будет не на 10, а на 2 (на то она и двоичная): 111 (7) => 1110 (14).Gudd-Head писал(а):Сдвиг влево равносилен умножению на 2... Это, типа, перенос старшего разряда?
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Нолик приписать равнозначно умножению на два это понятно, а почему прибавлять именно 3?..SII писал(а):там умножение будет не на 10, а на 2 (на то она и двоичная): 111 (7) => 1110 (14).
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
-
SII
- Вымогатель припоя
- Сообщения: 635
- Зарегистрирован: Пт янв 30, 2009 14:50:35
- Откуда: Солнечногорск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Тонкости оптимизации
Вообще при десятичной коррекции двоичных операций используется константа 6 (в BCD каждая десятичная цифра занимает одну тетраду, однако используется лишь 10 из возможных 16 значений, разница и прибавляется), ну а здесь, возможно, комбинируется прибавление 3 и сдвиг влево, т.е. умножение на 2. Ну а детально разбираться в такую жару... нет уж, увольте 
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Конечно, большого смысла разбираться "почему именно так" нет. Но всё равно, спасибо за предположенияSII писал(а):здесь, возможно, комбинируется прибавление 3 и сдвиг влево, т.е. умножение на 2. Ну а детально разбираться в такую жару... нет уж, увольте
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Ассемблер (ASM) для AVR в вопросах и ответах
у меня в .dseg хранятся два байта которые мне необходимо выводить на индикатор и причём смещение хочеться задавать с помощью регистра, и вот при использовании регистра у меня вылазит в аврстудии ошибка: "error: syntax error, unexpected REGDEF" вот код
как можно выйти из данной ситуации?
Код: Выделить всё
.def minL = R18
.dseg
num: .byte 2 ; эти байты потом загруженны
.cseg
lds temp, num+minL; и вот из-за этой строчки ошибка
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
ваша ошибка в том, что вы не изучили систему команд достаточно скрупулезно: невозможно обращаться к памяти так, как вы пытаетесь! для обращения "со смещением" - косвенная относительная адресация - надо использовать команды LD R, X; LD R, X+; LD R,+X или аналоги для регистров Y и Z, причем для последних как раз имеется случай, возможно, удобный для вас: LD R, Y + offs (правда, константа offs не может превышать 63).
надеюсь, вы разберетесь, как решать вашу проблему
надеюсь, вы разберетесь, как решать вашу проблему
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
По всей видимости, имелось в виду LD R,-XARV писал(а):LD R,+X
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
имелосьGudd-Head писал(а):По всей видимости, имелось в виду LD R,-X
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Это так что ли? http://www.prevedmedved.ru/uploads/post ... 80_000.jpgARV писал(а):когда за окном сплошной плюс, о минусах как-то только мечты...
Ну и чтобы не сочли за оффтоп, спрошу: когда внешнее прерывание сконфигурировано от НИЗКОГО уровня (насколько я понял, только так (помимо TWI) можно пробудить МК из Power Down), флаг прерывания не выставляется при появлении "0", а сразу осуществляется переход по вектору прерывания?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Вот код, который у меня успэшно используется. Читает массив из EEPROM и переносит его в
SRAM (ОЗУ) Такой изврат не работает в Attiny2313, но работает в ATtiny26L
Вот чтение из ПЗУ. Это модуль опроса клавиатуры собранной на микросхеме К155ИД3
либо на К155КП1
SRAM (ОЗУ) Такой изврат не работает в Attiny2313, но работает в ATtiny26L
Код: Выделить всё
;---------------------------------------------- Чтение из EEPROM (Инициализация)
INIT:
ldi ZH, High(memory)
ldi ZL, Low(memory)
ldi count, 0
INIT1:
out EEAR, count
sbi EECR, EERE
in temp0, EEDR
st Z+, temp0
inc count
cpi count, 45
brmi INIT1
sei
retлибо на К155КП1
Код: Выделить всё
;---------------------------------------------- Модуль извлечения нажатой кнопки клавиатуры
KEYREQ:
ldi ZL, Low(ARRKEY*2) ;Определение массива
ldi ZH, High(ARRKEY*2)
ldi count1, 0
KEYLOOP:
cpi count1, 17 ;Счётчик циклов чтения из массива.
brpl KEYEND
lpm temp0, Z
andi temp0, 0x0F
cpi status, 0xFF
brne KEYRQ
ldi temp1, (1<<PA4) ;В случае открытого замка
add temp0, temp1
KEYRQ:
out PortA, temp0
andi temp0, 0x0F
inc count1
inc ZL
sbic PinB, 6
rjmp KEYLP
rcall DELAY0
rjmp KEYLOOP
KEYLP:
rcall DELAY1
sbis PinB, 6
rjmp KEYLOOP
rcall BEEP
KEYLP1:
sbic PinB, 6 ;Ожидание отпускания кнопки и возврат значения нажатой кнопки
rjmp KEYLP1
ret
KEYEND:
ldi temp0, 0xFF ;Возврат значения 0xFF если не нажата ни одна из кнопок
ret
;---------------------------------------------- Массив таблицы истинности К155ИД3 \ К155КП1
ARRKEY:
.db 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0
.db 0,0
I am DX168B and this is my favourite forum on internet!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
спасибо за ответ! буду разбираться...



