打印

51单片机2个定时器控制蜂鸣器发声,高手帮我看看吧

[复制链接]
3332|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ayu20|  楼主 | 2010-4-4 19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔300ms依次输出1,10,50,100,200,400,800,1k(hz)的方波。
原题上面的,
但是我写出来的是间隔1S,频率和上面反这的,而且只能输出7种频率,1HZ的没有。
改一下i或者y的值就出错,有高手帮我改改程序吗?我想了很长时间也写不出来啊

只能输出1S程序才不会乱,而且掉了一个1Hz的频率不响,只有输出7种频率,每种持续1秒。

#include<reg52.h>  
sbit SPK=P2^0;
unsigned int x,y;
unsigned char i=0;
code unsigned int tab[]={20,25,50,100,200,400,2000,20000};     //频率表
void main()
{
   TMOD=0x11;                                  //选择定时器0和1工作
   TH0=(65536-50)/256;                          
   TL0=(65536-50)%256;                   //给定时器0赋初值 50微秒

    TH1=(65535-50)/256;                  
   TL1=(65535-50)%256;                   //给定时器1赋初值 50微秒                     
   EA=1;                                                //开总中断
   ET0=1;                                                //开定时器0中断
   ET1=1;                                               //开定时器1中断
   TR0=1;                                                  //启动定时器0
   TR1=1;                                                 //启动定时器1

while(1);                                               //等待中断产生

}

time1 () interrupt 3       //定时器1控制时间 1S 一次
{  
   TH1=(65536-50)/256;
   TL1=(65536-50)%256;
   y++;
   if (y==20000)                                 // 20000为1S
   {
    y=0;
  i++;
  if (i==8)                                         //8个频率,0-7,最后一个掉了吧
  i=0;         
   }  
}

time0 () interrupt 1      //定时器0控制频率
{
   
   TH0=(65536-50)/256;
   TL0=(65536-50)%256;
   x++;
    if (x==tab[i])
   {   
       x=0;   
       SPK=!SPK;
   }
}

相关帖子

沙发
樱花草| | 2013-1-28 16:49 | 只看该作者
今天还在纠结,看了之后有思路了,谢谢,哈哈,你应该也看不到了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

6

帖子

1

粉丝