|
本人想用51单片机控制蜂鸣器实现:蜂鸣器每间隔一段时间响一下,每次响的频率主次升高,5次一循环。变量loop是大循环的时间变量。但是实际操作时候发现,不知道为什么loop最大到161就不再增加了,程序陷入死循环。想了很久也想不出来为什么,希望大佬不吝赐教,帮我找一下原因,谢谢!
单片机代码如下:
- /*同时用两个定时器控制蜂鸣器发声,定时器0控制频率,
- 定时器1控制同个频率持续的时*/
- #include<reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit beep=P2^3;
- uchar t=0;
- uint f=0,fre=10000,loop=1;
- void main()
- {
- EA=1;
- ET0=1;
- TR0=1;
- ET1=1;
- TR1=1;
- TMOD=0x11;
- TH0=(65535-fre)/256;
- TL0=(65535-fre)%256;
- TH1=(65535-50000)/256;
- TL1=(65535-50000)%256;
- beep=1;
- while(1);//等待中断
- }
- void frequence() interrupt 1//T0,frequence=10000/f
- {
- ET0=0;
- TH0=(65535-fre)/256;
- TL0=(65535-fre)%256;
- if(t<=20)
- {
- if(loop>0&&loop<=40)
- {
- fre=10000;
- beep=~beep;
- }
- if(loop>40&&loop<=80)
- {
- fre=6000;
- beep=~beep;
- }
- if(loop>80&&loop<=120)
- {
- fre=3000;
- beep=~beep;
- }
- if(loop>120&&loop<=160)
- {
- fre=1000;
- beep=~beep;
- }
- if(loop>160&&loop<200)
- {
- fre=156;
- beep=~beep;
- P1=0xfe;
- }
- }
- else
- beep=1;
- ET0=1;
- }
- void timer() interrupt 3//T1
- {
- TH1=(65535-50000)/256;
- TL1=(65535-50000)%256;
- t++;
- if(t==40)
- t=0;
- loop++;
- if(loop==200)
- loop=0;
- }
复制代码
|
|