程序问题:51单片机如何精确产生频率占空比可调的方波?

这是键盘中断程序voidkeyscan()interrupt0//外部中断0{floatTF0,TZ1;EX0=0;//关中断delay(10);//延时消抖if(P1!... 这是键盘中断程序
void keyscan() interrupt 0 //外部中断0
{ float TF0,TZ1;
EX0=0; //关中断
delay(10); //延时消抖
if(P1 !=0x0f) //判断是否有键按下
{ if(KEY1==0) freq+=100; //按键为1号,频率加100
if(KEY2==0) freq+=10; //按键为2号,频率加10
if(freq>500) freq=50; //频率大于500Hz,重新赋值为50Hz
if( KEY3==0) zkb+=10; //按键为3号,占空比加10
if( KEY4==0) zkb++ ; //按键为4号,占空比加1
if(zkb>99) zkb=1; //占空比大于99,重新赋值为1

TF0=(65536-fosc/(12.0*freq)); //频率定时初值
TZ1=(65536-(fosc*zkb)/(12.0*100*freq)); //占空比定时初值

TIMER0_H=(uint)TF0/256; //计算定时器0和定时器1的初值
TIMER0_L=(uint)TF0%256;
TIMER1_H=(uint)TZ1/256;
TIMER1_L=(uint)TZ1%256;
}
P1=0x0f; //给键盘扫描口赋初值
EX0=1; //开中断
}
仿真的时候频率和占空比都可调,但是按1键频率加的是200,按2键频率加的是也不是10,无论按3键还是4键占空比都是以10或10的倍数步进的。请哪位大虾帮我看一下,这个程序有什么问题
展开
 我来答
计运旺湛雀
2019-08-19 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.2万
采纳率:30%
帮助的人:1127万
展开全部
首先选择一个i/o设置为输出模式,这个就是用于输出方波的硬件接口。
频率可调,可以根据你要想要的频率,换算成中断周期,实质上是一个计数器。建议弄一个300k的中断服务。那么可以这样整:如果要30k的频率,那么每10次中断视为一次完整的周期,执行一次你要的处理。
占空比问题,比如30%的占空比,那么你前三次中断都把状态设置为1,后面七次都设置为0状态。照这个思路就实现你的占空比了。当然这些中断次数的依据需要你自己对占空比的要求进行换算得到。在中断服务程序中去操作i/o口状态,当然你还可以在该程序结束的时候或者开始的时候,再次修改中断时间从而调整输出频率。
tony_sgt
2010-07-01 · TA获得超过8418个赞
知道大有可为答主
回答量:5330
采纳率:66%
帮助的人:1174万
展开全部
加我互相讨论 1253931045
....
总算解决了...
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式