Forum: Mikrocontroller und Digitale Elektronik Timer Interrupt delay


von rapeur (Gast)


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ß

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.