mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer Interrupt delay


Autor: rapeur (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.