|
今天想找个调制pwm方波源码
看了很多都不太理解
了解后自己写了一份
现在把自己的送上
不太会发帖
请多海涵
/* P1.0口输出pwm方波 P1.1口连接用来对比的led 两个led共阳,低电平点亮 */
#include<reg51.h> //定义单片机库函数
#define uint unsigned int //定义无符号整形
#define uchar unsigned char //定义无符号字节型
sbit pwm = P1^0; //PWM输出端口
sbit led = P1^1; //对比输出端口
uint count,a,b,th,tl,number,i;
void main()
{
count = 2; //占空比
a = 12/11059200; //计算机器周期
b = 1000/a; //计算每个数需要的时间 us
th = (65536-b)/256; //计算填入TH的值
tl =(65536-b)%256; //计算填入TL的值
EA = 1; //开总中断
ET0 = 1; //打开T0中断
TMOD = 0x01; //设置T0计数器工作方式为16位计数器
TH0 =th; //给TH0填入th
TL0 =tl; //给TL0填入tl
TF0 = 1; //表示T0有中断产生
TR0 = 1; //表示T0开始运行
led = 0; //点亮led灯做对比
while(1){ //开启死循环等待中断
if( number==300){ //每进入中断1000次就将占空比加一
number=0; //复位参考值
count=count+1; //占空比加一
}
}
}
void timer()interrupt 1{
TH0 = th; //重新填入th
TL0 = tl; //重新填入tl
i++;
if(i<count) //count为占空比
{
pwm=0; //输出低电平点亮led灯
}else{
pwm=1; //输出高电平熄灭led灯
}
if(i>=10){
i=0; //参考值置零
}
number++;
}
|
评分
-
查看全部评分
|