$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 (BZ.A51) ;------------------------------------------------------------------------ ;Programmbeschreibung ;------------------------------------------------------------------------ ; ;Programm: Zaehlprogramm + Blinkprogramm 2s Periode ;Interrupt mit Timer2 und 50ms CRC ;Betaetigung Taster 1: Programm startet ;Betaetigung Taster 2: Ende ; ;Programmiert: J. Walter ; ;Verwendete Einspruenge: keine ; ;Verwendete Unterprogramme: keine ; ; ;Verwendete Register und Variable: ;Registerbank(0) ;R3 Zaehlregister für Zeit 20*50ms ;R2 Zaehlregister für Anzeige ;Kommentar: ;Aenderungen: Anpassung auf KEIL ;Datum:3.1.2004 ; ; ;------------------------------------------------------------------------ ;Initialisierungsteil für allgemeine Konstanten ;------------------------------------------------------------------------ V_BLINK EQU 20 ;Blinkfrequenz 20 Dezimal PERIODE_L EQU 0B0h ;Low Byte von Compare Reload Capture PERIODE_H EQU 3Ch ;High Byte von Compare Reload Capture CSEG AT 0H ;Legt absolute Codesegmentadresse auf 0h jmp INIT ; ;------------------------------------------------------------------------ ;Interrupt-Vektoren ;------------------------------------------------------------------------ org 2Bh ;Sprungmarke zur ISR fuer Timer0 TIME_INT_2: ;ISR fuer Timer0 (Adresse 0Bh) clr TF2 call TIMER2_ISR ;Aufruf: UP Schleife reti ;------------------------------------------------------------------------ ;Initialisierungsteil für On-Chip Peripherie ;------------------------------------------------------------------------ ORG 100H ;Programmstart bei 100H INIT: setb P3.2 ;Lampen ausschalten setb P3.3 setb P3.4 mov R3,#V_BLINK ;R3 Zaehlvaruable fuer Interrupts mov R2,#0 ;R2 Zaehlariable fuer Anzeige setb EAL ;Generelle Interrupt Freigabe setb ET2 ;Timer 2 Interruptsfreigabe mov T2CON,#00010000B ;Timer2 Einstellung:Timer mit f=f(osz)/12 ;Mode 0 ->Reload bei Ueberlauf mov CRCL,#PERIODE_L ;Low Byte von Compare Reload Capture mov CRCH,#PERIODE_H ;High Byte von Compare Reload Capture mov TL2,#PERIODE_L ;Timer 2 laden mov TH2,#PERIODE_H ;------------------------------------------------------------------------ ;Programmschleife ;------------------------------------------------------------------------ ABFRAGE: jnb P1.1,BLINKEN jnb P1.2,ENDE ajmp ABFRAGE BLINKEN: setb T2I0 ;Timer2 zaehlt ajmp ABFRAGE ;Springe zur Adresse ABFRAGE ENDE: clr T2R0 ;Timer0 ausschalten setb P3.2 ;Lichter ausschalten setb P3.3 setb P3.4 ajmp ABFRAGE ;Springe zur Adresse ABFRAGE TIMER2_ISR: djnz R3,SPRUNG ;Sprung falls R3 noch nicht 0 ANZEIGE: inc R2 ;R2 inkrementieren mov A,R2 ;In Akku schieben cpl A ;invertieren rrc A ;über Carry rotieren mov P3.2,C ;Bit 0 auf P3.2 kopieren rrc A mov P3.3,C ;Bit 1 auf P3.3 kopieren rrc A mov P3.4,C ;Bit 2 auf P3.4 kopieren mov R3,#V_BLINK ;Register 3 erhaelt wieder den Wert V_BLINK SPRUNG: ret end