利用AT89C52定时器输出可调PWM
利用AT89C52定時(shí)器輸出可調(diào)PWM
知識(shí)儲(chǔ)備:
PWM即是脈寬沖寬度調(diào)制,也稱脈寬調(diào)制,其意義就是通過微處理器的數(shù)字輸出來(lái)對(duì)模擬電路進(jìn)行調(diào)制的一種有效技術(shù)。
由于單片機(jī)只能輸出高電平(1),或者低電平(0),因此對(duì)于類似正弦曲波等無(wú)法直接輸出。因此需要通過控制高低電平的有效時(shí)間,用等效面積的方式輸出曲波。
PWM:
- 通過改變脈沖列的周期可以調(diào)頻;
- 改變脈沖的寬度或占空比可以調(diào)壓
1.定時(shí)器:
51單片機(jī)中內(nèi)置定時(shí)器有定時(shí)器0和定時(shí)器1,通過采用定時(shí)器中斷的方式輸出PWM波形,可不必占用CPU的內(nèi)存。
定時(shí)器配置:
//若使用函數(shù)方式初始化,記得在主函數(shù)中調(diào)用一遍
void Time0_Init(void) { TMOD=0x01; //采用方式1進(jìn)行定時(shí) TH0=(65536-1000)/256; //定時(shí)器計(jì)數(shù)值高位寫入 TL0=(65536-1000)%256; //低位寫入 ET0=1; //使能定時(shí)器0中斷允許位 TR0=1; //使能定時(shí)器0 EA=1; //使能中斷允許位 }
如若是定時(shí)器1配置:
只需將其中的:
TH0換為TH1
TL0換為TL1
ET0換為ET1
TR0換為TR1
方式零計(jì)數(shù):13位計(jì)數(shù)器 2^13=8192
方式一計(jì)數(shù):16位計(jì)數(shù)器2^16=65536
寫入計(jì)數(shù)值:
51單片機(jī)的晶振是12Mhz,因此機(jī)械周期是1us,即是說(shuō)定時(shí)每1us計(jì)數(shù)一次,因此當(dāng)我們要寫入計(jì)數(shù)值是可以這樣:
定時(shí)器(例選用方式一計(jì)數(shù))計(jì)數(shù)到上限值時(shí)溢出(65536),因此假設(shè)我們要每1ms進(jìn)入中斷一次,則可以:
1ms/1us=1000(次)------計(jì)數(shù)器要計(jì)數(shù)1000次
寫入定時(shí)器的值就為(65536-1000),定時(shí)器將會(huì)從會(huì)從(65536-1000)這個(gè)數(shù)每1us自加1,累積1000次后剛好溢出65536,從而進(jìn)入中斷。
2.輸出PWM波形
要想輸入PWM波形要確定兩個(gè)值:周期和閾值
在固定周期內(nèi),低于閾值時(shí)間輸出高(低電平),高于閾值時(shí)間輸出低(高)電平,從而形成一定的矩形脈沖
通過調(diào)節(jié)閾值的大小即可確定高(低)電平的占空比
配置:
unsigned char variable; //時(shí)間t變量
unsigned char threshold; //設(shè)置的閾值
sbit output=P2^1; //輸出PWM波形的管教
if(variable<threshold) { output=0; } else if(variable>=threshold1) { output=1; } //將上述步驟通過函數(shù)實(shí)現(xiàn)
while(variable==100) { variable=0; }
3.定時(shí)器中斷服務(wù)函數(shù)的編寫
通過2中所述如何實(shí)現(xiàn)輸出PWM的方式,將其封裝進(jìn)定時(shí)器函數(shù)
編寫定時(shí)器中斷服務(wù)函數(shù)前需要知道中斷號(hào):
中斷號(hào): 定時(shí)器0:1
? 定時(shí)器1:3
void Time0(void) interrupt 1 //不用調(diào)用 { TH0=(65536-1000)/256; //每次進(jìn)入定時(shí)期中斷都會(huì)更新定時(shí)值 TL0=(65536-1000)%256; if(variable<threshold) { output=0; } else if(variable>=threshold1) { output=1; }
while(variable==100) { variable=0; } }
輸出PWM的大體函數(shù)編寫完畢,具體使用功能請(qǐng)各位自行編寫~~
總結(jié)
以上是生活随笔為你收集整理的利用AT89C52定时器输出可调PWM的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 拉梅系数以及雅克比行列式
- 下一篇: 中国教育在于农村