hier ist das restliches programm:
#define HIGH_uint(x) (unsigned char) ((x)>>8) //liefert High-Teil
#define LOW_uint(x) (unsigned char) (x) //liefert Low-Teil
#pragma code
volatile long int p1=31622;
volatile long int p;
static long double r=5E-10;
volatile long int l;
volatile long int k,j,i,s;
short int f;
char z;
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!!!
{
p=p1*(1-r*p1*p1);
p1=(long int)p;
l=(long int)p1;
k=(long int)(l/65535);
s=(long int)(l%65535);
if(z==0){LATB=0x05;}
if(z==1){LATB=0x06;}
if(z==2){LATB=0x0A;}
if(z==3){LATB=0x09;}
f=65535-s;
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
}
#pragma code // System Codebereich
void main(void)
{
TRISB=0b11110000;
ADCON1 = 0x7f;
LATB=0x00;
f=65535;
TMR0H=HIGH_uint(f);
TMR0L=LOW_uint(f);
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){
T0CON = 0b10000010; // Timer0 ein, 16bit,intern,x,Vorteiler,1:8
while(INTCONbits.TMR0IF!=1);
}
}