$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 (BMT_MI.A51) ;------------------------------------------------------------------------ ;Programmbeschreibung ;------------------------------------------------------------------------ ;Programm: ;Falls T1 betätigt -> wird 500ms-Umschalte-Takt erzeugt ;Loesung mit Interrupts - Ereignisgesteuert ;Datum: 22.11.2004 ;Programmiert: J. Walter (-1 Punkt) ; ;Verwendete Einspruenge: keine ; ;Verwendete Unterprogramme: keine ; ; ;Verwendete Register und Variable: ;Registerbank(0) ;R2 ; ;Kommentar: ; ;Aenderungen: ;Datum: ; ; ;------------------------------------------------------------------------ ;Initialisierungsteil für allgemeine Konstanten ;------------------------------------------------------------------------ CSEG AT 0H ;Legt absolute Codesegmentadresse auf 0h jmp INIT ; ;------------------------------------------------------------------------ ;Interrupt-Vektoren ;------------------------------------------------------------------------ ORG 002BH ;Interrupt-Vektor T2 clr TF2 ;Flag erkannt call ISR_T2 ;Rufe Interrupt-Service-Routine auf reti ;------------------------------------------------------------------------ ;Initialisierungsteil für On-Chip Peripherie ;------------------------------------------------------------------------ ORG 100H ;Programmstart bei 100H INIT: ;------------------------------------------------------------------------ ;TIMER_2 Programmierung ;------------------------------------------------------------------------ setb T2R1 ;Automatisches Wiederladen T2 mov CRCL,#0B0h ;Reloadregister 15536 3CB0h mov CRCH,#3Ch ; mov TL2,#0B0h ;Timer2 laden mov TH2,#3Ch ; clr TF2 ;Ueberlaufflag zuruecksetzen ;------------------------------------------------------------------------ ;Interrupt Programmierung ;------------------------------------------------------------------------ setb EAL ;Allgemeine Interrupt-Freigabe setb ET2 ;Timer_2 spezielle Interrupt-Freigabe ;------------------------------------------------------------------------ ;Programmschleife ;------------------------------------------------------------------------ ABFRAGE: jnb P1.1,TIMER_50MS ;Taste 1 betätigt? jnb P1.2,TIMER_AUS ;Taste 2 betaetigt? jmp ABFRAGE ;------------------------------------------------------------------------ ;Takt mit 0,5s wird erzeugt T=1s ;------------------------------------------------------------------------ TIMER_AUS: clr T2I0 ;Timer 2 zaehlt nicht mehr setb P1.2 ;Bit zuruecksetzen jmp ABFRAGE TIMER_50MS: setb T2I0 ;Los-Zeitgeberbetrieb mov R2,#10 ;Initialisiere 10*50ms setb P1.1 ;P1.1 auf "1" jmp ABFRAGE ;------------------------------------------------------------------------ ;Interrupt-Service Routine Timer 2 ;------------------------------------------------------------------------ ISR_T2: djnz R2,SCHLEIFE_1 ;10 Mal? cpl P3.2 ;Komplementiere mov R2,#10 ;R2 neu laden SCHLEIFE_1: ret ;Unterprogramm beenden end