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

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

Сообщение gauss »

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

Сообщение ploop »

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

Сообщение gauss »

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

Сообщение avreal »

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

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

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

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

Сообщение gauss »

avreal писал(а):

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

    clr     temp
    sbic PINC,5
    inc     temp ; или ldi temp, 1, но тогда только в старшие регистры
Поясните пожалуйста код, если нетрудно :)
:idea:
Реклама
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

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

Сообщение GP1 »

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

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

Сообщение gauss »

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

Сообщение GP1 »

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

Сообщение gauss »

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

Сообщение 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 раз.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 920
Зарегистрирован: Сб янв 16, 2010 15:34:57
Откуда: Sevsk/Moscow

Сообщение gauss »

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

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

Сообщение ILYAUL »

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

Сообщение ILYAUL »

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

Сообщение gauss »

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

Сообщение 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
Откуда: Россия, Волгоград

Сообщение GP1 »

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

Сообщение xkp »

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

Сообщение GP1 »

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

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

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

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