Forum: Mikrocontroller und Digitale Elektronik Timer0 mit Interrupt funktioniert nicht - bitte Hilfe


von Tobias W. (towa)


Lesenswert?

Hallo,

ich versuche bei einem pic16f887 den timer0 mit dem dazugehörigen 
interrupt einzustellen. wenn der timer dann überläuft soll das 
auslösende interrupt flag die leds an portd einschalten um mir zu zeigen 
das der timer einmal durchgelaufen ist. die zeit nach der das der fall 
ist, ist erstmal egal ich kann sie später ja noch anpassen durch 
veränderung am prescaler mir geht es nur erstmal um die generelle 
funktion denn da hab ich anscheinend noch nicht die lösung gefunden.

kann mir bitte jemand weiterhelfen?

das ist der code:
1
/////////////////////////////
2
#include <stdio.h>
3
#include <stdlib.h>
4
#include <pic16f887.h>
5
#include <xc.h>
6
7
// CONFIG1
8
#pragma config FOSC = INTRC_NOCLKOUT
9
#pragma config WDTE = OFF
10
#pragma config PWRTE = ON       
11
#pragma config MCLRE = ON       
12
#pragma config CP = OFF         
13
#pragma config CPD = OFF        
14
#pragma config BOREN = ON       
15
#pragma config IESO = ON       
16
#pragma config FCMEN = ON       
17
#pragma config LVP = OFF        
18
// CONFIG2
19
#pragma config BOR4V = BOR40V   
20
#pragma config WRT = OFF        
21
22
#define _XTAL_FREQ 4000000
23
24
void main(void)
25
{
26
// Timer Startwert auf 0 setzen
27
            TMR0 = 0b00000000;
28
// Einstellen des Interrupt Registers
29
          INTCON = 0b10100000;
30
// Programmierung des Timer0 im OPTION_REG Register
31
      OPTION_REG = 0b11000000;
32
33
      TRISD = 0b00000000;
34
35
    while(1)
36
    {
37
        if(T0IF == 1)
38
        {
39
          PORTD = 0b11111111;
40
          __delay_ms(1000);
41
          INTCON = 0b10100000;
42
          TMR0 = 0b00000000;
43
        }
44
        else
45
            PORTD = 0b00000000;
46
       
47
    }
48
}
49
//////////////////////////////////////

vielen dank,

gruß tobi

von Peter K. (Gast)


Lesenswert?

Ich seh in deinem Programm keine Interrupt-Routine

wenn sie drinnen ist überprüfe ob die Interruptvektoren stimmen also, ob 
die Routine auf den overflow_vector legst oder ob du vielleicht einen 
falschen eingetragen hast

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.