[an error occurred while processing this directive]
Покритикуйте. можно ли быстрее и по поводу "хорошего тона" (чтобы другие могли разобраться)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Oleg Danilov 25 января 2006 г. 05:00

.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 ;тогда +6
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

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru