|
今天想找個調(diào)制pwm方波源碼
看了很多都不太理解
了解后自己寫了一份
現(xiàn)在把自己的送上
不太會發(fā)帖
請多海涵
/* P1.0口輸出pwm方波 P1.1口連接用來對比的led 兩個led共陽,低電平點(diǎn)亮 */
#include<reg51.h> //定義單片機(jī)庫函數(shù)
#define uint unsigned int //定義無符號整形
#define uchar unsigned char //定義無符號字節(jié)型
sbit pwm = P1^0; //PWM輸出端口
sbit led = P1^1; //對比輸出端口
uint count,a,b,th,tl,number,i;
void main()
{
count = 2; //占空比
a = 12/11059200; //計(jì)算機(jī)器周期
b = 1000/a; //計(jì)算每個數(shù)需要的時間 us
th = (65536-b)/256; //計(jì)算填入TH的值
tl =(65536-b)%256; //計(jì)算填入TL的值
EA = 1; //開總中斷
ET0 = 1; //打開T0中斷
TMOD = 0x01; //設(shè)置T0計(jì)數(shù)器工作方式為16位計(jì)數(shù)器
TH0 =th; //給TH0填入th
TL0 =tl; //給TL0填入tl
TF0 = 1; //表示T0有中斷產(chǎn)生
TR0 = 1; //表示T0開始運(yùn)行
led = 0; //點(diǎn)亮led燈做對比
while(1){ //開啟死循環(huán)等待中斷
if( number==300){ //每進(jìn)入中斷1000次就將占空比加一
number=0; //復(fù)位參考值
count=count+1; //占空比加一
}
}
}
void timer()interrupt 1{
TH0 = th; //重新填入th
TL0 = tl; //重新填入tl
i++;
if(i<count) //count為占空比
{
pwm=0; //輸出低電平點(diǎn)亮led燈
}else{
pwm=1; //輸出高電平熄滅led燈
}
if(i>=10){
i=0; //參考值置零
}
number++;
}
|
-
-
51單片機(jī)pwm方波輸出.zip
2018-8-14 12:47 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
27.15 KB, 下載次數(shù): 43, 下載積分: 黑幣 -5
源碼文件
評分
-
查看全部評分
|