Created
February 1, 2012 12:43
-
-
Save fenrig/1716846 to your computer and use it in GitHub Desktop.
zie dees
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;START | |
org 000h | |
mov sp,#7Fh ;stackpointer | |
;INITS | |
lcall initlcd ;lcd klaarzetten voor gebruik | |
lcall initsio ;seriele communicatie | |
lcall initleds ;leds als output | |
;Bodycode | |
mov dptr,#Initialisatie ;adress bericht in dptr | |
lcall siooutmsga ;berichtje tonen | |
mov a,#20h ; | |
lcall delaya0k05s ;second wachten | |
main: | |
mov a,#00ch | |
lcall siooutchar ;form feed,new page | |
mov dptr,#Prompt ; | |
lcall siooutmsga ;volgend bericht tonen | |
lcall sioinbufa ;lees en blijf wachten op enter | |
mov r0,#54h ;startadress buffer laden,indirecte adressering | |
lcall ascii4 ;ASCII4 ZET DE 4 ASCII KARAKTERS @R0 TOT @[R0+3] OM IN EEN HEX GETAL IN DE DATAPOINTER. | |
jc fout ;als de carry is geset fout opgetreden, spring naar fout | |
mov a,dpl ;laagste 8 bit | |
mov r0,a ;laagste 8 bit bewaren in r0 | |
mov p3_data,a ;sturen naar de leds | |
mov a,dph ;hoogste 8 bit | |
mov r1,a ;hoogste 8 bit bewaren in r1 | |
lcall bcdhex16 ;eerste 16 bit getal is nu omgezet naar hex | |
;we moeten dit ff bewaren( op de stack zetten,r1,r2) | |
;want eerst tweede 16 bit getal omzetten en gebruikt dezelfde registers | |
mov a,r0 ;r0 ff in accu zetten voor volgende | |
push acc ;kopietje maken van r0 | |
mov a,r1 ;r1 ff in accu zetten voor volgende | |
push acc ;kopietje maken van r1 | |
mov r0,#58h ;adress van het 'teken' in r0 laden | |
mov a,@r0 ;lees waarde in accu | |
mov r7,a ;het teken bewaren we in r7 | |
mov r0,#59h ;nu gaan we het tweede 16 bit getal uit buffer lezen | |
lcall ascii4 | |
jc fout ;als carry is geset fout bij omzetting | |
mov a,dpl ;laagste 8 van tweede getal | |
mov r0,a ;laagste 8 van tweede getal kopieren naar r0 | |
mov p3_data,a ;naar de leds sturen | |
mov a,dph ;hoogste 8 bit van tweede getal | |
mov r1,a ;hoogste 8 bit van tweede getal naar r1 | |
lcall bcdhex16 ; input: r1,r0 = 16 bit bcd getal (r1=msb) | |
; output: r1,r0 = 16 bit hex getal (r1=msb) | |
;ok nu zijn de twee 16 bit bcd getallen omgezet naar hex | |
mov a,r0 ;we gaan de de laagste 8 bit van het tweede getal naar r2 kopieren | |
mov r2,a ;ok in orde | |
mov a,r1 ; nu de hoogste 8 bit van van het tweede getal naar r3 | |
mov r3,a ;ok gelukt | |
pop acc ;nu zullen we de waarde van ons eerste 16 bit getal terug van de stack halen | |
mov r1,a ;hoogste 8 bit van eerste getal naar r1 | |
pop acc ;stack leegmaken | |
mov r0,a ;laagste 8 bit van eerste getal naar r0 | |
;ok eerste getal staat in r0,r1 en tweede getal staat nu in r3,r2 in hex | |
mov a,dpl ; | |
mov r2,a ; | |
mov a,dph ;dit stukje snap ik niet , de twee 16 bit getallen staan toch al in hex en in juiste registers? | |
mov r3,a ; | |
cjne r7,#'+',min | |
lcall add16 | |
ljmp print | |
min: | |
cjne r7,#'-',maal | |
lcall sub16 | |
ljmp print | |
maal: | |
cjne r7,#'*',delen | |
lcall mul16 | |
ljmp print | |
delen: | |
cjne r7,#'/',fout | |
lcall div16 | |
mov a,r2 | |
mov r0,a | |
mov a,r3 | |
mov r1,a | |
mov r2,#00h | |
ljmp print | |
fout: ;verkeerde ingave | |
mov dptr,#ErrorNumber | |
lcall siooutmsga | |
ljmp main | |
print: | |
mov a,#80h | |
lcall bcdhex16 | |
lcall lcdoutchar | |
mov a,r2 | |
lcall lcdoutbyte | |
mov a,r1 | |
lcall lcdoutbyte | |
mov a,r0 | |
lcall lcdoutbyte | |
ljmp main | |
Initialisatie: db "Seriële Connectie is geinitialiseerd! ",000h | |
Prompt: db 0Dh,"[root@xc8888-µc ~] ",000h | |
ErrorNumber: db 0Dh,"U heeft een foutieve waarde ingegeven!",000h | |
#include "c:\xcez2.inc" | |
#include "c:\xcez1.inc" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment