各位大佬,请教下用一个定时器做PWM输出,按键控制时,如果定时器时间设5US初值(即200KHZ频率时),按键不能控制PWM停止输出,帮看看下面的程序这样设置有没问题?谢谢!- #include<51.h>
- #define uint unsigned int
- #define uchar unsigned char
- bit ti_flag=0,Led_new_flag=0,Pwm_off_on=0,time_10f_flag=0,P_IO_flag=0;time_20f_flag=0,NTC_ON_OFF_flag=0,Roie_flag;
- volatile uint time_te_flag=0,count=0;Cont=0,j=0,s=0;
- volatile uint T_PCA2,I_samp=0,I_vaue=0,Time_200us_flag=200;
- volatile uint TIME_200ms_flag=0,TIME_ACC_flag=0; //LED闪所采集时间标志
- volatile uchar num=0,Tim_1ms_flag=0;
- volatile double ZKB;
- sbit PM_out=P3^6;
- /***********定时器0初始化***************/
- void Init(void)
- {
- AUXR|=0x80; //定时器时钟1T模式
- TMOD|=0x00; //设置定时器模式
- TL0=0xc4; //设置定时初值5US
- TH0=0xff; //设置定时初值
- TF0=0; //清除TF0标志
- ET0=1;
- EA=1;
- TR0=1;
- /***************定时器0****************/
- void timer0(void) interrupt 1
- {
- Time_200us_flag--;
- if(Time_200us_flag==0) //1ms
- {
- Time_200us_flag=200;
- ti_flag=1;
- keyScan(); //按键扫描
- j++;
- }
- if(Pwm_off_on)
- {
- num++;
- if(num>=2)
- num=0;
- if(num<ZKB) //产生PWM
- PM_out=1;
- else
- {
- PM_out=0;
- }
- }
- }
- /*************按键扫描及处理***************/
- void keyScan()
- {
- static bit key1_lock=0;
- static uchar count1=0;
- if(0==key)
- {
- if((count1++>=25)&&(key1_lock==0)&&(PINT==1))//延时滤波25ms
- {
- key1_lock=1;
- Pwm_off_on=~Pwm_off_on;
- if(Pwm_off_on==0)
- PM_out=0;
- }
- }
- else
- {
- key1_lock=0;//按键自锁标志清0
- count1=0; //消抖计数清0
- }
- if(PINT==0)
- {
- Power=0;
- }
- }
- /***************主程序****************/
- void main(void)
- {
- Init();
- while(1);
- }
复制代码
|