short int x; int i,Te_1,Te_2,Te_3,temp; float PWMX, A, j,P,Q,m;
void main (){ TRISB=0; PORTB=0; ADPCFG=65535; TRISD0=1; /////////////IC1 als Eingangskanal von PWM ////////////////////// Timer 2 einstellen///////////// Timer2=0; T2CON=0b1000000000000000; PR2=0xffff; ////0xFFFF=65535 IPC1=0b00000001000000000; T2IF=0; T2IE=0; //////////////////// IC1CON einstellen//////////////// IC1CON=0b0000000010000010;//////////////abfallende Flanke erwischen IPCO=0b0000000001000000; IC1IF=0; //// Interrupt Flagge ausschalten IC1IE=1; //// Interrupt Flagge ausschalten ////////////////////////////////////////////////////// SPI1STAT=0b1000000000000000; SPI1CON=0b0000000000111111; //////////////////// Hauptprogramm anlaufen/////////// do { A=0; //// Eine Konstante stellen um die Periode von PWM zu rechnen x=0; //// Eine Konstante stellen um die PWM zu rechnen IC1IF=0; //// Flagge ausschalten IC1IE=1; //// Interrupt aufrufbar for (i=0;i<=335;i++){} for (i=0;i<=335;i++){} x=1; IC1IF=0; IC1IE=1; for (i=0;i<=3350;i++){} TMR2=0; //// Timer2 zurueck zu Null setzen IC1IE=0; //// Interrupt ausschalten //////////////// PWM Signalen ausrechnen/////////// PWMX=P; //// Zeit von PWM A=Q; //// Zeit von Periode PWMX=PWMX/A; //// originale PWM ausrechnen A=0; //// A zurueck setzen Te_3=(PWMX-0.32)/(0.0047); //// PWM Signal ausrechnen Te_1=Te_3/10; ////die Zahl von der Zehner Stelle ausrechnen Te_2=Te_3-Te_1*10; ////die Zahl von der Einer Stelle ausrechnen temp=SPI1BUF; for (i=0;i<=4000;i++){ } SPI1BUF=0x80; temp=SPI1BUF; for (i=0;i<=4000;i++){ } SPI1BUF=84; //////T temp=SPI1BUF; for(i=0;i<=4000;i++){ } SPI1BUF=0x81; temp=SPI1BUF; for(i=0;i<=4000;i++){ } SPI1BUF=101; /////e temp=SPI1BUF; for(i=0;i<=4000;i++){ } SPI1BUF=0x82; temp=SPI1BUF; for(i=0;i<=4000;i++){ } SPI1BUF=109; /////m temp=SPI1BUF; for(i=0;i<=4000;i++){ } SPI1BUF=0x83; temp=SPI1BUF; for(i=0;i<=4000;i++){ } SPI1BUF=112; /////p temp=SPI1BUF; for(i=0;i<=4000;i++){ } SPI1BUF=0x84; temp=SPI1BUF; for(i=0;i<=4000;i++){ } SPI1BUF=61; /////= temp=SPI1BUF; for(i=0;i<=4000;i++){ } SPI1BUF=0x85; temp=SPI1BUF; for(i=0;i<=4000;i++){ } SPI1BUF=127; ///// leerzeichen temp=SPI1BUF; for(i=0;i<=4000;i++){ } SPI1BUF=0x86; temp=SPI1BUF; for(i=0;i<=4000;i++){ } SPI1BUF=Te_1+48; /////Zehner Stelle temp=SPI1BUF; for(i=0;i<=4000;i++){ } SPI1BUF=0x87; temp=SPI1BUF; for(i=0;i<=4000;i++){ } SPI1BUF=Te_2+48; /////Einer Stelle
if (Te_1>4){ //// wenn Temp. groesse als 40 Grad for (j=0;j<=60000;j++){ TRISB=0; //// Luefter mit PORTB8 verbinden PORTB=0b100000000; //// RB8 einschalten } } } while (Te_1<=6); //// wenn die Temp. groesse als 60 Grad for (m=0;m<=60000;m++){ PORTB=0; //// PORTB ausschalten } T2IF=0; } void interrupt IC1(void) @0x16{ if (x==0){ IC1CON=0b0000000010000000; if (IC1CON==0b0000000010000011){ TMR2=0; T2CON=0b1000000000000000; IC1CON=0b0000000010000000; IC1CON=0b0000000010000010; IC1IF=0; } else{ IC1IE=0; T2CON=0; for (i=0;i<=4000;i++){} P=IC1BUF; IC1CON=0b0000000010000000; IC1CON=0b0000000010000011; } if (x==1){ T2CON=0; for (i=0;i<=4000;i++){} Q=IC1BUF; TMR2=0; IC1CON=0b0000000010000000; T2CON=0b10000000000000000; IC1IF=0; } }