$debug ;Der Debugmodus wird ermöglicht $nomod51 ;Der 8051 Registersatz wird durch 535 ersetzbar $include(REG515.h) ;Der Registersatz des 80535-Controllers $ title (Prellz02) ;Titel des Programms ;------------------------------------------------------------------------ ;Programmbeschreibung ;------------------------------------------------------------------------ ;Programm: ; ;Misst die Impulse an P1.1 (VG - C13) ;Interrupt an P1.0 (VG - A13) löst Interrupt 3 aus ;Programmiert: J. Walter 30. Juli 2000 ; ;Verwendete Einspruenge: keine ; ;Verwendete Unterprogramme: keine ; ; ;Verwendete Register und Variable: ;Registerbank(0) ;R2 Zaehlvariable für Anzahl der Kontakte ; ;Kommentar: ; ;Aenderungen: ; ; ;------------------------------------------------------------------------ ;Initialisierungsteil für allgemeine Konstanten ;------------------------------------------------------------------------ ; CSEG AT 0H ;Legt absolute Codesegmentadresse auf 0h jmp ABFRAGE ;zur Abfrage springen ; ;------------------------------------------------------------------------ ;Interrupt-Vektoren ;------------------------------------------------------------------------ Org 53H ;Timer 2 Externer Interrupt 3 INT_EX3: call ISR_EX3 clr TF2 nop reti Org 5BH ;Timer 2 Externer Interrupt 4 INT_EX4: call ISR_EX4 clr TF2 nop ; reti ;------------------------------------------------------------------------ ;Initialisierungsteil für On-Chip Peripherie ;------------------------------------------------------------------------ ORG 100H ;Programmstart bei 100H INIT: ;Initialisierung für Abtastung setb P3.3 ;Messung läuft clr P3.2 ;L1 an mov CRCH,#0h ;Timer 2 Hohes Byte laden mov CRCL,#0h ;Timer 2 Niederes Byte laden setb T2R1 ;Timer 2 Wiederladen bei Überlauf clr T2CM ;Compare Mode ausgeschaltet clr I3FR ;Fallende Flanke an P1.0 löst Interrupt EX3 aus mov CCEN,#00000101B ;Capture von CC1 ermöglichen mov DPTR,#2000H ;Datenpointer mit 2000 laden setb ES ;Freigabe Serieller Interrupt setb EX3 ;Freigabe Timer 2 Interrupt extern P1.0 setb EX4 ;Timer 2 Interrupt extern P1.1 setb T2I0 ;Timer 2 Start mit Zeitgeberbetriebclr TF2 ;Timer 2 Interrupt Flag zurücksetzen setb EAL ;Allgemeine Interruptfreigabe ;------------------------------------------------------------------------ ;Programmschleife ;------------------------------------------------------------------------ ABFRAGE: jnb P1.2,INIT ;Start der Messung jnb P1.3,DEBUG ;Ende des Programms jmp ABFRAGE ;------------------------------------------------------------------------ ;EX 3 Interrupt Service Routine ;------------------------------------------------------------------------ ISR_EX3: mov A,CCL1 movx @DPTR,A ;Wert in externen Speicher inc DPTR ;Adresse um eins erhoehen mov A,CCH1 movx @DPTR,A ;Wert in externen Speicher inc DPTR ;Adresse um eins erhoehen ret ISR_EX4: mov A,CCL1 movx @DPTR,A ;Wert in externen Speicher inc DPTR ;Adresse um eins erhoehen mov A,CCH1 movx @DPTR,A ;Wert in externen Speicher inc DPTR ;Adresse um eins erhoehen ret DEBUG: setb P3.2 ;Messung jetzt über Taster T2 neu starten ljmp ABFRAGE end