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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
gauss
Держит паяльник хвостом
Сообщения: 920
Зарегистрирован: Сб янв 16, 2010 15:34:57
Откуда: Sevsk/Moscow

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

Сообщение gauss »

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

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

Сообщение ploop »

Заданную как? Вы её в регистр положили, или в память? Тогда да. Если она просто в коде - то нет.
Аватара пользователя
gauss
Держит паяльник хвостом
Сообщения: 920
Зарегистрирован: Сб янв 16, 2010 15:34:57
Откуда: Sevsk/Moscow

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

Сообщение gauss »

К сожалению, просто в коде.
И вот ещё вопрос: когда мы загружаем данные в РОН из ОЗУ, остаются ли они в ОЗУ? или перемещаются и остаются только в РОН?
:idea:
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

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

Сообщение avreal »

gauss писал(а):Вчера реализовал с помощью логических сдвигов - неудобно, но работает.
Я не совсем понял задачу — это нужно или что-то другое.

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

    clr     temp
    sbic PINC,5
    inc     temp ; или ldi temp, 1, но тогда только в старшие регистры



gauss писал(а):И вот ещё вопрос: когда мы загружаем данные в РОН из ОЗУ, остаются ли они в ОЗУ? или перемещаются и остаются только в РОН?
Конечно остаётся. Даже команда move не двигает, а копирует.

_____
Оставаться-то данные остаются, но частичка их души украдена, как при фотографировании человека :)))
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Аватара пользователя
gauss
Держит паяльник хвостом
Сообщения: 920
Зарегистрирован: Сб янв 16, 2010 15:34:57
Откуда: Sevsk/Moscow

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

Сообщение gauss »

avreal писал(а):

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

    clr     temp
    sbic PINC,5
    inc     temp ; или ldi temp, 1, но тогда только в старшие регистры

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

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

Сообщение ploop »

И вот ещё вопрос: когда мы загружаем данные в РОН из ОЗУ, остаются ли они в ОЗУ? или перемещаются и остаются только в РОН?

Ну подумайте логически, что такое перемещение в цифровой технике? Своими словами? Например, это копирование данных откуда-то, и затем запись на прежнее место какого-то дефолтного значения. Точно так же, как нет понятия стереть данные. Их невозможно стереть. Их можно только записать. Отсюда следует, что понятия "переместить" тоже нет. Разумеется данные остаются.
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

xkp писал(а):
xkp на 152 странице писал(а):следующим вопросом станет время, точнее, как можно точнее измерить ширину импульса. можно даже и не в секундах или миллисекундах, а в условных еденицах.

испытания сказали что программный подсчет не подходит, маленькая частота выборки. решено использовать аппаратный режим захвата на MEGA32, работающей на кварце 24 МГц.
но и тут заморочки. что то мне кажется что что-то тут не так... можно же как то проще замерить ширину импульса?

Пытался понять логику работы - не вкурил :roll:
пишите коменты, уважайте тех, у кого просите помощи
ковырять такую лапшу вряд ли кто будет ИМХО
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

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

Сообщение avreal »

gauss писал(а):
avreal писал(а):

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

    clr     temp
    sbic PINC,5
    inc     temp ; или ldi temp, 1, но тогда только в старшие регистры
Поясните пожалуйста код, если нетрудно :)
Очищаем регистр temp.
Если на входе PINC, 5 значение 0, то пропускаем (Skip Bit IO Cleared) следующую команду в temp остаётся 0.
Если на входе 1-ка, то следующая команда не пропускается, регистр инкрементируется и из 0 становится 1.
Ну или напрямую загрузить 1, но LDI работает не со всеми регистрами, а INC со всеми.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Аватара пользователя
gauss
Держит паяльник хвостом
Сообщения: 920
Зарегистрирован: Сб янв 16, 2010 15:34:57
Откуда: Sevsk/Moscow

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

Сообщение gauss »

avreal, благодарю :beer:
И ещё вопрос. Когда мы в сегменте данных выделяем часть ячеек в ОЗУ под переменную,
то обязательно ли их инициализировать? Что хранится в этих ячейках по умолчанию? Ноль?
:idea:
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

gauss писал(а):Что хранится в этих ячейках по умолчанию?

произвольный мусор
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
gauss
Держит паяльник хвостом
Сообщения: 920
Зарегистрирован: Сб янв 16, 2010 15:34:57
Откуда: Sevsk/Moscow

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

Сообщение gauss »

Блин, что-то меня поперло... :)
Как можно загрузить в РОН значение из таймера (скажем, из регистра TCNT1H?)
Пробовал in и mov - нифига!
:idea:
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

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

Сообщение ILYAUL »

Легко , если знать в какой области Sram он находится. Если не помогает in то может быть lds поможет.
И раз уж из счётчика 16 бит , то и последовательность надо учитывать.
А это чтоб не думать

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

.macro   inr
   .if ( @1 < 0x60 )
   in   @0,@1
   .else
   lds   @0,@1
   .endif
.endm
Последний раз редактировалось ILYAUL Ср окт 17, 2012 23:51:54, всего редактировалось 1 раз.
Аватара пользователя
gauss
Держит паяльник хвостом
Сообщения: 920
Зарегистрирован: Сб янв 16, 2010 15:34:57
Откуда: Sevsk/Moscow

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

Сообщение gauss »

lds - ведь загрузка из ОЗУ?
А в ОЗУ мы его не записываем...

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

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

Сообщение ILYAUL »

Вы представляете , но в некоторых ьикроконтроллерах ATMEL много регистров расположены в области ОЗУ , хотя если быть до конца честным то и к регистрам РОН можно запросто обращаться через sts и lds и через ld и st так как все что в ATMEl есть , все находится в Sram , кроме Flash и Eeprom
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

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

Сообщение ILYAUL »

Не помогает

lds temp,TCNT1H
микруха какая?
Аватара пользователя
gauss
Держит паяльник хвостом
Сообщения: 920
Зарегистрирован: Сб янв 16, 2010 15:34:57
Откуда: Sevsk/Moscow

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

Сообщение gauss »

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

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

Сообщение xkp »

xkp на 152 странице писал(а):следующим вопросом станет время, точнее, как можно точнее измерить ширину импульса. можно даже и не в секундах или миллисекундах, а в условных еденицах.

испытания сказали что программный подсчет не подходит, маленькая частота выборки. решено использовать аппаратный режим захвата на MEGA32, работающей на кварце 24 МГц.
но и тут заморочки. что то мне кажется что что-то тут не так... можно же как то проще замерить ширину импульса? добавил коментарии.
Спойлер

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

.INCLUDE "m32def.inc"
.def tmp      =r16
.def tmp0      =r17

.CSEG
.ORG $2a
reset:
   ldi tmp,low(ramend)
   out spl,tmp
   ldi tmp,high(ramend)
   out sph,tmp
   rcall cap_init      ;инициализация прерываний
   sei
main:
   nop
   rjmp main         ;бесконечный цикл

cap_init:            ;инициализация прерываний
   ldi tmp,$41      ;ICES1=1 CS1=1
   out tccr1b,tmp
   ldi tmp,$20      ;TICIE=1
   out timsk,tmp
   ret

TIM1_CAPT:         ;прерывания
   in tmp,tccr1b      ;берем для сравнения
   sbrc tmp,ices1      ;смотрим бит ICES1
   rjmp onn         ;если 1 то на метку
;   in r18,icr1l         ;если 0 то запоминаем значения
;   in r19,icr1h

   in tmp,tccr1b      ;берем для установки бита
   ori tmp,(1<<ices1)   ;устанавливаем бит ICES1
   out tccr1b,tmp      ;устанавливаем
   rjmp out_tim      ;на выход
onn:
   clr tmp         ;очищаем счетчик
   out tcnt1l,tmp         ;младший
   out tcnt1h,tmp         ;старший

   in tmp,tccr1b      ;очищаем бит ICES1
   andi tmp,$ff-(1<<ices1)
   out tccr1b,tmp
out_tim:
   reti            ;выход с прерываний

.CSEG
.ORG $0
   jmp RESET ; Reset Handler
   reti   ;jmp EXT_INT0 ; IRQ0 Handler
   nop
   reti   ;jmp EXT_INT1 ; IRQ1 Handler
   nop
   reti   ;jmp EXT_INT2 ; IRQ2 Handler
   nop
   reti   ;jmp TIM2_COMP ; Timer2 Compare Handler
   nop
   reti   ;jmp TIM2_OVF ; Timer2 Overflow Handler
   nop
rjmp TIM1_CAPT ; Timer1 Capture Handler
   nop
   reti   ;jmp TIM1_COMPA ; Timer1 CompareA Handler
   nop
   reti   ;jmp TIM1_COMPB ; Timer1 CompareB Handler
   nop
   reti   ;jmp TIM1_OVF ; Timer1 Overflow Handler
   nop
   reti   ;jmp TIM0_COMP ; Timer0 Compare Handler
   nop
reti;rjmp TIM0_OVF ; Timer0 Overflow Handler
   nop
   reti   ;jmp SPI_STC ; SPI Transfer Complete Handler
   nop
   reti   ;jmp USART_RXC ; USART RX Complete Handler
   nop
   reti   ;jmp USART_UDRE ; UDR Empty Handler
   nop
   reti   ;jmp USART_TXC ; USART TX Complete Handler
   nop
   reti   ;jmp ADC ; ADC Conversion Complete Handler
   nop
   reti   ;jmp EE_RDY ; EEPROM Ready Handler
   nop
   reti   ;jmp ANA_COMP ; Analog Comparator Handler
   nop
   reti   ;jmp TWI ; Two-wire Serial Interface Handler
   nop
   reti   ;jmp SPM_RDY ; Store Program Memory Ready Handler
   nop
.exit
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

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

писать и проверять код некогда, опишу логику как я это вижу
1. предустанавливаем ICES в 1
2. в прерывании по ICP
= проверяем значение ICES
если 1
читаем в перем1 значение ICR
иначе
читаем в перем2 значение ICR
конец если
= меняем значение ICES на противоположенное
= перем2-перем1={значение длительности импульса} - но лучше организовать какой-нибудь флаг готовности данных
а всю обработку вести вне прерывания

желательно еще сделать N измерений и усреднить значение

зы обнулять счетчик таймера не надо!!!
Последний раз редактировалось GP1 Чт окт 18, 2012 09:15:53, всего редактировалось 1 раз.
Чем дальше, тем больше становлюсь занудой...
Изображение
Ответить

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