[ CarGovedar @ 27.06.2004. 15:23 ] @
Jeli moze neko da mi malo opsirnije objasni sta tacno radi ovaj Source-Code? 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 ;----------------------------------------------------------------------------- |