Ассемблер (ASM) для AVR в вопросах и ответах
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Проверял. Правда ещё на 90S4414.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Gudd-Head писал(а):У кого-нибудь есть практический опыт обращения к памяти данных с немного некорректным указателем?
Т.е. например, у 8-й меги 4к машинных слов (0000h-0FFFh) и 8 кбайт памяти соответственно (0000h-1FFFh).
Если загрузить в указатель Z FFFFh, команда LPM Z достанет байт из адреса 1FFFh, или результат будет непредсказуем?
Гы..... А кудыть такое нужно.....
Помому уж лучше постараться избегать такой ситуации, чего бы там оно не возвращало.....
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: Ассемблер (ASM) для AVR в вопросах и ответах
... может Gudd-Head вспомнил про "теневые адреса" при работе с внешним ПЗУ (такая вещь например использовалась в АОНах на Z80), только каким боком здесь AVR ?...А кудыть такое нужно...
-
culibin 100
- Встал на лапы
- Сообщения: 88
- Зарегистрирован: Ср апр 29, 2009 10:35:56
- Откуда: кр. лиман украина
Re: Ассемблер (ASM) для AVR в вопросах и ответах
уважаемые коллеги стала необходимость поделить 3-х байтное число на такое же 3-х байтное число . значения чисел будут меняться но величина их так и будет оставаться в три байте .алгоритм функции деления трех байтного на однобайтное уже работает методом замены деления -вычитанием .а с трехбайтным делителем ума не приложу.помогите добрым кодом ))
буду благодарен за любую помощь
буду благодарен за любую помощь

- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
деление 3 байт на 2 байта. покумекай, может доделаешь до 3 байт и выложишь сюда. буду признателен. подключаемый фаил для АВРстудии на ассемблере.. кому если надо, есть деления до "4 байт на 2 байта".
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Заменяй умножением на два и вычитанием.
A/B = C
Сначала умножаем B на два пока B<A и запоминаем сколько раз это сделали(N) затем вычитаем из А число B и заносим в С "1" в младший разряд (установить С = 1 и сдвинуть число С на один разряд влево). Сдвигаем число B вправо и N = N - 1.
Если A>B - вычитаем из A число B и заносим в С "1" в младший разряд иначе заносим "0" и сдвинуть число С на один разряд влево.
И так N раз.
Как-то вот так. Вспоминаем арифметику 3-го класса, когда делили в столбик - этот алгоритм получается тот же самый.
A/B = C
Сначала умножаем B на два пока B<A и запоминаем сколько раз это сделали(N) затем вычитаем из А число B и заносим в С "1" в младший разряд (установить С = 1 и сдвинуть число С на один разряд влево). Сдвигаем число B вправо и N = N - 1.
Если A>B - вычитаем из A число B и заносим в С "1" в младший разряд иначе заносим "0" и сдвинуть число С на один разряд влево.
И так N раз.
Как-то вот так. Вспоминаем арифметику 3-го класса, когда делили в столбик - этот алгоритм получается тот же самый.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
shads писал(а):Гы..... А кудыть такое нужно..........
Хочу сэкономить время и место при обращении к памяти данных, расположенной в конце флэша.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- gauss
- Держит паяльник хвостом
- Сообщения: 920
- Зарегистрирован: Сб янв 16, 2010 15:34:57
- Откуда: Sevsk/Moscow
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Решил написать вот такую вот программку для управления динамиком:
Вроде все правильно, а кнопки не регулируют частоту. Не мог бы кто-нибудь указать, почему?
Спойлер
Код: Выделить всё
.def temp=R16
.def tembr=R17
.def tembr2=R18
.cseg
rjmp RESET ; Reset Handler
rjmp EXT_INT0 ; IRQ0 Handler
rjmp EXT_INT1 ; IRQ1 Handler
rjmp TIM2_COMP ; Timer2 Compare Handler
rjmp TIM2_OVF ; Timer2 Overflow Handler
rjmp TIM1_CAPT ; Timer1 Capture Handler
rjmp TIM1_COMPA ; Timer1 CompareA Handler
rjmp TIM1_COMPB ; Timer1 CompareB Handler
rjmp TIM1_OVF ; Timer1 Overflow Handler
rjmp TIM0_OVF ; Timer0 Overflow Handler
rjmp SPI_STC ; SPI Transfer Complete Handler
rjmp USART_RXC ; USART RX Complete Handler
rjmp USART_UDRE ; UDR Empty Handler
rjmp USART_TXC ; USART TX Complete Handler
rjmp ADCC ; ADC Conversion Complete Handler
rjmp EE_RDY ; EEPROM Ready Handler
rjmp ANA_COMP ; Analog Comparator Handler
rjmp TWSI ; Two-wire Serial Interface
rjmp SPM_RDY
;RESET:
EXT_INT0:
EXT_INT1:
TIM2_COMP:
TIM2_OVF:
TIM1_CAPT:
;TIM1_COMPA:
;TIM1_COMPB:
TIM1_OVF:
TIM0_OVF:
SPI_STC:
USART_RXC:
USART_UDRE:
USART_TXC:
ADCC:
EE_RDY:
ANA_COMP:
TWSI:
SPM_RDY:
reti
Reset:
ldi temp,0b00010000
out DDRC,temp
ldi temp,0b00010000
out TIMSK,temp
ldi temp,0b00000001
out TCCR1B,temp
ldi tembr,0x08
out OCR1AH,temp
ldi temp,1
out OCR1AL,temp
ldi tembr2,0x16
out OCR1BH,temp
ldi temp,1
out OCR1BL,temp
ldi temp,0
out TCNT1H,temp
out TCNT1L,temp
sei
rjmp Loop
TIM1_CompA:
ldi temp,0b00010000
out PortC,temp
ldi temp,0b00001000
out TIMSK,temp
reti
TIM1_CompB:
ldi temp,0
out TCNT1H,temp
out TCNT1L,temp
out PortC,temp
ldi temp,0b00010000
out TIMSK,temp
reti
Loop:
SBIS PINC,1
rjmp left
SBIS PINC,0
rjmp right
rjmp Loop
left:
dec tembr
ldi tembr2,0
add tembr2,tembr
add tembr2,tembr
out OCR1AH,tembr
out OCR1BH,tembr2
rjmp Loop
right:
inc tembr
ldi tembr2,0
add tembr2,tembr
add tembr2,tembr
out OCR1AH,tembr
out OCR1BH,tembr2
rjmp LoopВроде все правильно, а кнопки не регулируют частоту. Не мог бы кто-нибудь указать, почему?
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Какая-то каша у тебя, не удивительно что в коде очень сложно увидеть ошибки. Это же гениальное решение! Обработчики прерываний находятся где-то в середине программы...
Мда...
Разделите хотябы всю программу на отдельные логические блоки, возможно даже с использованием подпрограмм.
И пожалуй, разрабатывать программы когда в этом нет опыта лучше всего с составления блок-схем на бумаге.
Да, и прежде чем менять регистры сравнения таймера вне прерываний неплохо было бы его остановить для начала? Или как минимум гарантировать что прерывание не возникнет пока будешь менять значение. Может ведь случится так что изменение одного байта приведет к возникновению прерывания по сравнению, тогда как установка всего значения еще не закончена...
Мда...
Разделите хотябы всю программу на отдельные логические блоки, возможно даже с использованием подпрограмм.
И пожалуй, разрабатывать программы когда в этом нет опыта лучше всего с составления блок-схем на бумаге.
Да, и прежде чем менять регистры сравнения таймера вне прерываний неплохо было бы его остановить для начала? Или как минимум гарантировать что прерывание не возникнет пока будешь менять значение. Может ведь случится так что изменение одного байта приведет к возникновению прерывания по сравнению, тогда как установка всего значения еще не закончена...
- gauss
- Держит паяльник хвостом
- Сообщения: 920
- Зарегистрирован: Сб янв 16, 2010 15:34:57
- Откуда: Sevsk/Moscow
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Останавливаю таймер. Значение увеличивается только на одно, после отпускания кнопки не сохраняется
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Камень какой?
Установить стек
Выполнить все действия по установке портов, таймера и подготовить необходимые разрешения прерываний таймера. Сбросить все флаги требований прерываний
Запустить таймер
Глобально разрешить прерывания
Установить стек
Выполнить все действия по установке портов, таймера и подготовить необходимые разрешения прерываний таймера. Сбросить все флаги требований прерываний
Запустить таймер
Глобально разрешить прерывания
- Coldheart
- Прорезались зубы
- Сообщения: 244
- Зарегистрирован: Пт сен 10, 2010 20:39:32
- Откуда: Украина Луганская обл.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добрый день !
Продолжаю мучения со счетчиком витков.
Добился, чтобы он у меня считал витки только при нажатии на кнопку.(по восходящему фронту) УРА!
Теперь сделел чтобы он при нажатии PinD,5 он считал в обратную сторону, и загоралась точка на первом разряде УРА!
Хочу теперь чтобы он переключался на счет, обрантую сторону также по восходящему фронту.
И все это без прерываний.
Отстрелить не могу как это осуществить в данном случае. Время убиваю в невероятных поличествах.
а толку нет ( Помогите плиз.. Задолбался уже (
Всю документацию прилагаю.

Продолжаю мучения со счетчиком витков.
Добился, чтобы он у меня считал витки только при нажатии на кнопку.(по восходящему фронту) УРА!
Теперь сделел чтобы он при нажатии PinD,5 он считал в обратную сторону, и загоралась точка на первом разряде УРА!
Хочу теперь чтобы он переключался на счет, обрантую сторону также по восходящему фронту.
И все это без прерываний.
Отстрелить не могу как это осуществить в данном случае. Время убиваю в невероятных поличествах.
а толку нет ( Помогите плиз.. Задолбался уже (
Всю документацию прилагаю.
Спойлер
Код: Выделить всё
.include "tn2313def.inc"
.dseg
.cseg
ldi R16,low(RamEnd) ;установка указателя стека
out SPL,R16
ldi R16,0b11111111 ;настройка портов B
out DDRB,R16
ldi R16,0b00011111 ;настройка портов D
out DDRD,R16
clr r23
clr r24
clr r25
clr r26
Start:
in r16,PinD ; пересылаем r16
sbic PinD,4 ; бит 4
rcall CycleINC
Indic:
ldi R17,0b00000111
out PortD,R17
mov R22,r23
rcall Decoder
sbic PinD,5
sbr r17,0b10000000
out PortB,R17
rcall Delay1
ldi R17,0b00001011
out PortD,R17
mov R22,r24
rcall Decoder
out PortB,R17
rcall Delay1
ldi R17,0b00001101
out PortD,R17
mov R22,r25
rcall Decoder
out PortB,R17
rcall Delay1
ldi R17,0b00001110
out PortD,R17
mov R22,r26
rcall Decoder
out PortB,R17
rcall Delay1
in r3,PinD ; пересылаем порт в r3
and r3,r16 ; проверяем, изменился ли 4-й бит
sbrc r3,4 ; бит 4 в r3 очищен?
rjmp Indic ; нет => Индикация
rjmp Start ; да => Старт
CycleINC:
sbic PinD,5
rjmp CycleDEC
inc r23
cpi r23,10
breq M
ret
M:
clr r23
inc r24
cpi r24,10
breq F
ret
F:
clr r24
inc r25
cpi r25,10
breq W
ret
W:
clr r25
inc r26
cpi r26,10
breq T
ret
T:
clr r26
ret
CycleDEC:
dec r23
cpi r23,255
breq M1
ret
M1:
ldi r23,9
dec r24
cpi r24,255
breq F1
ret
F1:
ldi r24,9
dec r25
cpi r25,255
breq W1
ret
W1:
ldi r25,9
dec r26
cpi r26,255
breq T1
rjmp Indic
T1:
ldi r26,9
rjmp Indic
Decoder:
ldi ZL,Low(DcMatrix*2) ;инициализация массива
ldi ZH,High(DcMatrix*2)
ldi R18,0 ;прибавление переменной
add ZL,R22 ;к 0-му адресу массива
adc ZH,R18
lpm ;загрузка значения
mov R17,r0
ret
DcMatrix:
;массив - таблица истинности декодера
; hgfedcba hgfedcba
.db 0b00111111,0b00000110 ;0,1
.db 0b01011011,0b01001111 ;2,3
.db 0b01100110,0b01101101 ;4,5
.db 0b01111101,0b00000111 ;6,7
.db 0b01111111,0b01101111 ;8,9
Delay1:
ldi R20,20
ldi R21,11
d11:
dec R20
brne d11
dec R21
brne d11
ret

- Вложения
-
- Proteus.rar
- (27.38 КБ) 125 скачиваний
Последний раз редактировалось Coldheart Ср окт 24, 2012 11:18:59, всего редактировалось 1 раз.
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
начнем с того, что если ты делаешь счетчик витков, а не стенд для изучения аврок, то без прерываний тебе не обойтись, в противном случае пропуски в подсчете неизбежны
-
culibin 100
- Встал на лапы
- Сообщения: 88
- Зарегистрирован: Ср апр 29, 2009 10:35:56
- Откуда: кр. лиман украина
Re: Ассемблер (ASM) для AVR в вопросах и ответах
замути по прерываниям это самый надежный способ.и используй оптокодер там пропуски исключены ))
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
дело не в оптокодер, а в методе индикации... 
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Coldheart писал(а):...Продолжаю мучения со счетчиком витков.
У Вас лапа PD4 настроена выходом 0, PD3 выходом 1. Протеусу этот факт "до лампочки", а вот контроллеру нет. Индикация будет с паразитным подсветом. Попробуйте так
Код: Выделить всё
LDI R16,0b00001111 ;настройка портов D
; ldi R16,0b00011111 ;настройка портов D
out DDRD,R16
Последний раз редактировалось akl Ср окт 24, 2012 13:56:33, всего редактировалось 2 раза.
-
culibin 100
- Встал на лапы
- Сообщения: 88
- Зарегистрирован: Ср апр 29, 2009 10:35:56
- Откуда: кр. лиман украина
Re: Ассемблер (ASM) для AVR в вопросах и ответах
какая у вас проблема с индикацией?
- Coldheart
- Прорезались зубы
- Сообщения: 244
- Зарегистрирован: Пт сен 10, 2010 20:39:32
- Откуда: Украина Луганская обл.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
akl писал(а):У Вас лапа PD4 настроена выходом 0, PD3 выходом 1.
Попробуйте так.....
ОК! Просмотрел! Спасибо!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Люди добрые подскажите, кто сможет связать таких зверей :
ATMEGA8 +AD9835+ валкодер + 4разряда динамической индикации = простой синтезатор частоты
Естественно не бесплатно.
Просто не знаю к кому обратиться.
(сам глушняк - дальше бегущих огней не пошел....)
С уважением Юрий
www.y-u-r.ru
ATMEGA8 +AD9835+ валкодер + 4разряда динамической индикации = простой синтезатор частоты
Естественно не бесплатно.
Просто не знаю к кому обратиться.
(сам глушняк - дальше бегущих огней не пошел....)
С уважением Юрий
www.y-u-r.ru
-
culibin 100
- Встал на лапы
- Сообщения: 88
- Зарегистрирован: Ср апр 29, 2009 10:35:56
- Откуда: кр. лиман украина
Re: Ассемблер (ASM) для AVR в вопросах и ответах
сейчас такую зверюгу ковыряю.а в чем проблема спаять или программа?
