timing timer0

Gast #1648347
Lesenswert?

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.
Gast #1648777
Lesenswert?

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
#1649304
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren