Guten Abend!
Ich möchte mit einem AT89C51CC03 eine Drehzahl einlesen und auf dem
Display anzeigen. Leider wird nur 0 angezeigt. Ich vermute, dass die
zwei Register RCAP2H + RCAP2L leer bleiben. Beim Hardware Capture Mode
wird ein Interrupt an den Mikrokontroller ausgelöst. Muss ich da noch
eine Einstellung vornehmen, wann die Register ausgelesen werden oder
macht das der Mikrokontroller selbständig?
Kennt sich da jemand aus?
1 | /*** Einbinden von Include-Dateien ***/
|
2 | #include <stdio.h> // Standard Ein-/Ausgabefunktionen
|
3 | #include <at89c51cc03.h> // CC03er-Grundregister
|
4 |
|
5 | #include "lcd_fkts.h" // Funktionsprototypen der Datei lcd_fkts.c
|
6 | #include "cc03er.h" // Funktionsprototypen der Datei cc03er.c
|
7 |
|
8 |
|
9 | unsigned char bit T2 @ 0x90; // Port-Pin P1.0 (= T2; Adresse 90h) bekommt
|
10 | unsigned char bit FF @ 0x91; //Port-Pin P1.1 Fallende Flanke einlesen
|
11 | float TMZ = 1085e-9; //Wert für den Maschinen-Zyklus:
|
12 |
|
13 |
|
14 | void main (void) // Start des Hauptprogramms
|
15 | {
|
16 | unsigned char lcd_txt[21]; // Ausgabe-String für das LC-Display
|
17 | unsigned long perdauer;
|
18 | int drehzahl;
|
19 |
|
20 | // Initialisierung der seriellen Schnittstelle 0 des CC03ers
|
21 |
|
22 | SCON=0x52;
|
23 | TMOD |=0x20;
|
24 | TH1=0xfd;
|
25 | TR1=1;
|
26 | TI=1;
|
27 |
|
28 |
|
29 |
|
30 | // Benötigte SFR-Bits in T2CON
|
31 | C_T2=0; // Timer Betrieb
|
32 | FF = 1; //Pin 1.1 als Eingang konfiguriert
|
33 | CP_RL2=1; //Capture Funktion gewählt
|
34 | EXEN2=1; //negative Flanke am Hardwareanschluss löst ein Capture aus
|
35 |
|
36 | // SFR T2MOD
|
37 | T2MOD=0x00; //Hardwareanschluss als Countereingang
|
38 | //Timer arbeitet nicht als ab- oder aufwärds Zähler
|
39 |
|
40 | RCAP2H = 0; //Capture Register löschen
|
41 | RCAP2L = 0;
|
42 |
|
43 | TR2 = 1; //Timer2 starten
|
44 |
|
45 | perdauer = 256*RCAP2H + RCAP2L; //Capture Register auslesen
|
46 |
|
47 | drehzahl = 60* (1/perdauer); // Drehzahl berechnen
|
48 |
|
49 | sprintf(lcd_txt,"Drehzahl:%5u 1/min",drehzahl);
|
50 | dis_txt(1,1,0,lcd_txt); // String auf LC-Display
|
51 |
|
52 |
|
53 |
|
54 | }
|