Μετατροπή σε hex bcd στη γ

E

erodeboy

Guest
πώς να μετατρέψετε μια δεκαεξαδική τιμή για bcd χρησιμοποιώντας Keil γ

 
Salam,

Δεν αναφέρατε ποια είναι η διάρκεια της hex 8 bit, 16 bit ... κλπ.

Εντάξει εδώ είναι μια απλή μέθοδος για να μετατρέψετε hex (8bit) να BCD

Ένας περιορισμός αυτής της μεθόδου είναι vaild FOT αριθμούς 0 - 99 μόνο.

για παράδειγμα, εάν θέλετε να μετατρέψετε 99 έως BCD

1 - διαίρεση 99 από 10
2 - θέσει το αποτέλεσμα της υψηλής ροκανίζω της μεταβλητής αποτέλεσμα
3 - που την υπενθύμιση στο χαμηλό ροκανίζω της μεταβλητής αποτέλεσμα

Αυτή η μέθοδος είναι πολύ εύκολο να υλοποιηθεί σε C όπως αυτό

Κωδικός:

unsigned char hex2bcd (unsigned char x)

(

unsigned char y?

y = (x / 10) <<4?

y = y | (x% 10)?

return (y)?

)
 
Παράθεση:

Από fmayr (at) electronic.tu-graz.ac.at Thu Feb 6 10:24:30 1997

Ημερομηνία: Wed, 05 Feb 1997 15:36:00 0100

Από: Friedrich Mayr <fmayr(at)electronic.tu-graz.ac.at>

Προς: 8051code (at) keil.com

Θέμα: Fast LONG να BCD μετατροπήςΗ λειτουργία αυτή γράφτηκε μέσα από το περιβάλλον Keil C51

από τον Δρ Roehrer (Inst. στ. Elektronik, TU-Graz) και εμένα

που θα καλείται από ένα C - Πρόγραμμα όπως: "άκυρη bin2bcd (void)"Τα ακόλουθα συνολικά μεταβλητή (πρέπει να βρίσκεται στο

εσωτερική μνήμη RAM του επεξεργαστή, "δεδομένα" ή "idata") είναι

χρησιμοποιείται τόσο για να περάσει το επιχείρημα (μια "μεγάλη" τιμή) για το

λειτουργία, καθώς και να λαμβάνει το αποτέλεσμα (6 ψηφία):ένωσης

(

unsigned char buf [6]?

καιρό σε?

) Idata U_b?Ο σκοπός του κώδικα είναι να μετατρέψει μια υπογεγραμμένη μεγάλη αξία

να BCD - κώδικα με αποτέλεσμα υπογράψει αν χρειαστεί.
Τιμές υπερβαίνουν

το φάσμα των 6 (-: 5) ψηφία πρέπει όλοι να εμφανίζονται με «-».

Η χρήση της μνήμης ήταν κρίσιμη, διότι δεν έχουν εξωτερικά RAM είναι

υπάρχουν στο σύστημα, ώστε μόνο η Accu, B, R1, R2, R3, R4

χρησιμοποιούνται κατά μέρος της ψηφίο-(και το επιχείρημα-) απομόνωσης "U_b".Το τέχνασμα που εφαρμόζεται στη λειτουργία είναι να χρησιμοποιήσετε

"μικρό" (ροκανίζω από ροκανίζω) διαίρεση και την εκτεταμένη

χρήση του '51 - opcodes XCHD και SWAP.

Αυτό οδηγεί σε πολύ γρήγορη εκτέλεση.

Η λειτουργία μπορεί εύκολα να τροποποιηθεί για παράδειγμα

σε χρόνο-υπολογισμούς ή να επεκταθεί στο πλήρες "μεγάλο"

εύρος.
 
/ / Pass εισόδου 8 bit BCD μορφή και το μήκος μετατροπής, και να πάρετε πίσω hex αξίες
/ / Buffer στην έξοδο.
void Bcd_To_Hex (unsigned char * Input_Buff, unsigned char * Output_Buff, unsigned char Len)
(/ / Από Neeraj Verma: neeraj.niet (at) gmail.com
unsigned char i, j?
for (i = 0, j = 0? i <Len? i , j )
(If ((i 1)> = LEN)
(
if (* (Input_Buff Len-1-i)> 0x40)
* (Output_Buff ι) = (* (Input_Buff Len-1-i)-0x37)?
άλλος
* (Output_Buff ι) = (* (Input_Buff Len-1-i)-0x30)?
)
άλλος
(
if (* (Input_Buff Len-1-i)> 0x40)
(If (* (Input_Buff Len-2-i)> 0x40)
(
* (Output_Buff ι) = ((* (Input_Buff Len-i-2)-0x37) <<4) | (* (Input_Buff Len-1-i)-0x37)?
)
άλλος
(
* (Output_Buff ι) = ((* (Input_Buff Len-i-2)-0x30) <<4) | (* (Input_Buff Len-1-i)-0x37)?
)
)
άλλος
(If (* (Input_Buff Len-2-i)> 0x40)
(
* (Output_Buff ι) = ((* (Input_Buff Len-i-2)-0x37) <<4) | (* (Input_Buff Len-1-i)-0x30)?
)
άλλος
(
* (Output_Buff ι) = ((* (Input_Buff Len-i-2)-0x30) <<4) | (* (Input_Buff Len-1-i)-0x30)?
)
)
)
i ?
)
)

 
/ * Πρωτότυπο * /
void Hex2Decimal (unsigned long num)?

/ * Hex Variable σε κάθε μητρώο * /
unsigned long num = 0x499602D2? / * 1234567890 * /

int main (void)
(
Hex2Decimal (num)? / * Μετατροπή δοθεί hex να δεκαδικά ψηφία * /

return 1? / * Καλή C!, δεν απαιτείται * /
)

/ * Λειτουργία * /

/ * Μετατρέπει ένα ανυπόγραφο availabe αριθμό hex στο μικρο μητρώα για να δεκαδικά ψηφία
και αποθηκεύει τα δεκαδικά ψηφία σε μια σειρά * /
void Hex2Decimal (unsigned long num)
(
unsigned char αξία [10]?
unsigned char i = 0?

ενώ NUM> (0)
(
τιμή = num% 10?
num / = 10?
i = i 1?
)
)

 

Welcome to EDABoard.com

Sponsor

Back
Top