MOV P1,#10000000b ; ||||||||_ /INT3 : IRQ3 / Compare0 Out / Capture 0 In ; |||||||__ /INT4 : IRQ4 / Compare1 Out / Capture 1 In ; ||||||___ /INT5 : IRQ5 / Compare2 Out / Capture 2 In ; |||||____ /INT6 : IRQ6 / Compare3 Out / Capture 3 In ; ||||_____ /INT2 : IRQ2 / Compare4 Out / Capture 4 In ; |||______ T2EX : Timer 2 ext. reload trigger in ; ||_______ CLKOUT : System Clock Output ; |________ T2 : Counter 2 Eingang MOV P3,#11000111b ; ||||||||_ RxD0 : Eingang SerPort0 ; |||||||__ TxD0 : Ausgang SerPort0 ; ||||||___ /Int0 : IRQ0 / Timer 0 Gate Control ; |||||____ /Int1 : IRQ1 / Timer 1 Gate Control ; ||||_____ T0 : Counter 0 Eingang ; |||______ T1 : Counter 1 Eingang ; ||_______ /WR : Ext. Schreibsignal ; |________ /RD : Ext. Lesesignal MOV P4,#00000000b ; ||||||||_ Compare Channel 0 ; |||||||__ Compare Channel 1 ; ||||||___ Compare Channel 2 ; |||||____ Compare Channel 3 ; ||||_____ Compare Channel 4 ; |||______ Compare Channel 5 ; ||_______ Compare Channel 6 ; |________ Compare Channel 7 MOV P5,#00000000b ; ||||||||_ Concurrent Compare0 or Set/Reset ; ||||||||_ 1Wire : Eigene Leitung zur Kommunikation mit 1Wire Bus ; |||||||__ Concurrent Compare1 or Set/Reset ; ||||||___ Concurrent Compare2 or Set/Reset ; |||||____ Concurrent Compare3 or Set/Reset ; ||||_____ Concurrent Compare4 or Set/Reset ; |||______ Concurrent Compare5 or Set/Reset ; ||_______ Concurrent Compare6 or Set/Reset ; |________ Concurrent Compare7 or Set/Reset MOV P6,#00000110b ; ||||||||_ /ADST : Ext. A/D Start ; |||||||__ RxD1 : Eingang SerPort1 ; ||||||___ TxD1 : Ausgang SerPort1 ; |||||____ A14 Flash ; ||||_____ A15 Flash ; |||______ A16 Flash ; ||_______ A17 Flash ; |________ A18 Flash MOV P7,#0ffh ;8Bit A/D MOV P8,#0ffh ;4Bit A/D CLR RS0 ;Registerbank 1 wählen CLR RS1 [...] ; MOV TH0,#CBh ;Überlauf Timer0 bei Zählerstand ; MOV TL0,#EAh ;FFFFh - 13333d -> CBEAh = alle 10ms ; MOV TH0,#7Dh ;Überlauf Timer0 bei Zählerstand ; MOV TL0,#C6h ;FFFFh - 33333d -> 7DC6h = alle 25ms MOV TH0,#54h ;Überlauf Timer0 bei Zählerstand MOV TL0,#21h ;FFFFh - 43999d -> 5421h = alle 33ms MOV TCON,#00010000b ; ||||||||_ IT0 Int0 Flanken Bit ; |||||||__ IE0 Int0 Detect Flag ; ||||||___ IT1 Int1 Flanken Bit ; |||||____ IE1 Int1 Detect Flag ; ||||_____ Timer 0 Run Control ; |||______ Timer 0 Overflow Flag ; ||_______ Timer 1 Run Control ; |________ Timer 1 Overflow Flag MOV TMOD,#00000001b ; ||||||||_ Timer 0 M0 ; |||||||__ Timer 0 M1 ; ||||||___ Timer 0 Counter/Timer Select ; |||||____ Timer 0 Gate ; ||||_____ Timer 1 M0 ; |||______ Timer 1 M1 ; ||_______ Timer 1 Counter/Timer Select ; |________ Timer 1 Gate MOV T2CON,#10000000b ; ||||||||_ T2I0 Timer 2 Inputselect 0 ; |||||||__ T2I1 Timer 2 Inputselect 1 ; ||||||___ T2CM Timer 2 Compare Mode Bit ; |||||____ T2R0 Timer 2 Reload Mode Selection 0 ; ||||_____ T2R1 Timer 2 Reload Mode Selection 1 ; |||______ I2FR ; ||_______ I3FR ; |________ T2PS Timer 2 Prescaler Bit MOV CTCON,#00000000b ; ||||||||_ CLK0 Teiler 2 = 000 .. Teiler 256 = 111 ; |||||||__ CLK1 ; ||||||___ CLK2 ; |||||____ CTF Compare Timer Overflow ; ||||_____ - ; |||______ - ; ||_______ - ; |________ T2PS1 Precsaler select Bit MOV IEN0,#00100010b ; ||||||||_ EX0 Ext. IRQ 0 ; |||||||__ ET0 Timer 0 IRQ ; ||||||___ EX1 Ext. IRQ 1 ; |||||____ ET1 Timer 1 IRQ ; ||||_____ ES0 Serial Interface 0 Interrupt ; |||______ ET2 Timer 2 IRQ ; ||_______ WDT ; |________ EAL MOV IEN1,#00000000b ; ||||||||_ EADC AD Converter Interrupt ; |||||||__ EX2 Ext. IRQ 2 ; ||||||___ EX3 Ext. IRQ 3 ; |||||____ EX4 Ext. IRQ 4 ; ||||_____ EX5 Ext. IRQ 5 ; |||______ EX6 Ext. IRQ 6 ; ||_______ SWDT ; |________ EXEN2 Timer 2 Ext. Reload IRQ MOV IEN2,#00000001b ; ||||||||_ ES1 Serial Interface 1 Interrupt ; |||||||__ ; ||||||___ ; |||||____ ECT Compare Timer Interrupt ; ||||_____ ; |||______ ; ||_______ ; |________ MOV IP0,#00000000b ;IRQ Priorität MOV IP1,#00100000b ;IRQ Priorität ;IRQ0,Ser1,Timer1 - lowest ; ;Timer2,ext.IRQ - highest SETB EAL ;Alle Interrupts zulassen ;******************************************************************** ;********* Hier folgt das Hauptprogamm ********* ;******************************************************************** LOOP: JNB OutDisp,LOOP LCALL AUSGABE LCALL VAusgabe AJMP LOOP ******************************************************************************************* ******************************************************************************************* ******************************************************************************************* Hier das Unterprogramm von Timer0 ;Drehzahl Messen1: MOV DPTR,#Drehzahl ;RAM Adresse laden LCALL LoadRegs ;Register für Messung laden JNB Timer2Work,Messen1_2 INC R2 ;Messzähler erhöhen MOV A,R2 ; CJNE A,#5,Messen1_1 ;Müssen wir schon messen? Messen1_3: CLR EXF2 ;IRQ Flag löschen MOV TH2,#00h ;Messung beginnen MOV TL2,#00h ;mit löschen des Timer2 MOV T2CON,#10000011b ;Timer2 in GatedMode bringen SETB Timer2Work SJMP Messen1_1 ;Messung gestartet, dann warten auf Messungsende Messen1_2: MOV R6,TH2 ;Messung beendet MOV R7,TL2 ;Werte laden SETB OutDisp MOV R2,#00h MOV R3,#03h MOV R5,#00h Messen1_1: MOV DPTR,#Drehzahl ;RAM Adresse laden LCALL SetRegs ;Messdaten schreiben RETI