51单片机利用两个定时器控制蜂鸣器问题.....这两个中断到底怎么使用的我一直搞不懂...麻烦大牛指教一下!

同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时543,间隔300ms依次输出1,10,50,100,200,400,800,
1k(hz)的方波

程序三

同时用两个定时器控制蜂鸣器发声,
定时器0控制频率,定时器1控制同个频率持续的时间,间隔2s依次输出1,10,50,100,200,400,800,1k(hz)的方波

#include<reg52.h> //52单片机头文件
#include <intrins.h> //包含有左右循环移位子函数的库
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit beep=P2^3;
uchar tt;
uint fre,flag;

void main() //主函数
{
fre=50000;
beep=0;
TMOD=0x11;//设置定时器0,定时器1为工作方式1
TH0=(65536-fre)/256;
TL0=(65536-fre)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
ET1=1;
TR1=1;
TR0=1;//启动定时器0
while(1);//等待中断产生

}

void timer0() interrupt 1 //定时器0中断 定时器0控制频率
{
TR0=0; //进中断后先把定时器0中断关闭,防止内部程序过多而造成中断丢失
TH0=(65536-fre)/256;
TL0=(65536-fre)%256;
tt++;
if(flag<40) //以下几个if分别用来选取不同的频率
if(tt==10)
{
tt=0;
fre=50000;
beep=~beep;
}
if(flag>=40&&flag<80)
{
tt=0;
fre=50000;
beep=~beep;
}
if(flag>=80&&flag<120)
{
tt=0;
fre=10000;
beep=~beep;
}
if(flag>=120&&flag<160)
{
tt=0;
fre=5000;
beep=~beep;
}
if(flag>=160&&flag<200)
{
tt=0;
fre=2500;
beep=~beep;
}
if(flag>=200&&flag<240)
{
tt=0;
fre=1250;
beep=~beep;
}
if(flag>=240&&flag<280)
{
tt=0;
fre=625;
beep=~beep;
}
if(flag>=280&&flag<320)
{
tt=0;
fre=312;
beep=~beep;
}
if(flag>=320&&flag<360)
{
tt=0;
fre=156;
beep=~beep;
}
TR0=1;
}
void timer1() interrupt 3 //定时器1中断用来产生2秒时间定时
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
flag++;
if(flag==360)
{
flag=0;
fre=50000;
}
}

为什么有两个这样的:
if(flag<40) //以下几个if分别用来选取不同的频率
if(tt==10)
{
tt=0;
fre=50000;
beep=~beep;
}
if(flag>=40&&flag<80)
{
tt=0;
fre=50000;
beep=~beep;
}
并且蜂鸣器的方波到底是怎么产生的 求详解!!!!

当beep=0时,产生低电平,当beep=1时,产生高电平。这样加上高低电平持续的时间就形成方波了。fre的值就是控制持续时间了。fre=50000,就是中断一次50ms,也就是20HZ。再通过变量tt和flag控制中断次数来实现所需要的频率。beep=~beep就是取反的意思。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-02-24
看着像小于40的时候,定时器0的定时时间有点长,所以单独用tt翻转一下电平
方波就是靠beep=~beep电平产生本回答被提问者采纳
第2个回答  2012-02-25
按照时间,顺序输出不同频率的方波,最常见的就是“利用单片机播放乐曲”。
楼主给出的程序,有点滥,输出8个频率,就弄这么长!
建议看看:
http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/88bfff323ec42ef21b4cff09.html
第3个回答  2012-08-22
兄弟明白了没?
第4个回答  2012-10-03
无法理解