同时用两个定时器控制蜂鸣器发声.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
同时用两个定时器控制蜂鸣器发声

同时用两个定时器控制蜂鸣器发声,定时器0 控制频率,定时器1 控制同个频率持续的时间, 间隔300ms 依次输出1,10,50,100,200,400,800,1k (hz)的方波。此题出题略有错误,应 去掉1Hz,原因见注释 ***************方法1 (747code )*************** #include reg52.h #define uint unsigned int #define uchar unsigned char sbit beep=P3^4; uint yanshi[]={50000,10000,5000,2500,1250,625,500}; //暂时除去1Hz,原因是1Hz 的半个周期 是500mS,300mS 怎么能表现出来呢? uchar t,bp,pd; //t 为50mS 时间脉冲信号,bp 为变频信号,pd 为所选频段 void timer0() interrupt 1 // 定时器0 控制频率 { TH0=(65536-yanshi[pd])/256; TL0=(65536-yanshi[pd])%256; bp++; // bp 为变频信号 } void timer1() interrupt 3 // 定时器1 控制同个频率持续的时间,50mS 脉冲 { TH1=(65536-50000)/256; TL1=(65536-50000)%256; t++; } void init() { EA=1; //开启总中断 ET0=1;ET1=1;//开启外部定时器中断允许位 TMOD=0x11; // 同时定义两个定时器的工作模式 TH0=(65536-yanshi[bp])/256; TL0=(65536-yanshi[bp])%256;//给定时器0 赋初值 TH1=(65536-50000)/256; TL1=(65536-50000)%256; //给定时器1 赋初值 TR0=1;TR1=1;//启动两个定时器;可以测试一次给字节赋值 } void main() { bp=0;pd=0;beep=1;t=0; init(); while(1) { if(bp0) //测试变频信号发生 { TR0=0; //关闭定时器0 ,防止在执行定时器1 时被中断,会引起混乱 bp=0; //将变频信号bp 归零,等待下一个信号1 beep=~beep; //变频信号发生后beep 取反 if(t5) //测试定时器0 脉冲是否达到6 个,即300mS { pd++; //如果达到300mS,频段改变 t=0; //将定时器脉冲数归零 } if(pd6) //频段pd 超出6 个即第7 个时,将频段归零 { pd=0; } TR0=1; //开启定时器0,让定时器0 继续工作;定时器0 在每执行一次以 上程序中大约有4 条指令时间的增加,大约12 ×4=48 微秒 } } } *************方法2 (748code )***************** #include reg52.h #define uint unsigned int #define uchar unsigned char sbit beep=P3^4; uint yanshi[]={50000,10000,5000,2500,1250,625,500}; //暂时除去1Hz,原因是1Hz 的半个周期 是500mS,300mS 怎么能表现出来呢

文档评论(0)

ldj215322 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档