uchar time1=0;
uchar time2=0;
uchar Power = 50;
sbit PWM2 = P1^3;// P1.3输出pwm,控制M2调整功率
sbit PWM3 = P1^5;// P1.5输出pwm,控制M3放电
sbit PWM1 = P1^4;// P1.4输出pwm,控制可控硅充电
/********pwm控制模块********/
//初始化定时器
void int_timer()
{
TMOD = 0x11;//定时器0工作方式1
TH0 = 0xFC;//(65536-10)/256;//赋初值定时
TL0 = 0x18;//(65536-10)%256;//1ms
TH1 = 0xFF;//(65536-10)/256;//赋初值定时
TL1 = 0xF6;//(65536-10)%256;//0.01ms
EA = 1;//开总中断
ET0 = 1;//开定时器0中断
TR0 = 1;//启动定时器0
ET1 = 1;
TR1 = 1;
}
//定时器0中断,pwm1和pwm3脉
void tim0() interrupt 1
{
TR0 = 0;//赋初值时,关闭定时器
TH0 = 0xFC;//(65536-1000)/256;//赋初值定时
TL0 = 0x18;//(65536-1000)%256;//1ms
TR0 = 1;//打开定时器
time1 ++;
if(time1 >= 1000) //1hz
{
time1 = 0;
}
else if(time1 <= 980) //占空比%98
{
PWM1 = 1;
PWM3 = 0;
}
else if((time1 > 985)&&(time1 <= 995))
{
PWM1 = 0;
PWM3 = 1;
}
else
{
PWM1 = 0;
PWM3 = 0;
}
}
/*****定时器1中断,改变PWM占空比******/
void tim1() interrupt 3
{
TR1 = 0;//赋初值时,关闭定时器
TH1 = 0xff;//(65536-10)/256;//赋初值定时
TL1 = 0xf6;//(65536-10)%256;//0.01ms
TR1 = 1;//打开定时器
time2 ++;
if(time2 >= 100) //1khz
time2 = 0;
if(time2 <= Power) //占空比
PWM2 = 1;
else PWM2 = 0;
}
/****主函数****/
void main()
{
while(1)
{
int_timer();
}
}
|