Timer Interrupt delay

Gast #843314
Lesenswert?
• ▲
▼
Hallo zusammen,
ich habe dank internet ein  Programm verwendet, aber es geht nicht. Mein 
Problem ist , ich habe delay für ein Pin verwenden, aber das ganze 
Programm ist durch diese delay beeinflusst, und das wollte ich nicht. 
Ich habe in Internet uber Timer und Interrupt gelesen, und das ware gut 
für mein Programm. aber ich weiß nicht wie es funktionniert. ich wollte 
PORTBbits.RB1=PORTDbits.RD0 realisier mit einer warte zeit nehmen wir 
100ms. ich verwende PIC18F4550 mit COMPILER C in MPLAB. das ist das Code

#include <p18F4550.h>
#include <stdio.h>

#include "test.h"

#define TRUE 1
#define FALSE 0

unsigned int task0_counter=0;
unsigned int task1_counter=0;
unsigned int task2_counter=0;

#define TASK0_COUNTER_MAX 1
#define TASK1_COUNTER_MAX 200  //200*500µ
#define TASK2_COUNTER_MAX 5000



void main (void)
{

  setup_multitasking();

  while(1)
  {
  if(PORTBbits.RB1==TRUE)
  {
  PORTBbits.RB1=FALSE;
  }
  }
}



#include "Test.h"

#include <p18F4550.h>

#define TRUE 1
#define FALSE 0

unsigned int task0_counter=0;
unsigned int task1_counter=0;
unsigned int task2_counter=0;

#define TASK0_COUNTER_MAX 1
#define TASK1_COUNTER_MAX 2000
#define TASK2_COUNTER_MAX 5000

volatile unsigned char task0_enable=TRUE;
volatile unsigned char task1_enable=TRUE;
volatile unsigned char task2_enable=TRUE;

volatile unsigned char task0_go=FALSE;





void setup_multitasking(void)
{
#define TICKS_BETWEEN_INTERRUPTS  2000
#define INTERRUPTS_OVERHEAD       19
#define TRM1RESET  (0xFFFF-(TICKS_BETWEEN_INTERRUPTS - 
INTERRUPTS_OVERHEAD))
#define TRM1RESET_HIGH  TRM1RESET
#define TRM1RESET_LOW  TRM1RESET & 0xFF



T1CONbits.TMR1CS=0;
T1CONbits.T1CKPS0=0;
T1CONbits.T1CKPS1=0;



T1CONbits.TMR1ON=0;
TMR1H=TRM1RESET_HIGH;
TMR1L=TRM1RESET_LOW;
T1CONbits.TMR1ON=1;
PIR1bits.TMR1IF=0;
PIE1bits.TMR1IE=1;
INTCONbits.PEIE=1;
INTCONbits.GIE=1;
}

void interrupt (void)
{
T1CONbits.TMR1ON=0;
PIR1bits.TMR1IF=0;
TMR1H=TRM1RESET_HIGH;
TMR1L=TRM1RESET_LOW;
T1CONbits.TMR1ON=1;
task0_counter++;
if(task0_counter>=TASK0_COUNTER_MAX)
{
  task0_counter=0;
   if(task0_enable==TRUE)
   {
   }
   task1_counter++;

   if(task1_counter>=TASK1_COUNTER_MAX)
   {

   }

}
task2_counter++;

if(task2_counter>=TASK2_COUNTER_MAX)
   {
   task2_counter=0;
   if(task2_enable==TRUE)
   {
   }

   }
}
ich brauche eure Hilfe.
Gruß

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.