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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

teist писал(а):Подскажите плиз начинающему как выйти из прерывания
в нужное место кода по условию , т.е. условие выполнено
выходим на определенное место, не выполнено возвращаемся
из прерывания как обычно...
возможно ли такое вообще?

Очень просто: внутри прерывания извлекаете два значения из стека (там адрес возврата), и делаете переход в нужное место, не забыв включить прерывание. Например:

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

-- условие сработало, попали сюда
pop r17
pop r17
sei
rjmp метка

Или переместить указатель стека ан слово вверх, но это не даст выигрыша ни по скорости, ни по памяти
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Вероятно это неправильное проектирование программы, если из прерывания надо переходить в другое место... а если часть алгоритма, который мы прервали не закончил свою работу? То что ты хочешь сделать - это переход внутри прерывания, а выход из прерывания может быть осуществлен только в точку в которой это прерывание возникло, либо на вектор сброса. Остальные варианты чреваты непредсказуемыми последствиями... даже когда кажется что этих последствий просто не может быть.
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

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

Сообщение ILYAUL »

Но даст возможность, по окончании программы по условию , вытолкнуть стек и продолжить прерванную прерыванием программу с того же места , восстановив все регистры.
Аватара пользователя
xkp
Опытный кот
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров
Контактная информация:

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

Сообщение xkp »

Alexeyslav писал(а): Остальные варианты чреваты непредсказуемыми последствиями... даже когда кажется что этих последствий просто не может быть.

и получится ядерная бомба.

что касаемо моего вопроса. то я не могу инициализировать таймер с компаратором. или что то не то инициализировать пытаюсь. щас кода нет под рукой. завтра покажу.
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

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

Сообщение ILYAUL »

Alexeyslav писал(а):Вероятно это неправильное проектирование программы, .

Нет , это обычная многозадачность , когда на одном процессоре и на одной области памяти программ процессор выполняет совершенно разные задачи одновременно.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

Вероятно это неправильное проектирование программы, если из прерывания надо переходить в другое место...

В 97% случаев - да. Тем более, если такой вопрос задаётся в этой теме.
Но есть и 3% случаев, когда программист чётко знает, что делает, и выиграет от этого драгоценные такты или байты.

Нет , это обычная многозадачность

Обычно она реализуется стандартными приёмами.
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

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

Сообщение ILYAUL »

Ну о вкусах не будем спорить , покрайней мере в этой теме. Но я согласен с Вами в одном , если такой подход применяется , то надо чётко представлять почему и зачем и главное как делать правильно
Аватара пользователя
xkp
Опытный кот
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров
Контактная информация:

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

Сообщение xkp »

я многозадачность делал иначе... щас уже точно не помню...
но было так: 16-битный счетчик завязанный на таймере-счетчике. десять (!) задач. хотя и задачи были простые, каждая мигала своим светодиодом с определенной частотой, но память бедного TINY26 была забита на 98.6%
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

У таймера есть режим счета до сравнения и сброс по сравнению, заодно он может АППАРАТНО при этом событии инвертировать значение пина, к которому он подключен - получается сразу генератор на выходе, причем одному таймеру принадлежат сразу два вывода работу которых можно контролировать устанавливая соответствующй режим таймера - к нему может быть задействован либо один вывод, либо два и тогда на втором выводе сигнал будет в противофазе. Поэтому пишут что в контроллере 4 выхода ШИМ при 2-х таймерах в наличии...

Да, пожалуй раздел даташита посвященный режимам работы таймера довольно запутан, но там вроде бы как по картинкам все ясно...
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Alexeyslav писал(а):но там вроде бы как по картинкам все ясно...

Вот именно! Достаточно взглянуть на эту картинку чтобы понять: это то, что надо!
Изображение
xkp, вот формула из ДШ для генерируемой частоты:
Изображение
OCRnx от 0 до 255 для 8-ми битного таймера и до 65535 для 16-ти битного таймера.
Можно нарисовать таблицу (например, в Экселе) всех возможных частот в зависимости от значений OCRnx и N, и оценить точность генерируемых частот.
Вложения
Безымянный2.GIF
(4.51 КБ) 627 скачиваний
Безымянный.GIF
(10.89 КБ) 742 скачивания
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
xkp
Опытный кот
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров
Контактная информация:

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

Сообщение xkp »

именно этот режим и не получается запустить

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

.INCLUDE "tn13DEF.INC"
.list
.def tmp=r16
.def tmp0=r17
.def cnt=r19
.DSEG

.cseg
.org $0a
RESET:
   ldi tmp,low(RAMEND)
   out spl,tmp
.macro   OUTI
   LDI   R16,@1
   OUT   @0,R16
.endm
   OUTI   tccr0a,(1<<com0a1)|(0<<COM0A0)|(0<<com0b1)|(0<<COM0b0)|(1<<wgm01)|(0<<wgm00)

   ldi tmp,low(RAMEND)
   out spl,tmp

   ldi tmp,$01   ;преддилитель 64
   out tccr0b,tmp
   ldi tmp,0b00000111
   out ddrb,tmp
   ldi tmp,0
   out portb,tmp
   sei
main:
   ldi tmp,$c0
   out ocr0a,tmp
;   ldi tmp,$10
;   out ocr0b,tmp
main_2:
   rjmp main_2
;      Address Labels Code Comments
.org $00
   rjmp RESET ; Reset Handler
      reti   ;rjmp EXT_INT0 ; IRQ0 Handler
      reti   ;rjmp PCINT0 ; PCINT0 Handler
      reti   ;rjmp TIM0_OVF ; Timer0 Overflow Handler
      reti   ;rjmp EE_RDY ; EEPROM Ready Handler
      reti   ;rjmp ANA_COMP ; Analog Comparator Handler
      reti   ;rjmp TIM0_COMPA ; Timer0 CompareA Handler
      reti   ;rjmp TIM0_COMPB ; Timer0 CompareB Handler
      reti   ;rjmp WATCHDOG ; Watchdog Interrupt Handler
      reti   ;rjmp ADC_inc ; ADC Conversion Handler
.exit
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

что, нет реакции на выводе OC0A?
так он у тебя постоянно в 0 сбрасывается

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

OUTI   tccr0a,(1<<com0a1)|(0<<COM0A0)|(0<<com0b1)|(0<<COM0b0)|(1<<wgm01)|(0<<wgm00) 
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
xkp
Опытный кот
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров
Контактная информация:

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

Сообщение xkp »

кто что сбрасывает? подробнее пожалуйста. эти битики регистра установил согласно даташиту
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

комбинация :

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

OUTI   tccr0a,(1<<com0a1)|(0<<COM0A0).... 

всегда, т.е. при совпадении OCR0A и TCNT0 переводит вывод OC0A в 0, чтобы значение на выводе менялось каждый раз на противоположенное надо установить COM0A1:COM0A0 = 01, в посте выше,где приведены диаграммы, обрати внимание на надпись Toggle
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
xkp
Опытный кот
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров
Контактная информация:

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

Сообщение xkp »

вот и заработало!!! :) начинаются эксперименты по разгону максимальной частоты tiny85

PS хм.. тини13 отлично справляеться с моими поставленными задачами на своей частоте 9.6 мГц. точность не сильно большая но мне хватит, наверное...

следующим вопросом станет время, точнее, как можно точнее измерить ширину импульса. можно даже и не в секундах или миллисекундах, а в условных еденицах.
железо: ОУ MCP6022, МК TINY85. ОУ нужен для предварительной обработки сигнала, выдает на МК импульсы лог 1, которые и нужно мерить. из даташита на ОУ он может работать на частоте до 10 мГц. тинька будет на кварце 20 мГц, может и больше, если разгонится. хочу ловить импульсы по переднему фронту, но прерывания по переднему фронту на int0 уже задействованы. какие будут предложения?
может просто ждать появления лог 1?
например:

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

metka:
   sbis pinb,0
   rjmp metka
;тут мерием время в УЕ
   clr tmp
   clr tmp0
metka2:
   inc tmp
   cpi tmp,$ff
   brlo metka3
   inc tmp0
metka3:
   sbic pinb,0
   rjmp metka2
; получили време в tmp0,tmp в УЕ
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

Посмотрите в сторону режима захвата. Не знаю есть ли он в Вашем МК, но думаю, что есть.
Аватара пользователя
xkp
Опытный кот
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров
Контактная информация:

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

Сообщение xkp »

режим захвата? не слышал. кстати, освободил int0. теперь можно и по нему. но все же, что за режим захвата?
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

Не знаю, есть ли подобное в Атмелах, не силён в них, но в ПИКах есть. Это нечто обратное ШИМу. Т.е. по одному фронту модуль обнуляет таймер и запускает его, а по другому фронту - останавливает. В итоге, имеем событие от модуля и период в тактах таймера, находящийся в регистре таймера.
Аватара пользователя
xkp
Опытный кот
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров
Контактная информация:

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

Сообщение xkp »

это у нас называется прерывания по переднему и заднему фронтам входа INT0. хотя... наверное это не совсем то... но идея хорошая. подумаю над этим.
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

Нет, прерывания по INT - это совсем другое.
Режим захвата имеет тот-же модуль, что и режим ШИМа. Т.е. он может и так и сяк.

PS: Дайте прямую ссылку на ДШ вашего МК.
Ответить

Вернуться в «AVR»