51單片機(jī)是可以輸出PWM的,比較的麻煩。此時(shí)需要用到內(nèi)部定時(shí)器來實(shí)現(xiàn),可用兩個(gè)定時(shí)器實(shí)現(xiàn),也可以用一個(gè)定時(shí)器實(shí)現(xiàn)。
用兩個(gè)定時(shí)器的方法是用定時(shí)器T0來控制頻率,定時(shí)器T1來控制占空比。大致的的編程思路是這樣的:T0定時(shí)器中斷讓一個(gè)I0口輸出高電平,在這個(gè)定時(shí)器T0的中斷當(dāng)中起動(dòng)定時(shí)器T1,而這個(gè)T1是讓IO口輸出低電平,這樣改變定時(shí)器T0的初值就可以改變頻率,改變定時(shí)器T1的初值就可以改變占空比。
下面重點(diǎn)介紹用一個(gè)定時(shí)器的實(shí)現(xiàn)PWM的方法。以周期為1ms(1kHZ)為例,要產(chǎn)生其它頻率的PWM波,程序中只需作簡單修改即可。用一個(gè)定時(shí)器時(shí)(如定時(shí)器T0),首先要確定PWM的周期T和占空比D,確定了這些以后,就可以用定時(shí)器產(chǎn)生一個(gè)時(shí)間基準(zhǔn)t,比如定時(shí)器溢出n次的時(shí)間是PWM的高電平的時(shí)間,則D*T=n*t,類似的可以求出PWM低電平時(shí)間需要多少個(gè)時(shí)間基準(zhǔn)n。
因?yàn)檫@里我們是產(chǎn)生周期為1ms(1kHZ)的PWM,所以可設(shè)置中斷的時(shí)間基準(zhǔn)為0.01ms,,然后中斷100次即為1ms。在中斷子程序內(nèi),可設(shè)置一個(gè)變量如time,在中斷子程序內(nèi),有三條重要的語句:
1、當(dāng)time>=100時(shí),time清零(此語句保證頻率為1kHZ);
2、當(dāng)time>n時(shí)(n應(yīng)該在0-100之間變化開),讓單片相應(yīng)的I/O口輸出低電平;
3、當(dāng)time<=n時(shí),讓單片相應(yīng)的I/O口輸出高電平,此時(shí)占空比就為%n。
下面程序產(chǎn)生30%占空比的pwm:
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitPWM=P2^0;//P2.0輸出pwm
uchartime;//定義占空比的變量
voidmain()
{
TMOD=0x01;//定時(shí)器0工作方式1
TH0=0xff;//(65536-10)/256;//賦初值定時(shí)
TL0=0xf7;//(65536-10)%256;//0.01ms
EA=1;//開總中斷
ET0=1;//開定時(shí)器0中斷
TR0=1;//啟動(dòng)定時(shí)器0
while(1)
{
}
}
voidtim0()interrupt1
{
TR0=0;//賦初值時(shí),關(guān)閉定時(shí)器
TH0=0xff;//(65536-10)/256;//賦初值定時(shí)
TL0=0xf7;//(65536-10)%256;//0.01ms
TR0=1;//打開定時(shí)器
time++;
if(time>=100)//1khz
time=0;
if(time<=30)???//占空比%30,可改
PWM=1;
elsePWM=0;
}
最后的到波形,在示波器上顯示如下圖所示:
如果想修改占空比,直接在程序里面修改下面這句即可。
if(time<=30)//占空比%30,可改占空比
-
PWM
+關(guān)注
關(guān)注
116文章
5285瀏覽量
216972 -
51單片機(jī)
+關(guān)注
關(guān)注
275文章
5707瀏覽量
125652 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3270瀏覽量
116456
原文標(biāo)題:利用51單片機(jī)輸出pwm
文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
51單片機(jī)如何利用PWM定時(shí)器實(shí)現(xiàn)呼吸燈?
基于51單片機(jī)的定時(shí)器2的操作與實(shí)現(xiàn)
51單片機(jī)定時(shí)器寄存器設(shè)置及應(yīng)用詳細(xì)
52單片機(jī)有幾個(gè)定時(shí)器?52單片機(jī)定時(shí)器1和52單片機(jī)定時(shí)器2程序?qū)Ρ?/a>
使用單片機(jī)的定時(shí)器模擬PWM輸出實(shí)現(xiàn)呼吸燈的程序免費(fèi)下載

51單片機(jī)的應(yīng)該如何使用定時(shí)器詳細(xì)資料和實(shí)例說明

使用51單片機(jī)的定時(shí)器實(shí)現(xiàn)LED閃爍的程序免費(fèi)下載

如何同時(shí)使用51單片機(jī)的定時(shí)器0和串口使用問題詳細(xì)說明

如何使用51單片機(jī)通過定時(shí)器模擬輸出多路PWM程序免費(fèi)下載

使用51單片機(jī)定時(shí)器和計(jì)數(shù)器實(shí)現(xiàn)定時(shí)的實(shí)例說明

51單片機(jī)的定時(shí)器和計(jì)數(shù)器的功能實(shí)現(xiàn)資料說明

51單片機(jī)——定時(shí)器

51單片機(jī)定時(shí)器實(shí)現(xiàn)PWM波

51單片機(jī)定時(shí)器/計(jì)數(shù)器

評論