Forum: Mikrocontroller und Digitale Elektronik Capture Funktion


von Stef H. (kadett)


Angehängte Dateien:

Lesenswert?

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
  }

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.