#include <reg52.h>
sbit BUZZ = P1^6;
unsigned char T0RH;
unsigned char T0RL;
void OpenBuzz(unsigned int fre);
void StopBuzz();
void main()
{
unsigned int i;
EA = 1;
while(1)
{
OpenBuzz(4000);
for(i=0; i<30000; i++);
StopBuzz();
for(i=0; i<30000; i++);
OpenBuzz(1000);
for(i=0; i<30000; i++);
StopBuzz();
}
}
void StopBuzz()
{
ET0 = 0;
TR0 = 0;
}
void OpenBuzz(unsigned int fre)
{
unsigned int reload;
reload = 65536 - (11059200)/(fre*2);
T0RH = (unsigned char)(reload >> 8);
T0RL = (unsigned char)reload;
TMOD = 0x01;
TH0 = 0xFF;
TL0 = 0xFE;
ET0 = 1;
TR0 = 1;
}
void InterruptTimer0() interrupt 1
{
TH0 = T0RH;
TL0 = T0RL;
BUZZ = ~BUZZ;
}
注意OpenBuzz里面的2,为什么要乘以2呢? 注意,频率的定义为周期的倒数,是高低电平所占的整个周期。
但是本例子占空比直接默认的就是50,那么高电平所占的时间就是一半咯!