51单片机两个定时器控制蜂鸣器发出不同声调

?frivolous? 2020-07-16 04:50:17
题目:同时用两个定时器控制蜂鸣器发生定时器1控制频率,定时器0控制同个频率,持续的时间间隔2s,一次输1,10,50,100,200,400,800,1000赫兹的方波 我的程序只有第一个两秒有1hz的,其他无法实现,不知道哪里出了问题,麻烦大佬看一看! #include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int uint t0,t1,aa,bb,spin,tt,flag; sbit fm=P2^3; uchar code table1[]={1000,1000,1000,1000,500,50,5,500};//根据不同的hz进行spin的选择 uchar code table2[]={500,50,10,5,5,25,125,1};//根据不同的spin事先计算好每种周期震动的次数 void init(); void main() { init(); while(1) {}; } void init() {uint t0=0; uint t1=0; uint aa=0; uint bb=0; uint tt=0; uint flag=0; TMOD=0x11; EA=1; ET0=1; ET1=1; TL0=(65536-50000)%256; TH0=(65536-50000)/256; TL1=(65536-spin)%256; TH1=(65536-spin)/256; spin=table1[aa]; TR0=1; TR1=1;} void timer0() interrupt 1 { TL0=(65536-50000)%256; TH0=(65536-50000)/256; t0++; if(t0==40) { t0=0; aa++; bb++; } if(aa==8) { TR0=0; flag=1; } } void timer1() interrupt 3 { spin=table1[aa]; tt=table2[bb]; TL1=(65536-spin)%256; TH1=(65536-spin)/256; t1++; if(t1==tt) { t1=0; fm=~fm; } if(flag==1) TR1=0; }
...全文
1377 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
?frivolous? 2020-07-16
  • 打赏
  • 举报
回复
引用 2 楼 forget345的回复:
没细看 ,有个明显错误
uchar 最大 255,table1和table2 改为 uint
感谢回答,我太粗心了哈
forget345 2020-07-16
  • 打赏
  • 举报
回复
没细看 ,有个明显错误
uchar 最大 255,table1和table2 改为 uint
  • 打赏
  • 举报
回复
控制1秒输出不同的方波不需要2个定时器,一个定时器足够用。

27,509

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧