這是一個(gè)51產(chǎn)生PWM的演示程序 其中P1.3 P1.4是兩個(gè)輸出,這個(gè)程序比較匆忙,沒有嚴(yán)格驗(yàn)證,可能有錯(cuò),如有錯(cuò)誤請(qǐng)指正。 /***************************************************************************** * 程序名稱:PWM占空比調(diào)整演示程序 * * 編寫時(shí)間:2005.9.15 23:30分 * * 程序版本:1.0 * * * * ****************************************************************************** *程序思路說明: * * * *關(guān)于頻率和占空比的確定,對(duì)于12M晶振,假定PWM輸出頻率為1KHZ,這樣定時(shí)中斷次數(shù) * *設(shè)定為C=10,即0.01MS中斷一次,則TH0=FF,TL0=F6;由于設(shè)定中斷時(shí)間為0.01ms,這樣* *可以設(shè)定占空比可從1-100變化。即0.01ms*100=1ms * ******************************************************************************/ #i nclude #define uchar unsigned char /***************************************************************************** * TH0和TL0是計(jì)數(shù)器0的高8位和低8位計(jì)數(shù)器,計(jì)算辦法:TL0=(65536-C)%256; * * TH0=(65536-C)/256,其中C為所要計(jì)數(shù)的次數(shù)即多長(zhǎng)時(shí)間產(chǎn)生一次中斷;TMOD是計(jì)數(shù)器* * 工作模式選擇,0X01表示選用模式1,它有16位計(jì)數(shù)器,最大計(jì)數(shù)脈沖為65536,最長(zhǎng)時(shí) * * 間為1ms*65536=65.536ms * ******************************************************************************/ #define V_TH0 0XFF #define V_TL0 0XF6 #define V_TMOD 0X01 void init_sys(void); /*系統(tǒng)初始化函數(shù)*/ void Delay5Ms(void); unsigned char ZKB1,ZKB2; void main (void) { init_sys(); ZKB1=40; /*占空比初始值設(shè)定*/ ZKB2=70; /*占空比初始值設(shè)定*/ while(1) { if (!P1_1) //如果按了+鍵,增加占空比 { Delay5Ms(); if (!P1_1) { ZKB1++; ZKB2=100-ZKB1; } } if (!P1_2) //如果按了-鍵,減少占空比 { Delay5Ms(); if (!P1_2) { ZKB1--; ZKB2=100-ZKB1; } } /*對(duì)占空比值限定范圍*/ if (ZKB1>99) ZKB1=1; if (ZKB1=100) click="0"; if (click<=ZKB1) /*當(dāng)小于占空比值時(shí)輸出低電平,高于時(shí)是高電平,從而實(shí)現(xiàn)占空比的調(diào)整*/ P1_3=0; else P1_3=1; if (click<=ZKB2) P1_4=0; else P1_4=1; } |