Mit problem er at jeg har en værdi (16 bit) som skal skrives ud på et Lcd
Jeg kender to måder man kan løse dette problem på, den ene er med division med 10, den anden er hvor man laver en form for tæller som deler værdierne ud på de 5 pladser.
Problemet er at begge metoder er tids krævende og jeg har ikke den tid til rådighed, så det jeg søger er en simpel og hurtig rutine til at konverterer fra hex til "dec" .Det skal siges at jeg bruger en pic16f877 så det med at divider tager 225 IC
Jeg ved at det kan være svært at give en form for hint når man ikke kender koden men jeg ville lige prøve
På forhånd tak
S. Jensen
Didn't find your answer? Ask the community — no account required.
T
Thias Russell
Davs Søren.
De kunne evt. lave en trabvel med værdien for hver bit. og lade PIC kredsen finde ud af om hvilke bit der er aktive og derved lægge dem sammen. Men det kommer jo an på hvordan Deres resultat skulle se ud. Men det er en idé. og ret simple at programmere.
Med venlig hilsen Thias Russell
"Søren" skrev i en meddelelse news:XGfOa.3776$ snipped-for-privacy@news.getnet.dk...
konverterer
T
Thomas Lykkeberg
Jeg er ikke helt klar over om det er denne metode du nævner som den anden du kender, men her er den alligevel.
const unsigned short digitWeight[] = {1,10,100,1000,10000}; unsigned char currentDigit; unsigned short value = 46527; unsigned char digit = 5;
divlow EQU 0x14 ; used for 16bit calculating divhigh EQU 0x15 ; used for 16bit calculating
;********************************************************************** add16 ; add a 16 bit value divhigh,divlow movf divlow, w ; to tmr0high,tmr0low addwf tmr0low, f ; movf divhigh, w ; btfsc STATUS, C ; incfsz divhigh, W ; addwf tmr0high, f ; Carry Set on overflow return ; ;********************************************************************** sub16 ; subtract a 16 bit value divhigh,divlow movf divlow, w ; from tmr0high,tmr0low subwf tmr0low, f ; movf divhigh, w ; btfss STATUS, C ; incfsz divhigh, W ; subwf tmr0high, f ; Carry Clear on overflow return ; ;********************************************************************** bin2bcd ; converts 16bit number to 4 bcd values clrf digit1000 ; init digits clrf digit100 ; clrf digit10 ; clrf digit1 ;
det ser pænere ud i MPLAB. jeg har ikke regnet på tiden, men den er også afhængig af værdien på det binære tal.
- patrick
H
HKJ
[snip PIC kode]
Jeps, men jeg ville ikke prøve at formulere det i PIC assembler.
Nogen grund til at bruge sub16 her?
P
Patrick Hayes
hvis du siger at det skal gå hurtigt, hvorfor så ikke bruge assembler?
nemmere/dovenskab - denne del af koden er ikke tidskrittisk.
- patrick
H
HKJ
Jeg har ikke modsat mig assembler, jeg skriver bare ikke i PIC assembler og jeg tror ikke min tilsvarende routine i AVR assembler ville være et godt eksempel, når der spørges efter routiner til PIC. Pseudo koden er noget lettere at læse end en ukendt assembler.
S
Søren
mange tak for hjælpen, jeg fandt en metode en hvor man divider med 10000,
1000, 100, 10 og 1 det var den hurtigste måde jeg kunne gøre det på.
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.