ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
27 декабря
49279
Dingo (25.01.2006 09:25, просмотров: 2783)
BIN2BCD можно шустрей как-нить? На 2313 делаю. почти 2000 циклов. nolist .include "include\2313def.inc" .list .def cnt=r17 .def tmp=r16 .def con03=r11 .def con30=r12 .def bin0=r2 ; бинарник для преобразования .def bin1=r3 .def bin2=r4 .def bin3=r5 .def bcd01=r6 ; результат сдесь .def bcd23=r7 .def bcd45=r8 .def bcd67=r9 .def bcd89=r10 ;rjmp reset ;reset ;reset: ;cli ;disable interr ; ldi tmp, RAMEND ;stack to top ; out SPL, tmp ; rcall bin2bcd ;nop ; rjmp reset bin2bcd: ldi tmp, 0x03 ; добавлять к младшей mov con03, tmp ldi tmp, 0x30 ; и старшей тетераде для коррекции mov con30, tmp eor bcd01,bcd01 eor bcd23,bcd23 eor bcd45,bcd45 eor bcd67,bcd67 eor bcd89,bcd89 ldi cnt,0x02 ; сдвиги по числу бит в истонике. loop1: ; первые 2 можно не проверять ;---shift bin lsl bin0 rol bin1 rol bin2 rol bin3 ;done ;---shift bcd rol bcd01 rol bcd23 rol bcd45 rol bcd67 rol bcd89 ;done dec cnt brne loop1 ldi cnt, 0x1E ; 30 dec: 32-2 осальные сдвиги, кол-во loop2: b0: ;--- check and kcorrected bcd mov tmp, bcd01 andi tmp, 0x0F ; младшая тетрада если больше 5 cpi tmp, 0x05 brlo b1 add bcd01, con03 ;тогда +3 b1: mov tmp, bcd01 ; и так каждые 4 бита andi tmp, 0xF0 cpi tmp, 0x50 brlo b2 add bcd01, con30 b2: mov tmp, bcd23 andi tmp, 0x0F cpi tmp, 0x05 brlo b3 add bcd23, con03 b3: mov tmp, bcd23 andi tmp, 0xF0 cpi tmp, 0x50 brlo b4 add bcd23, con30 b4: mov tmp, bcd45 andi tmp, 0x0F cpi tmp, 0x05 brlo b5 add bcd45, con03 b5: mov tmp, bcd45 andi tmp, 0xF0 cpi tmp, 0x50 brlo b6 add bcd45, con30 b6: mov tmp, bcd67 andi tmp, 0x0F cpi tmp, 0x05 brlo b7 add bcd67, con03 b7: mov tmp, bcd67 andi tmp, 0xF0 cpi tmp, 0x50 brlo b8 add bcd67, con30 b8: mov tmp, bcd89 andi tmp, 0x0F cpi tmp, 0x05 brlo b9 add bcd89, con03 b9: mov tmp, bcd89 andi tmp, 0xF0 cpi tmp, 0x50 brlo bcdCorr add bcd89, con30 bcdCorr: ; сдвигаем все после коррекции ;---shift bin lsl bin0 rol bin1 rol bin2 rol bin3 ;done ;---shift bcd rol bcd01 rol bcd23 rol bcd45 rol bcd67 rol bcd89 ;done dec cnt brne loop2 ; и так пока не сдвинем все. ret