10 Bit Binary έως 4 Digit BCD ????????

C

chevymn1964

Guest
Hey Everyone!Βρήκα μια ρουτίνα στο διαδίκτυο που μετατρέπει 10 bit δυαδικό ψηφίο έως 4 BCD Νομίζω όμως ότι υπάρχει ένα τυπογραφικό λάθος, επειδή υπάρχει μια goto b2d2 και η b2d2 το isnt αναφέρονται σχετικά με τον κώδικα ......Όποιος έχει μια ιδέα όπου η b2d2 πρέπει να προχωρήσει;;;;Οποιαδήποτε άλλη 10bit με 4 ψηφίων bcd ρουτίνα;;;;Προσπαθώ να εμφανίζει τάση για μια LCD με ένα PIC 16f676
;======= Bin2Dec10G.asm ============= Sep 04 =========
? Δοκιμή 10β δυαδικό ψηφίο σε 4 μετατροπής ως
? Βασίζεται στην κατανομή των αρμοδιοτήτων από 10.
?
? EA, Grens
?
? Για περισσότερες υπεύθυνοι - εδώ για 16F628 με 4 MHz
? Εσωτερικό ταλαντωτή.
?
? Μέση κύκλους επεξεργαστή για την εκτέλεση
? Υπορουτίνα στην περιοχή εισόδου 0x000 να 0x3FF
? Είναι 88.Δεν μεταβλητές που απαιτούνται, εκτός από την
? Blh εισροών, blo και το εκτός ψηφία BCD.
? Υπορουτίνα μήκος 38.
;================================================= =====

p = κατάλογο 16f628
radix Δεκέμβριος
# include
__config 0x3D30;------- Ρύθμιση RAM Μεταβλητές ---------------------------
blo EQU 0x20? lsbyte της 10β binary
BHI EQU 0x21? MSB
d4 EQU 0x23? msdigit
d3 EQU 0x24
d2 EQU 0x25
d1 EQU 0x26? LSD
;------- Πρόγραμμα Κωδικός --------------------------------

org 0x00? Αποτελεσματική Reset Vector
?
NOP
Ξεκινήστε goto? Μετάβαση από διακοπή
?
Εκκίνηση
movlw 0x07
movwf CMCON? Digital I / O
movlw 0x03? Test εισόδου
movwf BHI
movlw 0xFF
movwf blo
movlw 0x04
κλήση Bin2decg
Κρατάω
goto Hold? Finished

Bin2decg? 10β binaey να BCD
clrf d1
clrf d2
clrf d3
clrf d4
clrc
ΔΤΑ BHI, στ? N = 4 * Q R
ΔΤΑ blo, στ? blo = Q
ΔΤΑ d1, στ? d1 = R ως temp, R25
B2d2 goto? επαναλάβετε
B2d3
addwf blo, στ? πάρει υπόλοιπο
? Μετά / 100, C = 0
rlf d1, στ? * 4 και προσθέστε R πίσω στο
rlf blo, στ
rlf d1, στ
rlf blo, στ? 4 * BLO R = N --
? 1000 * D4 - 100 * D3
movlw 10
B2d4
subwf blo, στ? blo = N - 1000 * D4 --
? 100 * D3 - 10 * d2
skpc
B2d5 goto? blo10
B2d4 goto
B2d5
addwf blo, στ? τεθεί τελευταία 10 πίσω, Γ = 0
movf blo, w
movwf d1
επιστροφή

τέλος

 
Μπορεί αυτό να μετατραπεί σε όλες συναρμολόγησης;;;Νομίζω ότι αυτό είναι τι Im ψάχνει για:

- Με βάση το bit 16 - 5 ψηφία μετατροπή γραπτών από τον John Payson
& Εξηγείται από Scott Dattalo
- Αυτή η έκδοση προσθέτει επιπλέον bit, έτσι ώστε τα 5 ψηφία οθόνη μπορεί
διαβάστε σε 99.999
- Θέλω να εκφράσω την b_i από την άποψη της a_i για τις εξισώσεις:
N = A4 * 16 ^ 4 A3 * 16 ^ 3 a2 * 16 ^ 2 a1 * 16 a0
N = β4 * 10 ^ 4 B3 * 10 ^ 3 b2 * 10 ^ 2 β1 * 10 b0
η λύση κωδικοποιούνται παρακάτω:
b0 = A0 - (4 * (a4 A3 A2 α1)) - 20
b1 = (4 * α4) (6 * α2) (2 * α1) - 198
b2 = (5 * α4) A3 (2 * α2) - 140
β3 = (5 * α4) (4 * α3) - 144
β4 = (6 * α4) 16
- Γραπτή στην CCS C
- Δεδομένου κριάρι ήταν άφθονα, χρησιμοποίησα ένα 3 byte αριθμός - μόνο ένα bit
του επιπλέον byte είναι πραγματικά απαιτείται.Θα χρησιμοποιηθεί επίσης τρία bytes
της scratchpad κριός για την αύξηση της αποτελεσματικότητας της μεταγλωττισμένο κώδικα.
Οι εξισώσεις μπορούν να κωδικοποιηθούν σε C ακριβώς όπως φαίνεται παραπάνω, αλλά ότι
δεν επωφελούνται των κοινών όρων και προοδευτική πολλαπλασιάζει.
- Ακόμη και με μόνο το ένα επιπλέον κομμάτι, ο νέος αριθμός μπορεί να υπερβαίνει το
99.999, γι 'αυτό πρέπει να ελεγχθεί.Ο κωδικός αυτός δεν αποδεικνύει ότι.
- CCS Γ περιορίζεται σε 16 bit, ως ο μεγαλύτερος ακέραιος τύπος δεδομένων.Κατά
χρησιμοποιήστε ένα αριθμό 24 bit, μπορώ να χρησιμοποιήσω μια σειρά για να βεβαιωθείτε ότι τα bytes είναι
συνεχόμενα.Η λειτουργία αυτή λειτουργεί με τη σειρά ως παγκόσμιο,
διότι πιστεύω ότι είναι πιο αποτελεσματική από ό, τι διέρχεται συστοιχίες να
λειτουργία.
- Ο κωδικός θα μπορούσε να είναι αρκετά μικρότερο - στο πρωτότυπο του Ιωάννη, το
τμήμα του κώδικα που απομονωθεί η nibbles και υπολογίζεται το
ψηφία πήρε 32 οδηγίες.Αν μου τον κωδικό που λύση σε C, χρησιμοποιώντας
δύο scratchpad bytes να βελτιωθεί η κατάσταση, θα καταρτίζει σε 64 οδηγίες.
Η παρούσα έκδοση συγκεντρώνει το 85 οδηγίες, έτσι είμαι βέβαιος ότι ένα whiz ASM
θα μπορούσε να δείξει πολύ μια βελτίωση.Η έκδοση C εξακολουθεί να είναι πολύ πιο γρήγορα
από την αρχική τρόπο που το έκανε αυτό, και είναι κατάλληλα για αυτό που χρειάζομαι.
* /

unsigned int TenK, Εσύ, Hund, Δεκάδες, Ones?
unsigned int num [3]?

void BIN2DEC (void)
(
/ / Λειτουργεί σε global μεταβλητές:
/ / Που num [0] - [3] (lo-hi) πριν την κλήση
/ / Επιστρέφει με TenK ... Ones σετ από 0-9

unsigned int a0, Α1, Α2, Α3, Α4?
unsigned int Τ1, Τ2, Τ3? / / scratchpad μεταβλητών

/ / Απομονωθούν οι nibbles 4 bit
/ / Για τους σκοπούς της παρούσας ρουτίνα, α4 μπορεί να είναι μόνο 0 ή 1
A4 = num [2]?
a3 = num [1] / 16?
α2 = num [1] & 0b00001111?
a1 = num [0] / 16?
A0 = num [0] & 0b00001111?

/ / Υπολογίζει τα δεκαδικά ψηφία (το b_i είναι εκφράζονται εδώ
/ / Ως TenK ... Ones, όπως και στην αρχική)
/ / Όλα είναι αρνητικά, εκτός TenK
t1 = 4 * α4?
Ones = A0 - t1 - 20?
t2 = 2 * a1?
Δεκάδες = t1 t2 - 198?
τ3 = 2 * a2?
Hund = A3 t3 - 140?
t3 = t3 * 2? / / τώρα = 4 * A2
t2 = t2 * 2? / / τώρα = 4 * a1
Ones = Ones - t3 - t2?
t3 = t3 Α2 Α2? / / τώρα = 6 * α2
Δεκάδες = Δεκάδες T3? / / Δεκάδες γίνει
t1 = t1 A4? / / τώρα = 5 * α4
Hund = Hund t1?
τ3 = 4 * A3?
Εσύ = t1 t3 - 144? / / Thou γίνει
Ones = Ones - T3? / / Ones γίνει
TenK = T1 A4 16? / / Tenk γίνει

/ / "Ομαλοποίηση" τα ψηφία - αυτός ο κώδικας ASM ήταν
/ / Αντιγραφή απευθείας από το πρωτότυπο
# ASM
movlw 0x0A
LB1:
addwf Ones, στ
Δεκάδες decf, στ
btfss 3,0
LB1 goto
Lb2:
Δεκάδες addwf, στ
decf Hund, στ
btfss 3,0
Lb2 goto
Lb3:
addwf Hund, στ
decf Thou, στ
btfss 3,0
Lb3 goto
LB4:
addwf Thou, στ
decf TenK, στ
btfss 3,0
LB4 goto
# endasm
)

 
ανεβάστε το εγχειρίδιο του Scott Mackenzie

 
Ίσως αυτό σας βοηθάει.unsigned Chae rez [3]?void Bin_BCD_18 (int val)

(Rez [0] = (val% 1000) / 100?

Rez [1] = (val% 100) / 10?

Rez [2] = val% 10?)
 
γεια,

ακόλουθο πρόγραμμα είναι για PIC16F877 για το δυαδικό ψηφίο για 4 BCDvoid bin2bcd1 (void)
(
unsigned char Α1, Α2, Α3, β = 10?

digi1 =% value β?
a1 = value/10?

digi2 = a1% b?
a2 = a1 / b?

digi3 = a2% b?
a3 = a2 / b?

digi4 = a3% b?)

 

Welcome to EDABoard.com

Sponsor

Back
Top