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!!!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.