同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔300ms依次输出1,10,50,100,200,400,800,1k(hz)的方波
当初就没解决好,凑合着混过去的,如今再看看又有问题了,下边是程序。反应是蜂鸣器虽响但频率丢了几个,还有好几秒不响,而且不规律,好像是跑飞了,求指点!!!
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit beep=P2^0;
uchar num,num2;
uint num1;
uchar code table[]={20,25,50,200,400,2000,20000,};
void main()
{
TMOD=0x11;
TH0=(65535-50)/256;
TL0=(65535-50)%256;
TH1=(65535-50000)/256;
TL1=(65535-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
while(1)
{
}
}
void timer0() interrupt 1
{
TH0=(65535-50)/256;
TL0=(65535-50)%256;
num1++;
if(num1==table[num])
{
num1=0;
beep=~beep;
}
}
void timer1() interrupt 3
{
TH1=(65535-50000)/256;
TL1=(65535-50000)%256;
num2++;
if(num2==6)
{
num2=0;
num++;
if(8==num)
num=0;
}
}
当初就没解决好,凑合着混过去的,如今再看看又有问题了,下边是程序。反应是蜂鸣器虽响但频率丢了几个,还有好几秒不响,而且不规律,好像是跑飞了,求指点!!!
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit beep=P2^0;
uchar num,num2;
uint num1;
uchar code table[]={20,25,50,200,400,2000,20000,};
void main()
{
TMOD=0x11;
TH0=(65535-50)/256;
TL0=(65535-50)%256;
TH1=(65535-50000)/256;
TL1=(65535-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
while(1)
{
}
}
void timer0() interrupt 1
{
TH0=(65535-50)/256;
TL0=(65535-50)%256;
num1++;
if(num1==table[num])
{
num1=0;
beep=~beep;
}
}
void timer1() interrupt 3
{
TH1=(65535-50000)/256;
TL1=(65535-50000)%256;
num2++;
if(num2==6)
{
num2=0;
num++;
if(8==num)
num=0;
}
}