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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.