我想用51单片机两个定时器实现一下功能:每隔300ms蜂鸣器改变一次蜂鸣频率,频率值依次为20hz,10hz 。。

我想用51单片机两个定时器实现一下功能:每隔300ms蜂鸣器改变一次蜂鸣频率,频率值依次为20hz,10hz ,20/3hz,5hz...
#include<reg52.h>

#define uchar unsigned char
#define uint unsigned int

sbit beep=P2^3;
sbit led1=P1^0;
uchar c;
uchar d;
uchar a;

void main()
{
c=0;
d=0;
a=1;

TMOD=0x10;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;

while(1)
{
if(c==6)
{
c=0;
a++;
}
if(d==a)
{
d=0;
beep=~beep;
led1=~led1;
}
}

}

void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
c++;

}

void timer1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
d++;

}
这段程序实现不了 请问大侠们哪里出问题了?谢谢

从程序上看,由于a没有清零的操作,第一次d、a比较相同后,d清零,以后a在6的基础上不断增加,d在0的基础上不断增加,第二次相同时可能d=a=7(也可能依然是d=a=6,取决于第6次中断产生时主程序的正在执行哪条指令),d清零,第三次是d=a=8(也可能是d=a=7),是你想要的结果吗?是不是在d=0后需要有一句a=0?没读懂你的思路。

程序还没写完吧?不过感觉这里的两个中断用法不太好,思路不太容易被理解。意见,供参考。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-16
搞不懂a为什么要一直加啊追问

我是这样想的a++可以实现定时器1计时时间逐渐增加