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();
}
}
|