欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

讓沒有PWM功能的單片機實現PWM功能

作者:huqin   來源:本站原創   點擊數:  更新時間:2013年11月15日   【字體:

        AT89S51本身沒有PWM接口,程序采用軟件模擬PWM,P1口控制LED亮度,模擬PWM輸出控制燈的10個亮度級。

#include <reg51.h>
#define uInt unsigned int
#define uchar unsigned char
uchar PWM_T = 0;   //占空比控制變量 
//////////////////主程序入口//////////////////////
void main(void)      

      bit flag = 1; //控制燈漸亮漸熄方式
      uInt n;
      TMOD=0x02;   //定時器0,工作模式2,8位定時模式 
      TH0=241;     //寫入預置初值241到定時器0,使15微秒溢出一次(11.0592MHz) 
      TL0=241;     //寫入預置值 
      TR0=1;       //啟動定時器 
      ET0=1;       //允許定時器0中斷   
      EA=1;        //允許總中斷
      P1=0xff; //初始化P1 
      while(1)     
      {      
             for(n=0;n<300;n++);  //延時,將響應定時器中斷,燈會自動加/減一個檔次的亮度 
             if(flag==1)       //燈漸亮
             PWM_T++;
             else          //燈漸熄
             PWM_T--;
             if(PWM_T>=10) //設置燈亮度級別為10
             flag=0;
             if(PWM_T==0)   //限定最低亮度級別為0
             flag = 1;
      }         

///////////////////定時器0中斷模擬PWM////////////////////
timer0() interrupt 1 using 2  

      static  uchar   t ;   //t用來保存當前時間在一秒中的比例位置 
       t++;    //每15微秒增加1 
       if(t==10)   //1.5毫秒的時鐘周期 
      { 
             t=0;  //使t=0,開始新的PWM周期 
             P1=0x00;  //使LED燈亮              
      }
     if(PWM_T==t)  //按照當前占空比切換輸出為高電平 
     P1=0xff;        //使LED燈滅         
}

關閉窗口

相關文章