Forum: Mikrocontroller und Digitale Elektronik Zeitmessung mit PIC16f877


von Johann S. (jojo12345)


Lesenswert?

Hallo Leute,
Ich bin noch ein Neuling was Mikrokontroller angeht und hoffe ihr könnt 
mir helfen.  Ich habe mir eine Schaltung mit einem PIC16f877A gebaut die 
mir auf dem Port RB0 ein High bzw. Low –Signal liefert und arbeite mit 
MPlab und dem Hi-Tech C Compiler. Mein Ziel ist es die Zeit zwischen dem 
High und Low-Signal zu messen. Meine Idee war es den Timer1 bei High zu 
starten und bei Low zu stoppen. Die Schaltung arbeitet mit einem 
Uhrenquarz.
Da wäre auch schon meine erste Frage. Wie lege ich den externen Takt 
fest?
Mein Code:
void timer_init()
{
  TMR1IF =1;
  T1CON =0b00000000;
  GIE =1;
  PEIE =1;
  TMR1IE =1;
  TMR1H=0;
  TMR1L=0;
}
void ports_init()
{
  TRISA = 0b11111111;
  TRISB = 0b11111101;
  PORTB = 0b00000010;
  PORTD = 0b11111111;
  TRISD = 0b00000000;
  ADRESL=1;
  ADRESH=0;
}

void main(void)
{
  ports_init();
  timer_init();

while(1){
  if (RB0 == 1)
  {
    TMR1ON = 1;


  }
  if (RB0 == 0)
  {
    TMR1ON = 0;
    Time = 256*TMR1H+TMR1L;
    TMR1H = TMR1L = 0;
    Time = Time/128;
  }
}
}
Nun meine Fragen:
Wird mein gestarteter Timer in der Variable TMR1H und TMR1L gespeichert?
Entsteht der Überlauf von TMR1L automatisch?
Wird die Zeit ohne Prescaler richtig berechnet?
Vielen Dank für eure Hilfe!!!

von usuru (Gast)


Lesenswert?


von Chris B. (dekatz)


Lesenswert?

Du schaltest den Timer1-Interrupt frei, ich sehe aber kein 
Interuptroutine dafür. Weiss jetzt nicht ob der HiTech Compiler 
automatisch eine leerer Interruptroutine erzeugt, aber wenn nicht, 
landet dein Programm bei 1. Timer1 Überlauf im Nirwana (genaugenommen 
auf der Adresse 0x0004 und was dort steht weiss ich nicht und du auch 
nicht).
Also würde ich auf jeden Fall TMR1IE mal auf 0 setzen.

Timer1 ist ein 16-Bit Timer. Überlauf von TMR1L nach TMR1H erfolgt 
automatisch. Da der Prescealer auf 1:1 steht und der interne Takt 
verwendet wird, steht in TMR1H/L die Anzahl der Fosc/4 Takte.
Wie lange <Fosc/4> ist hängt vom verwendeten Quarz ab.

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.