Created
December 4, 2013 16:53
-
-
Save powerswitch/7791097 to your computer and use it in GitHub Desktop.
Assembler-Code für Temperaturabhängige Lüftersteuerung
This file contains hidden or 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
#! mrasm ; Kennung für den Assembler | |
.ORG 0 ; Adresse auf Null setzen | |
LD SP,0xF0 ; Stackpointer setzen | |
; ********************* | |
; * Hauptprogramm zur Lüftersteuerung | |
; ********************* | |
MAINLOOP: | |
CALL TEMPERATURE ; Unterprogramm aufrufen | |
ST (0xFF),R0 ; R0 auf Output-Register schreiben | |
ST (0xFA),R0 ; R0 auf serielle Schnittstelle schreiben | |
; Messwert < (0xFF) | |
LD R1,(0xFF) ; R1 mit (0xFF) laden | |
SUB R1,R0 ; R1 = R1 - R0 | |
JNC LOWER ; GOTO LOWER, wenn Messwert < (0xFF) | |
; Messwert > (0xFE) | |
LD R1, (0xFE) ; R1 mit (0xFE) laden | |
SUB R1,R0 ; R1 = R1 - R0 | |
JNS HIGHER ; GOTO HIGHER, wenn Messwert < (0xFF) | |
; Messwert dazwischen | |
MOV (0xF0),(0xFD) ; (0xFD) auf (0xF0) schreiben | |
JMP MAINLOOP ; Endlosschleife | |
LOWER: | |
LD (0xF0),0 ; 0 auf (0xF0) schreiben | |
JMP MAINLOOP ; Endlosschleife | |
HIGHER: | |
MOV (0xF0),(0xFC) ; (0xFC) auf (0xF0) schreiben | |
JMP MAINLOOP ; Endlosschleife | |
; ********************* | |
; * Unterprogramm zum Bestimmen der Temperatur | |
; ********************* | |
TEMPERATURE: | |
CLR R0 ; R0 wird geleert | |
LD R1,127 ; Die Maske R1 wird auf 10000000 gesetzt | |
COMPTEMP: | |
ADD R0,R1 ; Probehalber Maske R1 auf R0 addieren | |
ST (0xF1),R0 ; R0 an Komparator F1 senden | |
PUSH R1 ; Maske R1 auf den Stapel legen | |
LD R1,(0xF1) ; Aus Komparator einlesen | |
AND R1,8 ; Nur Bit 4 aus R1 behalten | |
POP R1 ; Maske R1 aus Stapel holen | |
JZC KEEPMASK ; GOTO KEEPMASK, wenn Zeroflag nicht gesetzt ist | |
SUB R0,R1 ; Maske R1 von R0 abziehen | |
KEEPMASK: | |
LSR R1 ; Maske verschieben | |
JCC CORETEMP ; GOTO CORETEMP, wenn Maske nicht leer ist | |
RET ; Zurückkehren |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment