欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 51單片機(jī)使用兩個(gè)定時(shí)器實(shí)現(xiàn)間隔一段時(shí)間蜂鳴器響不同頻率并循環(huán),但是代碼出現(xiàn)問(wèn)題 [打印本頁(yè)]

作者: jinchenglei    時(shí)間: 2018-11-26 19:07
標(biāo)題: 51單片機(jī)使用兩個(gè)定時(shí)器實(shí)現(xiàn)間隔一段時(shí)間蜂鳴器響不同頻率并循環(huán),但是代碼出現(xiàn)問(wèn)題
本人想用51單片機(jī)控制蜂鳴器實(shí)現(xiàn):蜂鳴器每間隔一段時(shí)間響一下,每次響的頻率主次升高,5次一循環(huán)。變量loop是大循環(huán)的時(shí)間變量。但是實(shí)際操作時(shí)候發(fā)現(xiàn),不知道為什么loop最大到161就不再增加了,程序陷入死循環(huán)。想了很久也想不出來(lái)為什么,希望大佬不吝賜教,幫我找一下原因,謝謝!



單片機(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ù)制代碼








歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1