Пн ноя 15, 2010 17:13:05
Пн ноя 15, 2010 17:36:56
Пн ноя 15, 2010 19:31:06
Вт ноя 16, 2010 14:31:07
Вт ноя 16, 2010 15:37:36
Вт ноя 16, 2010 16:40:26
Вт ноя 16, 2010 17:17:53
Вт ноя 16, 2010 17:47:05
george_54 писал(а):Спасибо за помощь.
Вт ноя 16, 2010 17:52:34
Ср ноя 17, 2010 08:00:43
Вс ноя 28, 2010 11:03:39
void BIN_TO_BCD (void) //преобразование BIN в BCD (распакованный), ЗАНИМАЕТ ПРИМЕРНО 29-515 тактов (зависит от значения DISPLAY).
{ int k = DISPLAY;
b=0;
c=0;
d=0;
{ while (k>=100)
{ k =(k-100);
b++;}
while (k>=10)
{ k =(k-10);
c++;}
d = k;
}
/* //преобразование BIN в BCD СТАРОЕ, НАПИСАННОЕ ЕЩЁ В ПЕРВОЙ ВЕРСИИ, ЗАНИМАЕТ ПРИМЕРНО 1550 тактов (от значения DISPLAY не зависит).
{
b =(DISPLAY-DISPLAY%100)/100;
c =(DISPLAY%100-DISPLAY%10)/10;
d = DISPLAY%10;
}*/
return;
}
Вс ноя 28, 2010 12:07:59
Chettuser писал(а):Кто как делает на Си преобразование BIN to BCD?...
...Может кто знает более оптимальный вариант чем вычитанием?.
Вс ноя 28, 2010 13:13:58
Soir писал(а):... Всего менее 700 тактов.
Вс дек 05, 2010 15:28:49
Вс дек 05, 2010 16:11:49
; ГРУППА КОМАНД ПРЕОБРАЗОВАНИЯ ДВОИЧНО-ДЕСЯТИЧНОГО КОДА В КОД 7-СЕГМЕНТНОГО ИНДИКАТОРА
.org 0x100
TABLE addwf PC,F ; Содержимое счетчика команд PC увеличивается
; на величину содержимого аккумулятора W.
retlw b'00111111' ; ..FEDCBA = 0 Происходит скачек по таблице
retlw b'00000110' ; .....CB. = 1 на строку со значением,
retlw b'01011011' ; .G.ED.BA = 2 записанным в аккумуляторе,
retlw b'01001111' ; .G..DCBA = 3 и далее - возврат по стеку.
retlw b'01100110' ; .GF..CB. = 4
retlw b'01101101' ; .GF.DC.A = 5
retlw b'01111101' ; .GFEDC.A = 6
retlw b'00000111' ; .....CBA = 7
retlw b'01111111' ; .GFEDCBA = 8
retlw b'01101111' ; .GF.DCBA = 9
;**********************************************************************************************
end ; Конец программы.
Вс дек 05, 2010 16:20:45
ANDLW 0x0F
Вс дек 05, 2010 16:32:48
Вс дек 05, 2010 16:50:49
Вс дек 05, 2010 17:02:26
Вс дек 05, 2010 17:05:47