|
我不知道為什么這么多人寫51定時(shí)器PWM程序這么復(fù)雜,本身51定時(shí)器不管工作模式在0或1或2都會(huì)自動(dòng)裝初值,你如果要來調(diào)光或要一個(gè)不太精確的PWM波,它都能勝任了。(設(shè)晶振12MHZ)模式0最大定時(shí)時(shí)間=8.192ms,模式1=65.536ms,模式2=256us。只要你打開定時(shí)器中斷,不用你裝定時(shí)器初值,它自己裝,你就得到8.192ms或65.536ms或256us時(shí)間的中斷。比如256us的中斷時(shí)間,中斷10次就是2.56ms,你讓它5次中斷輸出高電壓,5次中斷輸出低電壓,它就是高1.28ms低就是1.28ms。你讓它9次中斷輸出高,1次中斷輸出低,就改變了PWM的占空比。
不多說了,下面程序就是只用一個(gè)定時(shí)器,并帶一個(gè)按鍵調(diào)節(jié)占空比。電路較應(yīng)該好畫了吧。一片89C51,一個(gè)BUTTON按鍵,一個(gè)示波器觀察波形。
#include "reg51.h"
unsigned char a=5;
unsigned char i=0;
sbit K1=P2^0;
void main()
{ TMOD=0x02;
EA=1;
ET0=1;
TR0=1;
while(1)
{ if(K1==0)
{TR0=0;
a--;
if(a==0)
{a=10;}
while(~K1)
{TR0=1;}
}
}
}
void time() interrupt 1
{
i++;
if(i>11)
{i=0;}
if(i>a)
{P0=0xff;}
else P0=0x00;
}
|
評(píng)分
-
查看全部評(píng)分
|