hallo, komme einfach nicht mehr weiter mit meinem timer0, und dem interrupt. hier ist mein programm: #include <p18f1320.h> #pragma config OSC = HS //32MHZ #pragma config PWRT = ON //Power Up Timer AN #pragma config WDT = OFF // Watchdog Timer AUS #define HIGH_uint(x) (unsigned char) ((x)>>8) //liefert High-Teil #define LOW_uint(x) (unsigned char) (x) //liefert Low-Teil static float p1=316220; static float p,pp,pp1; const float r=5E-13; static unsigned int f,zw; static char z=0; void hiserv(void); // Prototyp Serviceprogramm #pragma code einsprung=0x08 // Einsprungadresse void einsprung (void) // Hilfsfunktion für Sprung { _asm GOTO hiserv _endasm // Assembler: Sprung nach Servicefunktion } #pragma code // System Codebereich #pragma interrupt hiserv // Kennwort interrupt veranlasst void hiserv(void) // Rücksprung aus Interrupt!!! { INTCONbits.GIE = 0; if(z==0){LATB=0x05;} if(z==1){LATB=0x06;} if(z==2){LATB=0x0A;} if(z==3){LATB=0x09;} if(z<4){z=z+1;} if(z==4){z=0;} TMR0H=HIGH_uint(f); TMR0L=LOW_uint(f); INTCONbits.TMR0IF = 0; // Timer0 Anzeigeflag löschen } // System Codebereich void main(void) { TRISB=0b11110000; ADCON1 = 0x7f; LATB=0x00; f=65535; TMR0H=HIGH_uint(f); TMR0L=LOW_uint(f); T0CON=0b10000010; RCONbits.IPEN = 0; // Interruptsteuerung nicht priorisiert INTCONbits.TMR0IF = 0; // Timer0 Anzeigeflag löschen INTCONbits.TMR0IE = 1; // Timer0 Interrupt freigeben INTCONbits.GIE = 1; // Interrupts global freigeben while(1){ if(p1>65535){ p=p1*(1-r*p1*p1); p1=p; pp1=p1/32; zw=pp1; f=65535-zw; T0CON=0b10000111; } else { p=p1*(1-r*p1*p1); p1=p; pp1=p1/32; zw=pp1; f=65535-zw; T0CON=0b10000010; } } } das programm soll den zweiten interrupt nach ca.300369µs auslösen den nächsten interrupt soll laut der berechnung nach ca. 587188µs sein. ich überprüfe das ganze mit dem pic18 simulator. kann jemand sagen wo der fehler liegt, was mache ich falsch??? danke.
ok habe etwas falsch gemacht in dem "else" abschnitt, so soll das aussehen else { p=p1*(1-r*p1*p1); p1=p; zw=p1; f=65535-zw; T0CON=0b10000010; } aber funktionieren tut es nicht! brauche dringend hilfe
Lies nochmal dein Eröffnungsposting. Was ist eigentlich die Fragestellung? "Sieht jemand den Fehler" kanns ja wohl nicht sein. Du hast mit keinem Wort erwähnt, was eigentlich der Fehler ist. Und nein, eine derart lieblos hingeschluderte Berechnung kontrolliere ich jetzt nicht. Du hast einen Simulator. Lass ihn duchsteppen und sieh dir die Zahlenwerte an.
Um was für einen µC handelt es sich eigentlich?! Sehe ich das richtig das du aus deinem Interrupt eine Funktion aufrufst?! "Auf-Die-Finger-Klopf"
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.