potřebuju sepsat program, pro PIC16F877A, ideálně v assembleru, který převede 48-bitové binární číslo na BCD číslo. Nejlépe asi metodou posuvu a testu na 4. Binární 48 bitové číslo se do PIC MCU načte postupně v 6x 8bitech přes port. Za funkční program bude odměna, tak se neupejpejte .
Fórum › Assembler
48-bit binární číslo na BCD
#1 remmidemmi
include"P16F877A.inc"
;***************************************************************
COUNT equ 20h
CISLA10 equ 21h
CISLA32 equ 22h
CISLA54 equ 23h
CISLA76 equ 24h
CISLA98 equ 25h
CISLABA equ 26h
CISLADC equ 27h
CISLAFE equ 28h
LOOP3 equ 2Ah
HEX_1 equ 30h
HEX_2 equ 31h
HEX_3 equ 32h
HEX_4 equ 33h
HEX_5 equ 34h
HEX_6 equ 35h
;***************************************************************
org 0000h
goto Start
;**************************************************************
; Podprogram prevede 48 bitove cislo z HEX na DEC
; HEX_6,HEX_5,HEX_4, HEX_3, HEX_2, HEX_1 -> CISLAFE,CISLADC,CISLABA,CISLA98, CISLA76, CISLA 54, CISLA32, CISLA10
; Priklad: FFFFFFFFFFh -> 281474976710655d
Start
movlw 0FFh
movwf HEX_1
movwf HEX_2
movwf HEX_3
movwf HEX_4
movwf HEX_5
movwf HEX_6
HEX6BCD
bcf STATUS,C ; vynuluj bit C pred rotaci
movlw d'48'
movwf COUNT
; ------------------------
clrf CISLA10
clrf CISLA32
clrf CISLA54
clrf CISLA76
clrf CISLA98
clrf CISLABA
clrf CISLADC
clrf CISLAFE
;-------------------------------
LOOP48
rlf HEX_1,F
rlf HEX_2,F
rlf HEX_3,F
rlf HEX_4,F
rlf HEX_5,F
rlf HEX_6,F
rlf CISLA10,F
rlf CISLA32,F
rlf CISLA54,F
rlf CISLA76,F
rlf CISLA98,F
rlf CISLABA,F
rlf CISLADC,F
rlf CISLAFE,F
decfsz COUNT,F
goto DEKKOR ; dekadicka korekce se provede s kazdym registrem
return
;-------------------------------
DEKKOR
movlw CISLA10
movwf FSR
call BCDKOR ; BCD korekce
movlw CISLA32
movwf FSR
call BCDKOR ; BCD korekce
movlw CISLA54
movwf FSR
call BCDKOR ; BCD korekce
movlw CISLA76
movwf FSR
call BCDKOR ; BCD korekce
movlw CISLA98
movwf FSR
call BCDKOR ; BCD korekce
movlw CISLABA
movwf FSR
call BCDKOR ; BCD korekce
movlw CISLADC
movwf FSR
call BCDKOR ; BCD korekce
movlw CISLAFE
movwf FSR
call BCDKOR ; BCD korekce
goto LOOP48
;-------------------------------
BCDKOR
movlw 03h
addwf INDF,W
movwf LOOP3
btfsc LOOP3,3 ; test zda je vysledek > 7
movwf INDF
; ------------------------
movlw 30h
addwf INDF,W
movwf LOOP3
btfsc LOOP3,7 ; test zda je vysledek > 7
movwf INDF
; ------------------------
return
Opak
goto Opak
;***************************************************************
end
Zkuste tohle,doba převodu při 20MHz je cca 1,5ms. Program jsem jen upravil pro 48bit, původní je ze stránky http://doveda.byl.cz/…/prevody.htm#…
Dik, vyzkousim. Zajimavy web toho dovedy
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
10-bitové dvojkové číslo (omezeno na 0 - 999) na BCD, MCU 8051 — založil hlucheucho
Binární číslo — založil pazdy
Převod 15-bit RGB na 24-bit RGB — založil PiranhaGreg
Celé číslo / desatinné číslo — založil Eddy777
BCD+3 na 7 segment — založil Jakub