|
PWM 是“脈沖寬度調(diào)制”的意思。
PWM 實(shí)際上是在單片機(jī)的某個(gè)引腳輸出一系列的矩形波,其周期一般是固定的;而其高電平、低電平所占用的時(shí)間,是可以受控調(diào)整的。
高電平與周期占用的時(shí)間之比,稱為占空比,其值為0~1之間。
PWM 的應(yīng)用很廣,簡(jiǎn)單的說(shuō),它可以控制燈光的亮度、可以控制直流電機(jī)的轉(zhuǎn)速,甚至還可以輸出語(yǔ)音信號(hào)。
新型的單片機(jī),往往都含有硬件的 PWM 模塊,編寫程序就很簡(jiǎn)單;而老式的MCS-51系列,就不具備這個(gè)條件。
其實(shí),在沒(méi)有 PWM 硬件的單片機(jī)上實(shí)現(xiàn) PWM,也并不難,只需一個(gè)定時(shí)器,令其工作在中斷方式即可。
題目:AT89C52單片機(jī)輸出可調(diào) PWM 波。
要求:
1。單片機(jī)的晶振是12MHz,輸出周期為1s。
2。用兩個(gè)開(kāi)關(guān)控制占空比的增加和減少,分20等級(jí)。
針對(duì)這個(gè)題目,做而論道設(shè)計(jì)了一個(gè)簡(jiǎn)單的實(shí)驗(yàn)電路:
在 P2 口的 8 條線輸出 PWM 波形;
在 /INT1、/INT0 外接了兩個(gè)按鍵,用來(lái)調(diào)整占空比;
在 P0 口外接了兩個(gè) BCD 數(shù)碼顯示器,用來(lái)顯示當(dāng)前的占空比的等級(jí)。
實(shí)驗(yàn)的時(shí)候,可以使用示波器來(lái)觀察 P2 口輸出的波形。
如果把 PWM 波形的頻率提高,也可以用 LED 觀察到漸亮漸暗的效果,目前看,只是閃爍的時(shí)間發(fā)生變化。
電路以及仿真效果如下圖:
0.png (142.85 KB, 下載次數(shù): 163)
下載附件
2017-4-4 03:56 上傳
0.png (203.64 KB, 下載次數(shù): 144)
下載附件
2017-4-4 03:56 上傳
//程序如下:
- #include<reg52.h>
- unsigned int a, b;
- //------------------------------------------
- void main()
- {
- TMOD = 0x01; //T0定時(shí)方式1
- TH0 = (65536-50000) / 256; //50ms@12MHz
- TL0 = (65536-50000) % 256;
- TR0 = 1;
- ET0 = 1;
- EX0 = 1; EX1 = 1;
- IT0 = 1; IT1 = 1;
- EA = 1;
- a = 0;
- b = 10;
- while(1);
- }
- //------------------------------------------
- void time0() interrupt 1
- {
- TL0 = (65536-50000) % 256;
- TH0 = (65536-50000) / 256; //50ms@12MHz
- a++;
- if(a == 20) a = 0; //在這里調(diào)整周期.
- if(a < b) P2 = 0xff; //在這里調(diào)整占空比.
- else P2 = 0x00;
- P0 = ((b / 10) << 4) + b % 10; //顯示占空比等級(jí)
- }
- //------------------------------------------
- void X0_INT() interrupt 0
- {
- b++;
- if(b > 19) b = 19; //占空比等級(jí)最大為19
- }
- //------------------------------------------
- void X1_INT() interrupt 2
- {
- b--;
- if(b < 1) b = 1; //占空比等級(jí)最小為1.
- }
復(fù)制代碼
以上代碼下載:
代碼.rar
(516 Bytes, 下載次數(shù): 401)
2017-4-4 03:57 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|