Created
January 31, 2012 12:03
-
-
Save fenrig/1710139 to your computer and use it in GitHub Desktop.
versie1
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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
;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