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

Обсуждаем контроллеры компании Atmel.
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Реклама
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

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

Сообщение Demiurg »

ILYAUL писал(а):...

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

//------------------------------------------------------------------------
#define tab_h(x) HIGH(x), LOW(x)
#define tab_l(x) LOW(x), HIGH(x)
//------------------------------------------------------------------------

/************************************************************************/
#if (BCD==YES)

.dseg

HEX_DEC_BUFFER:
.equ	HEX_DEC_BUFFER_LENGHT = 5
.byte	HEX_DEC_BUFFER_LENGHT

.cseg

Hex_Dec:
	ldx		HEX_DEC_BUFFER
	ldz		Tab_10_16*2

	ldi		r19, 4

Hex_Dec_Cycle:
	lpm		r17, Z+
	lpm		r16, Z+

	rcall	Hex_Dec_Digit
	st		X+, r18

	dec		r19
	brne	Hex_Dec_Cycle

	mov		r16, r14
//	ori		r16, 0x30
	st		X+, r16
Hex_Dec_End:
	ret

Hex_Dec_Digit:
	ldi		r18,-1
Hex_Dec_Digit_Cycle:
	inc		r18
	sub		r14,r16
	sbc		r15,r17
	brsh	Hex_Dec_Digit_Cycle
	add		r14,r16
	adc		r15,r17
//	ori		r18,0x30
	ret


Tab_10_16:
.db tab_h (10000)
.db tab_h (1000)
.db tab_h (100)
.db tab_h (10)

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

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

Сообщение ILYAUL »

Вообщем- то для него этого достаточно

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

;**************************************************
;*    ;;+Подпрограмма преобразования в BCD;;*     *
;**************************************************
CONVBCD:
		clr		temp				;+ Преобразуем в BCD
BCD1:
		subi	temp1,10
		brcs	EndBCD
		inc		temp
		rjmp	BCD1
EndBCD:		
		subi	temp1,-10
		ori		temp1,'0'			; перевод в ASCII
		cp		temp,zero
		breq	XXXX
		ori		temp,'0'			;/ в temp1 младшее значение в temp - старшее
		ret
XXXX:
		ldi		temp,0x20			;| Убираем первый , незначащий ноль
		ret
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

Я тут подумал и упрощаю задачу:
надо получить 3 байта:
1ый — знак (скажем, $A = "+", $B = "-");
2ой — целая часть температуры в двоичном формате (процедура перевода в BCD в проге уже есть);
3ий — дробная часть (0 или 5).
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

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

Сообщение ILYAUL »

Ну и чего, та же самая таблица , только с двумя значениями 0x30 и 0х35 т.к дробь будет только 1 или 0 -другого не дано
Знак проверяется по старшему биту - 1 - значит минус . для подготовки для BCD лучше инвертировать в + , там выше в коде это есть
Реклама
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

Чего? Какая таблица? :)
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

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

Сообщение ILYAUL »

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

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

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

Ммм... сложновато.
Я вижу примерно так:
Если > 0, загружаем в первый байт "+", сдвигаем целую часть во 2-й байт и смотрим дробную часть: 0 или 5;
Если < 0, загружаем в первый байт "-", сдвигаем целую часть во 2-й байт, берём дополнене и смотрим дробную часть: 0 или 5.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

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

Сообщение ILYAUL »

У DS-ки одна замечательная вещь , она устанавливает старший бит в 1 , если температура отрицательная. Проверяем и выводим +/-
Если темпю. отрицательная , переводим в положит и

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

		lsr		SHIFT_REG					// и значение текущей температуры т.е делим на 10
X1:		ror		TERMO_REG					// В TERMO_REG собираются значения температуры, в SHIFT_REG - значения после запятой
		ror		SHIFT_REG
		dec		count
		brne	X1
		swap	SHIFT_REG
Так вот у Вас SHIFT_REG будет или = 1 или 0 Проверяете и выводите сразу после запятой 0 или 5
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

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

Сообщение a_skr »

r17:r16 - вход
выход:
r20: '+'/'-'
r21: градусы
r22: 0/5

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

	ldi r20,'+'
	and  r17,r17 ; проверка на отрицательность
	brpl plus

	com  r17  ; отрицательное
	neg  r16
	sbci r17,0xFF
	ldi r20,'-'

plus: ; (уже) положительное
	ldi  r22,5   
	sbrs r16,3 ; проверка на 0.5
	clr  r22

	lsr r17   ; сдвигаем вправо на 4 бита
	ror r16
	lsr r17
	ror r16
	lsr r17
	ror r16
	lsr r17
	ror r16
	
	mov r21,r16 ; и получаем целые градусы
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

a_skr писал(а): and r17,r17 ; проверка на отрицательность
Почему не Хотя в машинных кодах это одно и то же :)
Спасибо за код, лови плюсы.

Кто-нибудь сможет компактней? :))
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

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

Сообщение a_skr »

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

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

Сообщение ILYAUL »

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

ldi r20,'+'
   and  r17,r17 ; проверка на отрицательность
   brpl plus

   com  r17  ; отрицательное
   neg  r16
   sbci r17,0xFF
   ldi r20,'-'
=

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

sbrs R17,MSB
ldi R20,'+'
Sbrc R17,MSB
ldi R20,'-'

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

lsr r17   ; сдвигаем вправо на 4 бита
   ror r16
   ror r17
   ror r16
   ror17
   ror r16
   ror r17
   ror r16
=

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

      lsr      SHIFT_REG               // и значение текущей температуры т.е делим на 10
X1:      ror      TERMO_REG               // В TERMO_REG собираются значения температуры, в SHIFT_REG - значения после запятой
      ror      SHIFT_REG
      dec      count
      brne   X1
      swap   SHIFT_REG

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

Sbrs    SHIFT_REG,LSB
ldi   R20,'0'
sbrc SHIFT_REG,LSB
Ldi R20,'5'
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Gudd-Head писал(а):Кто-нибудь сможет компактней?
Немного, но всё же... :)

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

	LDI	ZL,4

	LDI	R20,'+'
	TST	XH
	BRPL	PLUS
	COM	XH
	NEG	XL
	SBCI	XH,-1
	LDI	R20,'-'
PLUS:
	LSR	XH
	ROR	XL
	DEC	ZL
	BRNE	PLUS	

	LDI	R21,5
	BRCS	PC+2
	CLR	R21
	
	MOV	R22,XL
	
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

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

Сообщение Demiurg »

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

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

Сообщение ILYAUL »

Нет, отвечаем на просьбу
Аватара пользователя
Серый_
Опытный кот
Сообщения: 708
Зарегистрирован: Пт ноя 30, 2007 14:40:44

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

Сообщение Серый_ »

Составляю памятку с описанием и переводом команд ассемблера, кто-нибудь может перевести оные - научным языком. "Подпись"/ "не подпись"/ и "подпись" ли в русском варианте/ и что за подпись? :) Команды аппаратному умножителю:

Multiply Unsigned
Multiply Signed
Multiply Signed with Unsigned
Fractional Multiply Unsigned
Fractional Multiply Signed
Fractional Multiply Signed with Unsigned
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

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

Сообщение Z_h_e »

Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
Серый_
Опытный кот
Сообщения: 708
Зарегистрирован: Пт ноя 30, 2007 14:40:44

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

Сообщение Серый_ »

Ребят, как преобразовать двоичное в BCD? 11111111 >>> 255, осадив оное в трёх регистрах?
00000010 = 2
00000101 = 5
00000101 = 5
Предлагают 16-ти битные, но скостить их до 8-ми тоже надо уметь, чтоб "процедуру не повело". :) Может у кого в наличии готовые примеры?
УГ-изм проблемы:
СпойлерИзображение
Аватара пользователя
Seriyvolk
Друг Кота
Сообщения: 4964
Зарегистрирован: Сб май 05, 2012 20:19:55
Откуда: Минск

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

Сообщение Seriyvolk »

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

;вход: R16  число от 0 ... 255 
;выход: R18 число 2, R17 число 1, R16 число 0  = digits 
;байтов: 20 

;пример на вход ldi r16,255
;выход r18 = 00000010 это 2, r17 = 00000101 это 5, r16 = 00000101 это 5.                
Hex2BCD:		LDI r18,-1 
bcd1:           INC r18
                SUBI r16,100 
                BRCC bcd1 
                LDI r17,10 
bcd2:           DEC r17 
                SUBI r16,-10 
                BRCS bcd2
ret 
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
Ответить

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