本帖最后由 Sooofia 于 2018-3-31 20:51 編輯
#include "reg52.h" #define uint unsigned int #define uchar unsigned char sbit PWM = P1^1; uchar pluse; //占空比寄存器 void Timer2() interrupt 5 { static uchar time; TF2=0; if(++time==pluse) PWM=0; //達到脈寬設(shè)定值時,輸出PWM低電平 else if(time==40) //PWM的頻率為1khz左右 { time=0; PWM=1; } } void InitTimer2(void) //初始化函數(shù) { RCAP2H = 0xff //定時25us初值 RCAP2L = 0x0e7; ET2=1; EA=1; TR2=1; } void main(void) { InitTimer2(); while(1) { pluse=20; } } 把PWM波的周期定為1ms,占空比分40級可調(diào)(即每級差2.5%),這樣定時器T2每25us產(chǎn)生一個定時中斷,每40次中斷后進入下一個PWM波的周期。在程序中,pluse=20,即占空比為50%,輸出的平均電壓為12*50%=6V。PWM產(chǎn)生的過程是這樣的,開始時PWM為1,當計時到達pluse時(即到達了設(shè)定的脈寬寬度時間)PWM=0,隨后到達PWM周期時間后PWM=1,此時下一個PWM周期重新開始。
|