|
各位大佬,請教下用一個定時器做PWM輸出,按鍵控制時,如果定時器時間設(shè)5US初值(即200KHZ頻率時),按鍵不能控制PWM停止輸出,幫看看下面的程序這樣設(shè)置有沒問題?謝謝!- #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閃所采集時間標(biāo)志
- 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; //設(shè)置定時器模式
- TL0=0xc4; //設(shè)置定時初值5US
- TH0=0xff; //設(shè)置定時初值
- TF0=0; //清除TF0標(biāo)志
- 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) //產(chǎn)生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;//按鍵自鎖標(biāo)志清0
- count1=0; //消抖計數(shù)清0
- }
- if(PINT==0)
- {
- Power=0;
- }
- }
- /***************主程序****************/
- void main(void)
- {
- Init();
- while(1);
- }
復(fù)制代碼
|
|