Skip to content

Instantly share code, notes, and snippets.

@powerswitch
Created December 4, 2013 16:53
Show Gist options
  • Save powerswitch/7791097 to your computer and use it in GitHub Desktop.
Save powerswitch/7791097 to your computer and use it in GitHub Desktop.
Assembler-Code für Temperaturabhängige Lüftersteuerung
#! 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