找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4454|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)使用兩個(gè)定時(shí)器實(shí)現(xiàn)間隔一段時(shí)間蜂鳴器響不同頻率并循環(huán),但是代碼出現(xiàn)問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:433644 發(fā)表于 2018-11-26 19:07 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本人想用51單片機(jī)控制蜂鳴器實(shí)現(xiàn):蜂鳴器每間隔一段時(shí)間響一下,每次響的頻率主次升高,5次一循環(huán)。變量loop是大循環(huán)的時(shí)間變量。但是實(shí)際操作時(shí)候發(fā)現(xiàn),不知道為什么loop最大到161就不再增加了,程序陷入死循環(huán)。想了很久也想不出來為什么,希望大佬不吝賜教,幫我找一下原因,謝謝!



單片機(jī)代碼如下:
  1. /*同時(shí)用兩個(gè)定時(shí)器控制蜂鳴器發(fā)聲,定時(shí)器0控制頻率,
  2. 定時(shí)器1控制同個(gè)頻率持續(xù)的時(shí)*/
  3. #include<reg52.h>
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. sbit beep=P2^3;
  7. uchar t=0;
  8. uint f=0,fre=10000,loop=1;
  9. void main()
  10. {
  11. EA=1;
  12. ET0=1;
  13. TR0=1;
  14. ET1=1;
  15. TR1=1;
  16. TMOD=0x11;
  17. TH0=(65535-fre)/256;
  18. TL0=(65535-fre)%256;
  19. TH1=(65535-50000)/256;
  20. TL1=(65535-50000)%256;
  21. beep=1;
  22. while(1);//等待中斷
  23. }

  24. void frequence() interrupt 1//T0,frequence=10000/f
  25. {
  26. ET0=0;
  27. TH0=(65535-fre)/256;
  28. TL0=(65535-fre)%256;
  29. if(t<=20)
  30.         {
  31.         if(loop>0&&loop<=40)
  32.                 {
  33.                 fre=10000;
  34.                 beep=~beep;
  35.                 }
  36.         if(loop>40&&loop<=80)
  37.                 {
  38.                 fre=6000;
  39.                 beep=~beep;
  40.                 }
  41.         if(loop>80&&loop<=120)
  42.                 {
  43.                 fre=3000;
  44.                 beep=~beep;
  45.                 }
  46.         if(loop>120&&loop<=160)
  47.                 {
  48.                 fre=1000;
  49.                 beep=~beep;
  50.                 }
  51.         if(loop>160&&loop<200)
  52.                 {
  53.                 fre=156;
  54.                 beep=~beep;
  55.                 P1=0xfe;
  56.                 }
  57.         }
  58. else
  59.         beep=1;
  60. ET0=1;
  61. }
  62. void timer() interrupt 3//T1
  63. {
  64. TH1=(65535-50000)/256;
  65. TL1=(65535-50000)%256;
  66. t++;
  67. if(t==40)
  68.         t=0;
  69. loop++;
  70. if(loop==200)
  71.         loop=0;
  72. }
復(fù)制代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表