timing timer0

Gast #1648347
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
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.