|
本人想用51單片機(jī)控制蜂鳴器實(shí)現(xiàn):蜂鳴器每間隔一段時(shí)間響一下,每次響的頻率主次升高,5次一循環(huán)。變量loop是大循環(huán)的時(shí)間變量。但是實(shí)際操作時(shí)候發(fā)現(xiàn),不知道為什么loop最大到161就不再增加了,程序陷入死循環(huán)。想了很久也想不出來為什么,希望大佬不吝賜教,幫我找一下原因,謝謝!
TQ9U04ZMM6S_PTWF14{P.png (253.72 KB, 下載次數(shù): 29)
下載附件
模擬運(yùn)行結(jié)果
2018-11-26 19:06 上傳
單片機(jī)代碼如下:
- /*同時(shí)用兩個(gè)定時(shí)器控制蜂鳴器發(fā)聲,定時(shí)器0控制頻率,
- 定時(shí)器1控制同個(gè)頻率持續(xù)的時(shí)*/
- #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;
- }
復(fù)制代碼
|
|