| 查看: 804 | 回复: 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++; } } 运行后蜂鸣器一直在响,不间断,求解答指导 |
» 猜你喜欢
有多少人是今天查系统知道结果的?
已经有17人回复
为什么资助数各大高校都创新高,自己申请怎么就这么难
已经有3人回复
基金未中,这种答复是模板吗?
已经有4人回复
导师吐槽:我怎么摊上了这么个极品研究生!
已经有5人回复
怎么看青基中了没有啊
已经有5人回复
梦想
已经有3人回复
面上合作单位盖章
已经有3人回复
看板上这么多中的,有点像50人群里49个人都是骗子的那种感觉……
已经有5人回复
基金不中,共勉
已经有7人回复
为什么 国际(地区)合作与交流项目 没有放榜?
已经有11人回复
15212223817
铁杆木虫 (著名写手)
- 应助: 15 (小学生)
- 金币: 7181.2
- 散金: 15
- 红花: 34
- 沙发: 6
- 帖子: 2865
- 在线: 685.2小时
- 虫号: 3097080
- 注册: 2014-03-28
- 专业: 控制理论与方法
2楼2018-01-15 14:13:54
15212223817
铁杆木虫 (著名写手)
- 应助: 15 (小学生)
- 金币: 7181.2
- 散金: 15
- 红花: 34
- 沙发: 6
- 帖子: 2865
- 在线: 685.2小时
- 虫号: 3097080
- 注册: 2014-03-28
- 专业: 控制理论与方法
3楼2018-01-15 14:27:23









回复此楼