共有10個級別的脈沖寬度波形,可以通過觀察LED的亮暗時間的變化,或者通過虛擬示波器觀察P0.0腳輸出脈沖寬度不斷變化的十個級別。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機源程序如下:
- #include <reg52.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar PWM_T=0; //占空比控制變量
- sbit PWM_OUT=P0^0;
- void main()
- {
- bit flag=1; //控制LED燈漸亮漸熄方式
- uint n;
- TMOD=0x02; //定時器T0,8位方式2定時模式
- TH0=241; //15μs溢出一次(11.0592M)
- TL0=241;
- TR0=1;
- ET0=1;
- EA=1;
- PWM_OUT=1;
- while(1)
- {
- for (n=0;n<30000;n++); //延時,將響應定時器T0中斷
- if (flag==1)
- PWM_T++;
- else
- PWM_T--;
- if (PWM_T>=10)
- flag=0;
- if (PWM_T==0)
- flag=1;
- }
- }
- timer0()interrupt 1 using 2
- {
- static uchar t; //用t保存當前時間在1s的比例位置
- t++; //每15μs增1
- if (t==10) //1.5ms的周期
- {
- t=0;
- PWM_OUT=0;
- }
- if (PWM_T==t)
- PWM_OUT=1;
- }
復制代碼
所有資料51hei提供下載:
51PWM.rar
(45.65 KB, 下載次數: 67)
2020-5-14 17:17 上傳
點擊文件名下載附件
|