Avatar billede burningice Nybegynder
26. november 2003 - 11:50 Der er 6 kommentarer og
1 løsning

Assembler til PIC16F84

Jeg sidder og leger med en flowmåler jeg er ved at lave i elektronik, og skal have skrevet nogle tal ud på et display der består af 3 7-segmentsdisplay.

Disse styres af en 4511-chip, og jeg kan derfor bare sende tal mellem 0-9 i binært ud til den og den sørger for at tallet vises på mit display. Jeg har dog et lille problem, som er ved at drive mig til vanvid.

Da jeg kun kan bestemme hvad der skal stå på et enkelt display, skal jeg på en eller anden måde have delt mit tal op i antal 100'er, antal 10'ere og antal 1'ere, da jeg jo ellers ikke vil kunne skrive f.eks. tallet 145. Jeg har derfor 4 variabler, en til at indeholde det "rå" tal, og en til til hver af de tre displays (100'er, 10'ere og 1'ere). Nu mangler jeg bare en rutine der kan splitte mit rå tal op i disse tre mindre stykker.

Da jeg ikke er en kæmpe haj til assembler ville det være dejligt om der evt. var nogen der havde noget liggende der kunne bruges, eller kunne hjælpe mig lidt :)
Avatar billede stefanfuglsang Juniormester
26. november 2003 - 12:07 #1
Jeg kan ikke PIC16-assembler, men strukturen må være

flyt råtal til register1
divider register1 med 10
flyt rest-værdi  til ciffer1
divider register1 med 10
flyt rest-værdi  til ciffer10
divider register1 med 10
flyt rest-værdi  til ciffer100

Du kan finde de rigtige instruktioner og registre i din manual. Der er formentlig en MOV-instruktion og en DIV, som giver helttal og rest i to forskellige registre ved division med en konstant
Avatar billede stefanfuglsang Juniormester
26. november 2003 - 12:12 #2
Der skal stå

flyt heltal til ciffer100

i stedet for de to linier til sidst:

divider register1 med 10
flyt rest-værdi  til ciffer100
Avatar billede stefanfuglsang Juniormester
26. november 2003 - 12:18 #3
eksempel med tal:
råtal er 123

flyt råtal til register1 ; register1 er 123
divider register1 med 10; register1 er 12, rest-register er 3
flyt rest-værdi til ciffer1; ciffer1 er 3
divider register1 med 10; register1 er 1, rest-register er 2
flyt rest-værdi til ciffer10; ciffer10 er 2
flyt register1 til ciffer100; ciffer100 er 1

Idet heltals-registeret selvfølglig er register1, det havde jeg ikke skrevet i det oprindelige.
Avatar billede burningice Nybegynder
26. november 2003 - 12:39 #4
der er desværre ikke nogen dividere (eller gange).. der er lægge til og trække fra... jeg vil dog kigge lidt på det
Avatar billede stefanfuglsang Juniormester
26. november 2003 - 14:07 #5
Måske er der en form for BCD-konvertering (dvs. et ciffer fylder en halv byte = fire bit)?
Avatar billede stefanfuglsang Juniormester
26. november 2003 - 14:29 #6
Nej , der skal noget andet til, instruktionssættet er for lille, se 
8 bit binary to decimal conversion routine for LCD output, stringent for any numeric display output or interaction.
http://www.electronic-engineering.ch/microchip/modules/modules.html
Avatar billede burningice Nybegynder
11. december 2003 - 12:51 #7
well... den  bit binary to decimal conversion routine for LCD output, kunne bruges med lidt modficering, så det var lige som det skulle være :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester