Skip to content

Instantly share code, notes, and snippets.

@fenrig
Created February 1, 2012 10:44
Show Gist options
  • Save fenrig/1716440 to your computer and use it in GitHub Desktop.
Save fenrig/1716440 to your computer and use it in GitHub Desktop.
ier domme :p
;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