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

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.

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.