小優(yōu)化:
在占空比為0或100時關(guān)閉T0中斷,否則開啟T0中斷。
這樣configpwm()可以不用分成2個函數(shù)。
- unsigned int high,low;
- unsigned char HighRH,HighRL,LowRH,LowRL;
- bit gbTR0;
- void configpwm(unsigned int fr,unsigned char dc)
- {
- //計算high,low;
- if(!TR0){//否則由T0中斷刷新加載值
- HighRH=high>>8;HighRL=high;LowRH=low>>8;LowRL=low;
- TH0=LowRH;TL0=LowRL;
- }
- if(dc==100){
- gbTR0=0;
- TR0 = 0;
- pwmout=1;
- }
- else if(dc==0){
- gbTR0=0;
- if(!TR0)//否則由T0中斷使pwmout=0;
- pwmout=0;
- }
- else {
- gbTR0=1;
- TR0 = 1;
- }
- }
- void T0_ISR(void)
- {
- pwmout=!pwmout;
- if(pwmout){
- TH0=HighRH;TL0=HighRL;
- }
- else{
- //僅在此更新pwm加載值
- HighRH=high>>8;HighRL=high;LowRH=low>>8;LowRL=low;
- TH0=LowRH;TL0=LowRL;
- TR0 = gbTR0;
- }
- }
- void main(void)
- {
- T0_cfg();
- configpwm(100,0);
- while(1){
- char dc=0;
- for(;dc<=100;dc+=10){
- configpwm(100,dc);
- //死等
- }
- for(;dc<=100;dc-=10){
- configpwm(100,dc);
- //死等
- }
- }
- }
復(fù)制代碼 |