Skip to content

Instantly share code, notes, and snippets.

@fenrig
Created January 31, 2012 12:03
Show Gist options
  • Save fenrig/1710139 to your computer and use it in GitHub Desktop.
Save fenrig/1710139 to your computer and use it in GitHub Desktop.
versie1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Dries Darquennes & Matthias Van Gestel & Dries Goossens
;Lessius Campus Denayer - 1PBEII
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;OPMERKINGEN:
; ! Steunt op de xcez1.inc file (c) van Marc Roggemans
; ! Deze file moet ge-include worden BOVEN de xcez1.inc file
; ! Dit is gemaakt door lln in het eerste jaar die nog nooit
; assembly gebruikt hebben, gebruik van deze file is niet aan te raden
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;FUNCTIES:
;---------
;ADC:
; ADCconv
;ASCII:
; ascii5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;ADCconv:
; a en b moeten gevuld zijn als parameters ;-)
; a en b worden verandert tegen het einde van de functie
; dus kunnen ze niet worden herbruikt
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ADCconv:
push 20h ;R1 bewaren zodat het hoofdprogramma niet gestoord wordt
clr c ;CarrierFlag clearen
mov 20h,#05h ;De lus moet 5x worden uitgevoerd om het gewenste resultaat te bekomen (zie schema)
anl b,#11000000b ;In het B register moeten de 6 laatste bits op 0 gezet worden
ADCconvlus:
xch a,b ;wissel a en b om --> dit is nodig omdat de rotate (with carrier) enkel op de accu werkt
rlc a ;Rotate left with carrier (zie condensed)
djnz 20h,ADCconvlus ;1) R1 - 1 2) Als R1 niet nul is moet er worden gesprongen naar ADCconvlus
pop 20h ;R1 terug herstellen
ret ;terugkeren naar het hoofdprogramma
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;ascii5:
; ROUTINE GEBRUIKT R0,R1,R2(msb) en PSW
; DE ACC WORDT GEPUSHED EN GEPOPPED
; EERST WORD MET ASCII1 HET EERSTE DEEL VAN HET 16 BIT GETAL INGELEZEN
; DAARNA VERMENINGVULDIGD MET 10 000 OM LATER OP TE TELLEN
; DAN WORD ASCII4 GEBRUIKT OM DE 4 LAAGSTE BYTES UIT TE LEZEN
; WORDEN OMGEZET NAAR HEXADECIMALE WAARDEN EN OPGETELD BIJ HET TIENDUIZENDTAL
; ------
; Invoer is R0 met het startadres van de buffer
; !!OPGELET!!: UITKOMST STAAT IN HEXADECIMALE WAARDEN
; Uitkomst in R2,R1,R0 (R2 = MSB)
; Als de carry flag 1 is dan is de conversie niet gelukt
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ascii5:
push acc ;push van accu
mov a,r7 ;r7 pushen
push acc
;Conversie
; Stap1
mov a,r0 ;Kopie maken van r0 in r7
mov r7,a
lcall ascii1 ;MSB converteren
jc ascii5fout1 ;Als Carrier gezet is is er waarschijnlijk een fout gebeurd
mov r0,a ;Klaarmaken voor mul16
mov r1,#00h ;R1 vullen met 0
mov r2,#10h ;Vullen met 10 000
mov r3,#27h
lcall mul16
mov a,r1
push acc ;R1 en R2 eventjes bewaren
mov a,r0
push acc
; Stap2
inc r7 ;Start adres van rest van buffer in orde maken
mov a,r7 ;rest van het getal uit buffer halen
mov r0,a
lcall ascii4
jc ascii5fout2 ;Als Carrier gezet is is er waarschijnlijk een fout gebeurd
mov r0,dpl
mov r1,dph
lcall bcdhex16 ;Naar hex converteren
pop acc
mov r2,a
pop acc
mov r3,a
lcall add16 ;Gehele getal optellen en dus opbouwen
eindeascii5:
pop acc
mov r7,a
pop acc
ret
ascii5fout1:
ljmp eindeascii5
ascii5fout2:
pop acc
pop acc
ljmp ascii5fout1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment