bis jetzt habe ich das so organiesiert:
#include <p18f1320.h>
#pragma config OSC = HS
#pragma config PWRT = ON //Power Up Timer
#pragma config WDT = OFF // Watchdog Timer
#define HIGH_uint(x) (unsigned char) ((x)>>8) //liefert High-Teil
#define LOW_uint(x) (unsigned char) (x) //liefert Low-Teil
volatile long int p1=31622;
volatile long int p;
static float r=5E-10;
volatile long int l;
volatile long int k,j,i,s;
long int f;
char z=0;
unsigned long int ps=500;
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!!!
{
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;}
p=p1*(1-r*p1*p1);
p1=p;
f=65535-p1;
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);
}
aber der wert p1 kann auch größer sein als 65535, deswegen war die
frage.