你的方法控制頻率以及占空比可行。
- unsigned int gPrd=20;//周期20ms即50Hz
- unsigned int gDuty=10;//占空比 gDuty/gPrd=50%
- /*
- freqSet(50,0.5);//設置頻率50Hz,占空比50%
- freqSet(1,0.5);//設置頻率1Hz,占空比50%
- freqSet(0.1,0.1);//設置頻率0.1Hz,占空比10%
- */
- void PwmSet(float freq,float duty)
- {
- gPrd=1000/freq;
- gDuty=gPrd*duty;
- }
- /*
- freqSet(50);//設置頻率50Hz,占空比50%
- freqSet(1);//設置頻率1Hz,占空比50%
- */
- void freqSet(unsigned char freq)
- {
- gPrd=1000/freq;
- gDuty=gPrd/2;
- }
- void tmr0_routine(void) interrupt 1//1ms
- {//最大頻率可設置500Hz
- unsigned int counter=65535;
- if(++counter>=gPrd)
- {
- counter=0;
- LED=1;
- }
- else if(counter==gDuty)
- {
- LED=0;
- }
- }
復制代碼 |