[an error occurred while processing this directive] [an error occurred while processing this directive]
Для 4-х байт нет, есть для одного и для трех, но они легко модифицируются
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Baser 10 сентября 2001 г. 19:29
В ответ на: Ответ: Если не сложно , для PIC для 4-х байт на асме. Спасибо. отправлено ALEKS 10 сентября 2001 г. 13:04

MTRx - это временные регистры общего пользования


;---------------------------------------------------------------;
; Binary to BCD convert 1-byte number ;
; Input: MTR1 - input binary 1-byte number, ;
; Output: MTR3:MTR2 - output BCD 2-byte number, ;
; Temp: MTR4 - temporary register. ;
;---------------------------------------------------------------;
BinBCD1:clrf MTR2
clrf MTR3
movlw 8
movwf MTR4

bcd10: bcf STATUS,C
rlf MTR1
rlf MTR2
rlf MTR3
decfsz MTR4
goto bcd11
return

bcd11: swapf MTR2,W
addlw 0B0h
btfss STATUS,C
goto bcd12
movlw 03h ; Out1 low nibble >= 5
addwf MTR2

bcd12: movf MTR2,W
addlw 0B0h
btfss STATUS,C
goto bcd13
movlw H'30' ; Out1 high nibble >= 5
addwf MTR2

bcd13: swapf MTR3,W
addlw 0B0h
btfss STATUS,C
goto bcd14
movlw 03h ; Out2 low nibble >= 5
addwf MTR3
bcd14: goto bcd10
;---------------------------------------------------------------;
; Binary to BCD convert 3-byte number ;
; Input: MTR3:MTR2:MTR1 - input binary 3-byte number, ;
; Output: MTR7:MTR6:MTR5:MTR4 - output BCD 4-byte number, ;
; Temp: MTR8,FSR - temporary registers. ;
;---------------------------------------------------------------;
BinBCD3:clrf MTR4
clrf MTR5
clrf MTR6
clrf MTR7
movlw 24 ; 24 shift steps
movwf MTR8

bcd30: bsf MTR8,7 ; 4 Out registers
movlw MTR4
movwf FSR
bcf STATUS,C
rlf MTR1
rlf MTR2
rlf MTR3
rlf MTR4
rlf MTR5
rlf MTR6
rlf MTR7

decf MTR8
movf MTR8,W
andlw b'00011111'
btfss STATUS,Z
goto bcd31
return

bcd31: swapf INDF,W
addlw 0B0h
btfss STATUS,C
goto bcd32
movlw 03h ; Out low nibble >= 5
addwf INDF

bcd32: movf INDF,W
addlw 0B0h
btfss STATUS,C
goto bcd33
movlw 30h ; Out high nibble >= 5
addwf INDF

bcd33: incf FSR
movlw 20h
subwf MTR8
movf MTR8,W
andlw b'11100000'
btfss STATUS,Z
goto bcd31
goto bcd30
;---------------------------------------------------------------;


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

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru