Sie sind auf Seite 1von 2

#include<p18f4550.h> #include <stdio.

h> #pragma config WDT=OFF #pragma config FOSC=HS #pragma config PWRT=OFF #pragma config LVP=OFF #define DUTY CCPR2L void Duty_c(float p); void inat(void); void pwm(void); void adc(void); unsigned char voltage; void mydelay(unsigned int t); void mydelay(unsigned int t) { unsigned int i,j; for(i=0;i<t;i++) for(j=0;j<165;j++); } void main() { float Duty_yy; float step; float Voltage,Voltage1,Voltage2,old_voltage=14,new_voltage; inat(); ADCON0=0x09; ADCON1=0x00; pwm(); while(1) { //mydelay(2); ADCON0bits.GO=1; while(ADCON0bits.DONE==1) step=0.0196078; new_voltage=step*ADRESH; Voltage1=new_voltage*10; Duty_yy=12/Voltage1; Duty_c(Duty_yy); old_voltage=new_voltage; } } void adc() { ADCON0=0x09;

ADCON1=0x00; } void pwm() { CCP1CON=0x0C; CCP2CON=0x0C; //single bit pwm mode //single bit pwm mode ///////preescale by 1 ////////////124

T2CON=0b00000000; PR2=0x7C; TMR2=0x00; T2CONbits.TMR2ON=1; } void inat(void) { TRISA=0xFF; TRISC=0x00; TRISD=0x00; TRISCbits.TRISC2=0; TRISCbits.TRISC1=0; }

void Duty_c(float p) { float new_voltage,old_voltage=14; if(p>0.83) { p=0.83; DUTY=(p) * 124; } if(new_voltage - old_voltage > 0) { p--; DUTY=(p) * 124; } else if(new_voltage - old_voltage < 0) { p++; DUTY=(p) * 124; } if((p<0.83) && (p>0.33)) { DUTY=(p) * 124; } if(p<0.33) { p=0.33; DUTY=(p) * 124; } }

Das könnte Ihnen auch gefallen