декодер для индикации чисел

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Родился
Сообщения: 16
Зарегистрирован: Вт сен 07, 2010 02:23:03

Сообщение yokimbe »

всем привет. в написании программ я новичок, пишу на асме, и столкнулся с такой проблемой:
иногда бывает надо вывести на индикацию какое либо число - но это понятно: можно сделать массив,
иногда нужно вывести число от одного до двадцати: это тоже рашаемо...
а если потребуется вывести число от одного и до ста? подскажите каким макаром
можно написать код чтоб, скажем в неком регистре лежит число 3C (60) а надо чтоб
программа при обращении к этому регистру выплевовала на индикацию число 60?
Реклама
Потрогал лапой паяльник
Сообщения: 392
Зарегистрирован: Сб дек 12, 2009 02:15:45

Сообщение neon-f »

индикация на чем?

если на светодиодных семисегментных индикаторах, то очень просто.
разлаживаешь свое число на единицы и десятки. (сотни, тысячи, и т.д. если нужно) в твоем примере 3с разложится на 0 и 6
создаешь знакогенератор
выводишь на первое знакоместо из знакогенератора десятки (6), на второе единицы (0)
любуешься.
Реклама
Родился
Сообщения: 16
Зарегистрирован: Вт сен 07, 2010 02:23:03

Сообщение yokimbe »

а чуть по подробнее можно? как разложить 3с на 6 и на 0?
Потрогал лапой паяльник
Сообщения: 392
Зарегистрирован: Сб дек 12, 2009 02:15:45

Сообщение neon-f »

асм не знаю. но наверное как и на С.
делим число на десять. целая часть результата - десятки.
из числа вычитаем десятки, получаем единицы.
ваш пример.
делим 3с на 10, получаем 6 (десятки).
из 3с вычитаем 60 (десятки), получаем 0(единицы)
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 16
Зарегистрирован: Вт сен 07, 2010 02:23:03

Сообщение yokimbe »

все понял, спасибо :))
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Когда-то написал такую штуку:

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

HexToDec:
	CLR	V100		;clear 100's
	CLR	V10		;clear 10's
X100:	CPI	TEMP,0x64	;compare with 100
	BRLO	X10		;jump to x10 if less
	SUBI	TEMP,0x64	;sub 100
	INC	V100		;inc V100
	RJMP	X100		
X10:	CPI	TEMP,0x0A	;compare with 10
	BRLO	X1		;jump to x1 if less
	SUBI	TEMP,0x0A	;sub 10 and repeat
	INC	V10		;inc V10
	RJMP	X10
X1:	MOV	V1,TEMP		;copy remain to V1
	RET

V100,V10 и V1 - регистры сотен, десяток и единиц. Входной параметр - temp. Недостаток в том, что время выполнения зависит от входного параметра: минимум (при 0) - 10 циклов, максимум (255) - 62 цикла.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 6337
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

Engineer_Keen писал(а):
X100: CPI TEMP,0x64 ;compare with 100
BRLO X10 ;jump to x10 if less
SUBI TEMP,0x64 ;sub 100
INC V100 ;inc V100
RJMP X100
X10: . . . .
; У меня работает быстрее :

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

   . . . . . . . . . . .
X100:      SUBI	TEMP,100	
           BRCS	X10
           INC	V100
           RJMP	X100
X10:       SUBI       TEMP,-100
В цикле только SUBI вместо CMPI -- SUBI
Грызет канифоль
Аватара пользователя
Сообщения: 299
Зарегистрирован: Вт июн 15, 2010 07:16:42
Откуда: Иркутск

Сообщение Rimsky »

Здесь поглядите, может чем поможет. :)
Вложения
led_dr.asm
(4.52 КБ) 299 скачиваний
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Jack_A писал(а): У меня работает быстрее :
Зачетно! Если перевести числа от 0 до 255 - разница в 730 циклов. Хотя при некоторых числах (0 например) у меня на 2 цикла быстрее :)))
Друг Кота
Аватара пользователя
Сообщения: 6337
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

Engineer_Keen писал(а):
Jack_A писал(а): У меня работает быстрее :
Зачетно! Если перевести числа от 0 до 255 - разница в 730 циклов. Хотя при некоторых числах (0 например) у меня на 2 цикла быстрее :)))
За честное признание - решпект и уважуха :-)
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»