两个定时器控制时间及频率的问题

2019-07-15 21:02发布

  1. <font style="background-color: rgb(255, 255, 255);">#include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit fm = P2^3;//蜂鸣器对应的接口
  5. uint time0,time1,time;//time记次数  time0计时器0计数 time1计时器1计数
  6. uint code num[]={4000,400,80,40,20,10,5,4};//计时器0应该循环的次数
  7. void main()
  8. {
  9.   time=0;
  10.   time0=0;
  11.   time1=0;
  12.   fm=1;//高电平时蜂鸣器关闭 低电平时蜂鸣器响
  13.   TMOD=0x11;//确定T0 T1的工作方式为16位定时器/计数器
  14.   TH1=(65536-50000)/256; //计时器0装初值
  15.   TL1=(65536-50000)%256;
  16.   TH0=(65536-250)/256;
  17.   TL0=(65536-250)%256;
  18.   EA=1;//开总中断
  19.   ET0=1;//计时器0开放中断
  20.   ET1=1;
  21.   TR0=1;//启动计时器0
  22.   TR1=1;
  23.   
  24. time=1;
  25.   while(1)
  26.   {
  27.     if(time1==6)
  28.     {
  29.       time1=0;
  30.       time++;
  31.       if(time==8)
  32.         time=0;
  33.       time0=0;
  34.     }
  35. else
  36. {
  37.       if(time0==num[time])
  38.       {
  39.         fm=~fm;
  40.   time0=0;
  41.       }
  42. }
  43.   }
  44. }
  45. //计时器0的中断号为1
  46. void timer0() interrupt 1
  47. {
  48.   TH0=(65536-250)/256;
  49.   TL0=(65536-250)%256;
  50.   time0++;
  51. }
  52. //计时器1的中断号为3
  53. void timer1() interrupt 3
  54. {
  55.   TH1=(65536-50000)/256;
  56.   TL1=(65536-50000)%256;
  57.   time1++;
  58. }</font>
复制代码
题目如下:
假设单片机(芯片STC89C52)的晶振为12MHz,同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔300ms依次输出1,10,50,100,200,400,800,1k(hz)的方波。
按照我的理解那个1hz的方波无法输出,不知道是否正确,另外附上程序希望得到各位坛友批评指正。





lesson3.zip 下载积分: 积分 -1 分
667 Bytes, 下载次数: 6, 下载积分: 积分 -1 分 两个定时器
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
犹豫的大三
1楼-- · 2019-07-16 02:13
1hz的方波的周期是1s吧!各个频率的方波间隔是300ms。蜂鸣器的初始态肯定是不响,300ms后还是处于初始态,接着就跳到下一个频率的方波了
钟情的屌丝男
2楼-- · 2019-07-16 07:45
无源的蜂鸣器么?我测过一个无源的蜂鸣器,大约在2500hz左右的频率上才有声音,有源的要控制它的供给电压才行
_雅丶
3楼-- · 2019-07-16 12:58
 精彩回答 2  元偷偷看……

一周热门 更多>