Forum: Mikrocontroller und Digitale Elektronik Zeitmessung mit PIC16f877


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.