Code:
;-----------------------------------------------------------------------------
$SAVE
$NOLIST
Px equ P4
LED1 equ P6
LED2 equ P5
RESET bit P3.7
HALF bit P3.6
NCLK bit P3.5
CLKW bit P3.4
CONTROL bit P3.1
ENABLE bit P3.0
$RESTORE
;-----------------------------------------------------------------------------
$INCLUDE (..\reg517aw.inc)
$INCLUDE (deklaration.inc)
Name Main ;Programmname
extrn code(Start_Tastatur)
extrn code(start_hp)
extrn code(STARTmotor)
extrn code(Zeile)
PROG SEGMENT CODE
; Dient der Speicherreservierung des Hauptprogramms
CSEG AT 0000H
LJMP MAIN ;Sprung ins Hauptprogramm
RSEG PROG ; Nachfolgende Befehle stehen im Programmsegment PROG ; Adresse wird vom Linker automatisch vergeben!
;-----------------------------------------------------------------------------
MAIN:
SETB NCLK ; Clockleitung auf 1
CLR RESET ; L297 Reset
CLR HALF ; Halbschritt aus
SETB CLKW ; Rechtsherum
SETB CONTROL ; ABCD-Betrieb
SETB RESET ; L297 Reset
LJMP Start_Main
Start_Main:
lcall Start_Tastatur
lcall start_hp
LJMP Start_Main
END
;-----------------------------------------------------------------------------
$INCLUDE (..\reg517aw.inc)
$INCLUDE (deklaration.inc)
Name Tastatur
public Start_Tastatur
PROG SEGMENT CODE ; Dient der Speicherreservierung des
;Hauptprogramms
LJMP Start_Tastatur ;Sprung ins Hauptprogramm
RSEG PROG
; Nachfolgende Befehle stehen im
;Programmsegment PROG
MOV LED1,#00000000B
MOV LED2,#00000000B ; Adresse wird vom Linker automatisch vergeben!
;Start Tastaturprogramm
Start_Tastatur:
MOV Px,#11111111B
;-----------------------------------Zeile 1 abfragen
MOV Px,#11001111B ; BITMUSTER FÜR ERSTE ZEILE
MOV A,Px
;Spaltenabfrage
CJNE A,#11000100B,weiter1 ; PRÜFEN AUF TASTE 1
MOV LED1,#00000001B
weiter1:
CJNE A,#11000011B,weiter2 ; PRUFEN AUF TASTE 2
MOV LED1,#00000010B
weiter2:
CJNE A,#11000010B,Zeile2 ;PRÜFEN AUF TASTE 3
MOV LED1,#00000100B
Zeile2:
;-----------------------------------Zeile 2 abfragen
MOV Px,#10111111B ;BITMUSTER FÜR ZWEITE ZEILE
MOV A,Px
;Spaltenabfrage
CJNE A,#10110100B,weiter3 ;PRÜFEN AUF TASTE 4
MOV LED1,#00001000B
weiter3:
CJNE A,#10110011B,weiter4 ;PRÜFEN AUF TASTE 5
MOV LED1,#00010000B
weiter4:
CJNE A,#10110010B,Zeile3 ;PRÜFE NAUF TASTE 6
MOV LED1,#00100000B
Zeile3:
;----------------------------------Zeile 3 abfragen
MOV Px,#10101111B ;BITMUSTER FÜR DRITTE ZEILE
MOV A,Px
;Spaltenabfragen
CJNE A,#10100100B,weiter5 ;PRÜFEN AUF TASTE 7
MOV LED1,#01000000B
weiter5:
CJNE A,#10100011B,weiter6 ;PRÜFEN AUF TASTE 8
MOV LED1,#10000000B
weiter6:
CJNE A,#10100010B,Zeile4 ;PRÜFEN AUF TASTE 9
MOV LED2,#00000001B
Zeile4:
;----------------------------------Zeile 4 abfragen
MOV Px,#10011111B ;BITMUSTER FÜR VIERTE ZEILE
MOV A,Px
;Spaltenabfragen
CJNE A,#10010100B,weiter7 ;PRÜFEN AUF TASTE *
MOV LED2,#00000010B
weiter7:
CJNE A,#10010011B,weiter8 ;PRÜFEN AUF TASTE 0
MOV LED2,#00000100B
weiter8:
CJNE A,#10010010B,weiter9 ;PRÜFEN AUF TASTE #
MOV LED2,#00001000B
weiter9:
RET
END
;-----------------------------------------------------------------------------
$INCLUDE (..\reg517aw.inc)
$INCLUDE (deklaration.inc)
Name Torsteuerung ;Programmname
public STARTtor
PROG SEGMENT CODE ; Dient der Speicherreservierung des
;Hauptprogramms
LJMP STARTtor ;Sprung ins Hauptprogramm
RSEG PROG
;-----------------------------------------------------------------------------
STARTtor:
CLR NCLK ; Takt
LCALL WAIT ; Warte
SETB NCLK ; Takt rücksetzen
LCALL WAIT ; Warte
JMP STARTtor ; nächster Takt
WAIT:
marke1: mov R6,#001h ; Vorladen des Registers 6 100ms
marke2: mov R5,#010h ; Vorladen des Registers 5
marke3: mov R4,#064h ; Vorladen des Registers 4
marke4: djnz R4,marke4 ; innerste Schleife
djnz R5,marke3 ; mittlere Schleife
djnz R6,marke2 ; äußere Schleife
RET
END
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
$SAVE
$NOLIST
Px equ P4
LED1 equ P6
LED2 equ P5
RESET bit P3.7
HALF bit P3.6
NCLK bit P3.5
CLKW bit P3.4
CONTROL bit P3.1
ENABLE bit P3.0
$RESTORE
;-----------------------------------------------------------------------------
$INCLUDE (..\reg517aw.inc)
$INCLUDE (deklaration.inc)
Name Main ;Programmname
extrn code(Start_Tastatur)
extrn code(start_hp)
extrn code(STARTmotor)
extrn code(Zeile)
PROG SEGMENT CODE
; Dient der Speicherreservierung des Hauptprogramms
CSEG AT 0000H
LJMP MAIN ;Sprung ins Hauptprogramm
RSEG PROG ; Nachfolgende Befehle stehen im Programmsegment PROG ; Adresse wird vom Linker automatisch vergeben!
;-----------------------------------------------------------------------------
MAIN:
SETB NCLK ; Clockleitung auf 1
CLR RESET ; L297 Reset
CLR HALF ; Halbschritt aus
SETB CLKW ; Rechtsherum
SETB CONTROL ; ABCD-Betrieb
SETB RESET ; L297 Reset
LJMP Start_Main
Start_Main:
lcall Start_Tastatur
lcall start_hp
LJMP Start_Main
END
;-----------------------------------------------------------------------------
$INCLUDE (..\reg517aw.inc)
$INCLUDE (deklaration.inc)
Name Tastatur
public Start_Tastatur
PROG SEGMENT CODE ; Dient der Speicherreservierung des
;Hauptprogramms
LJMP Start_Tastatur ;Sprung ins Hauptprogramm
RSEG PROG
; Nachfolgende Befehle stehen im
;Programmsegment PROG
MOV LED1,#00000000B
MOV LED2,#00000000B ; Adresse wird vom Linker automatisch vergeben!
;Start Tastaturprogramm
Start_Tastatur:
MOV Px,#11111111B
;-----------------------------------Zeile 1 abfragen
MOV Px,#11001111B ; BITMUSTER FÜR ERSTE ZEILE
MOV A,Px
;Spaltenabfrage
CJNE A,#11000100B,weiter1 ; PRÜFEN AUF TASTE 1
MOV LED1,#00000001B
weiter1:
CJNE A,#11000011B,weiter2 ; PRUFEN AUF TASTE 2
MOV LED1,#00000010B
weiter2:
CJNE A,#11000010B,Zeile2 ;PRÜFEN AUF TASTE 3
MOV LED1,#00000100B
Zeile2:
;-----------------------------------Zeile 2 abfragen
MOV Px,#10111111B ;BITMUSTER FÜR ZWEITE ZEILE
MOV A,Px
;Spaltenabfrage
CJNE A,#10110100B,weiter3 ;PRÜFEN AUF TASTE 4
MOV LED1,#00001000B
weiter3:
CJNE A,#10110011B,weiter4 ;PRÜFEN AUF TASTE 5
MOV LED1,#00010000B
weiter4:
CJNE A,#10110010B,Zeile3 ;PRÜFE NAUF TASTE 6
MOV LED1,#00100000B
Zeile3:
;----------------------------------Zeile 3 abfragen
MOV Px,#10101111B ;BITMUSTER FÜR DRITTE ZEILE
MOV A,Px
;Spaltenabfragen
CJNE A,#10100100B,weiter5 ;PRÜFEN AUF TASTE 7
MOV LED1,#01000000B
weiter5:
CJNE A,#10100011B,weiter6 ;PRÜFEN AUF TASTE 8
MOV LED1,#10000000B
weiter6:
CJNE A,#10100010B,Zeile4 ;PRÜFEN AUF TASTE 9
MOV LED2,#00000001B
Zeile4:
;----------------------------------Zeile 4 abfragen
MOV Px,#10011111B ;BITMUSTER FÜR VIERTE ZEILE
MOV A,Px
;Spaltenabfragen
CJNE A,#10010100B,weiter7 ;PRÜFEN AUF TASTE *
MOV LED2,#00000010B
weiter7:
CJNE A,#10010011B,weiter8 ;PRÜFEN AUF TASTE 0
MOV LED2,#00000100B
weiter8:
CJNE A,#10010010B,weiter9 ;PRÜFEN AUF TASTE #
MOV LED2,#00001000B
weiter9:
RET
END
;-----------------------------------------------------------------------------
$INCLUDE (..\reg517aw.inc)
$INCLUDE (deklaration.inc)
Name Torsteuerung ;Programmname
public STARTtor
PROG SEGMENT CODE ; Dient der Speicherreservierung des
;Hauptprogramms
LJMP STARTtor ;Sprung ins Hauptprogramm
RSEG PROG
;-----------------------------------------------------------------------------
STARTtor:
CLR NCLK ; Takt
LCALL WAIT ; Warte
SETB NCLK ; Takt rücksetzen
LCALL WAIT ; Warte
JMP STARTtor ; nächster Takt
WAIT:
marke1: mov R6,#001h ; Vorladen des Registers 6 100ms
marke2: mov R5,#010h ; Vorladen des Registers 5
marke3: mov R4,#064h ; Vorladen des Registers 4
marke4: djnz R4,marke4 ; innerste Schleife
djnz R5,marke3 ; mittlere Schleife
djnz R6,marke2 ; äußere Schleife
RET
END
;-----------------------------------------------------------------------------