用52单片机同时用两个定时器控制蜂鸣器发声

,定时器0控制频率,定时器1控制同个频率持续的时间,间隔300ms依次输出1,10,50,100,200,400,800,1k(hz)的方波。
编写程序如下:
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar a,b,num;
sbit beep=P2^3;
uint temp[]={20000,2000,400,200,50,25,20};
void main()
{
beep=0;
num=0;
b=0;
a=0;
TMOD=0x11;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
TR0=1;
ET1=1;
TR1=1;
while(1);
}
void timer0() interrupt 1
{
TH0=(65536-temp[num])/256;
TL0=(65536-temp[num])%256;
b++;
if(b>=25)
{ b=0;
beep=~beep;
}
}
void timer1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
a++;
if(a>=40)
{
a=0;
num++;
if(num==7)
num=0;
}
}
为什么响到第三个频率后,就一直按照这个频率响,没有变化也不循环响了!求大神帮帮忙啊~~~
是“间隔2s”,不好意思打错了。

第1个回答  2014-11-18

uint temp[]={20000,2000,400,200,50,25,20};

改成
uint code temp[]={20000,2000,400,200,50,25,20};


uint temp[7]={20000,2000,400,200,50,25,20};

试试呢