| 查看: 649 | 回复: 2 | ||
| 当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖 | ||
[求助]
求解答初学C51单片机的一个小程序
|
||
|
问题: 同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔300ms依次输出1,10,50,100,200,400,800, 1k(hz)的方波。 #include<reg52.h> sbit beep=P2^3; // 定义蜂鸣器 long int code table[]= // 定义发出不同频率的各个时间长度table表,因为定义晶振为12MHZ,所以一个周期也正好为1US。 { 1000000,100000,20000,10000,5000,2500,1250 }; long int num1,num2; char num; void main() { TMOD=0x11; //定义定时器0,1工作方式1 EA=1;ET0=1;ET1=1; TH0=(65535-50000)/256; //装载定时器0初值,50ms为一次中断 TL0=(65535-50000)%256; TH1=(65535-1)/256; //装载定时器1初值,1us为一次中断 TL1=(65535-1)%256; TR0=1; //打开定时器0 while(1) { if(num1==6) //判断定时器0中断了6次,也就是300ms { TR0=0; //关闭定时器0 TR1=1; //打开定时器1 beep=0; //蜂鸣器报警 num1=0; //让num1清零,以备再次计数 } if(num2==table[num]) //判断当时间达到第num个秒数 { TR1=0; //关闭定时器1 TR0=1; //打开定时器0 num2=0; //让num2清零,以备再次计数 beep=1; //关闭蜂鸣器 num++; //让num循环计数 } if(num==6) { num=0; } } } void T0_time()interrupt 1 { TH0=(65535-50000)/256; TL0=(65535-50000)%256; num1++; } void T1_time()interrupt 3 { TH1=(65535-1)/256; TL1=(65535-1)%256; num2++; } } 运行后蜂鸣器一直在响,不间断,求解答指导 |
» 猜你喜欢
有没有人能给点建议
已经有5人回复
假如你的研究生提出不合理要求
已经有12人回复
实验室接单子
已经有7人回复
全日制(定向)博士
已经有5人回复
萌生出自己或许不适合搞科研的想法,现在跑or等等看?
已经有4人回复
Materials Today Chemistry审稿周期
已经有4人回复
参与限项
已经有3人回复
对氯苯硼酸纯化
已经有3人回复
所感
已经有4人回复
要不要辞职读博?
已经有7人回复
15212223817
铁杆木虫 (著名写手)
- 应助: 15 (小学生)
- 金币: 7177.2
- 散金: 15
- 红花: 34
- 沙发: 6
- 帖子: 2860
- 在线: 684.9小时
- 虫号: 3097080
- 注册: 2014-03-28
- 专业: 控制理论与方法
3楼2018-01-15 14:27:23
15212223817
铁杆木虫 (著名写手)
- 应助: 15 (小学生)
- 金币: 7177.2
- 散金: 15
- 红花: 34
- 沙发: 6
- 帖子: 2860
- 在线: 684.9小时
- 虫号: 3097080
- 注册: 2014-03-28
- 专业: 控制理论与方法
2楼2018-01-15 14:13:54












回复此楼