标题: 都是定时器0惹得祸? [打印本页]
作者: liuyang 时间: 2011-8-10 23:18
标题: 都是定时器0惹得祸?
问题:要用单片机产生一个10K频率的信号,外接接有功放的扬声器,要达到声音有最好的效果,
方案一:
/****************************************
定时器2
三种模式:捕获,自动重载,波特率发生器
NOW 作用:可编程时钟输出 ===>
公式:信号频率=振荡器频率/4*[65536-(RCAP2H,RCAP2L)]
效果:非常刺耳尖锐的声音,明显达到预期效果
*****************************************/
#define DD 300
sbit BEEP = P1^0;
void Sound_Init(void) //0.000016
{
T2MOD = 0x02;
RCAP2H = TH2=(65536-DD)/256;
RCAP2L = TL2=(65536-DD)%256;
EA = 1; //开总中断
TR2 = 1; //开定时器2
}
void main()
{
Sound_Init();
While(1);
}
方案二:
/*********************************************
普通定时器0的方法
效果:声音间隔、低沉地发出,很明显十分失败
**********************************************/
sbit beep=P0^7;
void initail()
{
TMOD=0x01;
TH0=(65536-65486)/256; //装入初值,使每隔50us溢出一次
TL0=(65536-65486)%256;
EA=1;
ET0=1;
TR0=1;
}
void timer0()interrupt 1
{
TH0=(65536-65486)/256;
TL0=(65536-65486)%256;
beep=~beep;
}
void main()
{
initail();
while(1);
}
方案三:
/*************************************
延时法
效果:较为连续清晰的声音,达到一点效果
*************************************/
void delay_50() //50us
{
int x;
for(x=0;x<50;x++)
_nop_();
}
void main()
{
while(1)
{
beep=~beep;
delay_50(); //50us
}
}
IN A WORD ,毫无疑问,采用定时器2输出时钟信号是效果最好的
但我觉得疑惑的是:
采用定时器0效果竟然比普通延时效果差很多……。。。。
采用定时器0应该输出的是10K信号,不过很明显,出来效果是比10K低得多,扬声器几乎发出断续的低吟声。
希望有高人来赐教,帮小弟解决这个在你们眼中很弱的问题~~~~~~~~
作者: zlseek 时间: 2011-8-11 10:43
不会有差别吧~~~~~~~~
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |