1、首先测出方波的频率(这个跟占空比无关),利用这个计算出周期T;
2、利用一个独立的外档激部中断,在测量完频率后启动。
(1)先开启中断,并设置为上升边沿触发;
(2)方波从低电平跳变到高电平后,中断触发后,将其设置为下降边沿触槐圆发,同时启动定时器;
(3)第二次触发中断后,停止计时,两次中断之间的间隔修正补偿后,行明袜就是高电平的持续时间Tu。
占空比可以计算出来,就是q=Tu/T*100%,
然后就显示即可。
//晶振12MHz//在斗颂档P1_0输出20KHz,0-255级可调占空比 每一级0.39%
#include<at89x51.h>
unsigned char PWM=0x80//PWM的百分比
void InitT0(void)
{
TMOD=0x02//定时器0工作方式2 8位自动重装
TH0=205//pwm 50us 20khz
TL0=205
TR0=1//开始计时
ET0=1//允许定时器中断
EA=1//开启总中断
}
void main(void)
{
InitT0()//初始化T0定时器
while(1)
{
//添加处理代码
//调整PWM的值就能调整输出占空比
}
}
void Timer0(void) interrupt 1//用于樱腔PWM的定时器空乱
{
static unsigned char counter=0//记录中断次数
counter++
if(counter >= PWM) P1_0 = 0else P1_0 = 1
}
如果想要进步最好自己写,不要老是要人家给代码之类的。给个思路你吧祥大。有软件PWM和硬件PWM
像51单片机没有硬孙野件PWM只能用软件PWM:
1,设定定时器并开中断(定时时间为你需要的PWM频率)
2,在中断函数中设定每次中断到来输出PWM的端口电平取反。
硬件PWM:
根据单片机的datasheet,配置好相关的寄存器并使能PWM输出谨凯竖就可以了!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)