- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 6 von 6

Thema: Problem Timer0 mit interrupt

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    Problem Timer0 mit interrupt

    Hallo RoboterNetz Forum,

    vorab, ich bin in dieser Materie ein absoluter Newbie und möchte eine Led zum laufen bringen welche sich für 1 Sek. Ein und 1 Sek. Ausschaltet.
    Das programm läuft bereits, aber ich hab bemerkt das die Led nicht konstant 1 Sekunde leuchtet, es gibt meistens kleine abweichungen so in ms Bereich. Verglichen habe ich es auf 0815 art mit einer Stoppuhr. Gibt es eine Möglichkeit in der Enwicklungsumgebung festzustellen mit welcher Geschwindigkeit die Led blinkt.

    Oder liegt es daran das der PIC Oszi nicht stabil ist?

    ps. Das Programm habe ich aus dem Netz hab einiges für meine bedürfnisse angepasst.

    Meine Entwicklungsumgebung ist das MPLAB mit Hi Tech C18 Compiler

    --------------------------------------------------------------------------------
    hier ist wäre der Code.

    Code:
    #include <htc.h>
    
    //Chip Settings
    __CONFIG(1,0x0200);
    __CONFIG(2,0X1E1F);
    __CONFIG(3,0X8100);
    __CONFIG(4,0X00C1);
    __CONFIG(5,0XC00F);
    
    
    unsigned char counter=0;//Overflow counter
    
    void main()
    {
       //Setup Timer0
       T0PS0=1; //Prescaler is divide by 256
    
       T0PS1=1;
       T0PS2=1;
    
       PSA=0;      //Timer Clock Source is from Prescaler
    
       T0CS=0;     //Prescaler gets clock from FCPU (5MHz)
    
       T08BIT=1;   //8 BIT MODE
    
       TMR0IE=1;   //Enable TIMER0 Interrupt
       PEIE=1;     //Enable Peripheral Interrupt
    
       GIE=1;      //Enable INTs globally
    
       TMR0ON=1;      //Now start the timer!
    
       //Set RB1 as output because we have LED on it
    
       TRISB&=0B11111101;
    
       while(1);   //Sit Idle Timer will do every thing!
    }
    
    //Main Interrupt Service Routine (ISR)
    void interrupt ISR()
    {
       //Check if it is TMR0 Overflow ISR
    
       if(TMR0IE && TMR0IF)
       {
          //TMR0 Overflow ISR
          counter++;  //Increment Over Flow Counter
    
          if(counter==15)
          {
             //Toggle RB1 (LED)
    
             if(RB1==0)
                RB1=1;
             else
                RB1=0;
    
             counter=0;  //Reset Counter
    
          }
    
          //Clear Flag
          TMR0IF=0;
       }
    }
    Geändert von PICuin (21.03.2011 um 21:03 Uhr)

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen