www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik timing timer0


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm niemand eine idee?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rene K. (draconix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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"

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
pic18f1320

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.