方波
的硬件接口。
频率可调,可以根据你要想要的频率,换算成中断周期,实质上是一个计数器。建议弄一个300K的中断服务。那么可以这样整:如果要30K的频率,那么每10次中断视为一次完整的周期,执行一次你要的处理。
占空比
问题,比如30%的占空比,那么你前三次中断都把状态设置为1,后面七次都设置为0状拦郑态。照这个思路就实现你的占空比了。当然这些中断次数的依据需要你自己对占袭衡敬空比的要求进行换算得到。在中断拍慎服务程序中去 *** 作I/O口状态,当然你还可以在该程序结束的时候或者开始的时候,再次修改中断时间从而调整输出频率。
可通过定时器中断来产生PWM方波TMOD=0X20
EA=1
ET1=1
TH1=...
TL1=..
TR1=1
PWM=50
while(1)
{
if(S1==0)
{
if(PWM>=0)
PWM-=10
弊缺差 }
if(S2==0)
{
if(PWM<100)
扮拿PWM+=10
}
}
void Timer1(void) interrupt 3
{
TIME++
if(TIME==100)
{
TIME=0
PWMO=1
}
if (TIME == PWM)
{
PWMO=0
}
}
当然按键租皮要消抖,PWM0输出可设置在任一IO管脚
#include"reg52.h"sbit PWM=P1^0//定义输出脚
void main()
{
TMOD=0x01 //定时器0工作薯灶方式1
TH0=(65536-10000)/256 //12M晶振10MS计桐手碧时常数
TL0=(65536-10000)%256
EA=1 //开总中断
ET0=1 //开定时器0中断
TR0=1 //启动定时器0
while(1)
}
//中断函局举数,启动后每10MS进入一次中断
void T0_time(void) interrupt 1
{
TH0=(65536-10000)/256 //12M晶振10MS计时常数
TL0=(65536-10000)%256
if(PWM)PWM=0 //输出脚取反
else PWM=1
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)