标题: 都是定时器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