$nomod51 ;der Modus fuer 8051 wird abgeschaltet $debug $nolist ;es wird kein Listing fuer reg535 erstellt $include(reg535.pdf) ;die 80535-spezifischen Daten $list ;es wird ein Listing erstellt $ title (AUF_AB_MT.A51) ;------------------------------------------------------------------------ ;Programmbeschreibung ;------------------------------------------------------------------------ ;Programm: AUFWAERTS und ABWAERTS ZAEHLEN mit einem Tastendruck ; Test auf Hardware ; ;Datum: 01.01.2004 ;Programmiert: ; ;Verwendete Einspruenge: keine ; ;Verwendete Unterprogramme: keine ; ; ;Verwendete Register und Variable: ;Registerbank(0) ;R2 ; ;Kommentar: ; ;Aenderungen: ;Datum: 1.1.2004 ; ; ;------------------------------------------------------------------------ ;Initialisierungsteil für allgemeine Konstanten ;------------------------------------------------------------------------ ANFANGSW EQU 2 ;n ZAEHLW EQU 3 ;m CSEG AT 0H ;Legt absolute Codesegmentadresse auf 0h jmp INIT ; ;------------------------------------------------------------------------ ;Interrupt-Vektoren ;------------------------------------------------------------------------ ;------------------------------------------------------------------------ ;Initialisierungsteil für On-Chip Peripherie ;------------------------------------------------------------------------ ORG 100H ;Programmstart bei 100H INIT: mov R0,#ANFANGSW ;n initialisieren mov R1,#ZAEHLW ;m initialisieren setb F0 ;AUF-AB-FLAG ;------------------------------------------------------------------------ ;Programmschleife ;------------------------------------------------------------------------ ABFRAGE: jnb P1.1,ENTPRELL jmp ABFRAGE ENTPRELL: call WARTE_20ms ;Ist Taste 20ms betaetigt ZAEHL: jnb P1.1,ZAEHL ;Taste losgelassen? jnb F0,ABWAERTS call AUSGABE inc R0 ;Wert erhoehen djnz R1,WEITER_AUF cpl F0 mov R1,#ZAEHLW ;Zaehlwert neu laden WEITER_AUF: jmp ABFRAGE ABWAERTS: call AUSGABE dec R0 ;Wert erniedrigen djnz R1,WEITER_AB cpl F0 mov R1,#ZAEHLW ;Zaehlwert neu laden WEITER_AB: jmp ABFRAGE AUSGABE: mov A,R0 ;n = WERT cpl A rrc A ;Letztes Bit in Carry mov P3.2,C ;Carry auf P3.2 rrc A ;zweitletztes Bit in Carry mov P3.3,C rrc A mov P3.4,C ret ;zurück aus Subroutine WARTE_20ms: mov R3,#80 ;80*256Mikrosekunden ~ 20ms mov R2,#0 SCHLEIFE_A: SCHLEIFE_I: djnz R2,SCHLEIFE_I djnz R3,SCHLEIFE_A ret end