标题:
51单片机使用两个定时器实现间隔一段时间蜂鸣器响不同频率并循环,但是代码出现问题
[打印本页]
作者:
jinchenglei
时间:
2018-11-26 19:07
标题:
51单片机使用两个定时器实现间隔一段时间蜂鸣器响不同频率并循环,但是代码出现问题
本人想用51单片机控制蜂鸣器实现:蜂鸣器每间隔一段时间响一下,每次响的频率主次升高,5次一循环。变量loop是大循环的时间变量。但是实际操作时候发现,不知道为什么loop最大到161就不再增加了,程序陷入死循环。想了很久也想不出来为什么,希望大佬不吝赐教,帮我找一下原因,谢谢!
TQ9U04ZMM6S_PTWF14{P.png
(253.72 KB, 下载次数: 29)
下载附件
模拟运行结果
2018-11-26 19:06 上传
单片机代码如下:
/*同时用两个定时器控制蜂鸣器发声,定时器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;
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1