标题: 定时器设置频率和间隔的难题 [打印本页]
作者: 陆小贱 时间: 2016-7-19 13:51
标题: 定时器设置频率和间隔的难题
3、同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔300ms依次输出1,10,50,100,200,400,800,1k(hz)的方波。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar num,j;
sbit beep=P3^6;
uint code PL[]={500,625,1250,2500,5000,10000};//1,10,50,100,200,400,800,1k(hz)方波
//我取他们定时的一半来对他们取反,但800HZ 和1khz太大我无法取半一次性放上去
void main()
{ EA=1;
ET0=1;
ET1=1;
TR0=1;
TH0=(65536-30000)/256;
TL0=(65536-30000)%256; //定时器0赋初值
while(1)
{
if(num==10) //300MS到了后开始输出
{
num=0; //300ms重新计数
TH1=(65536-PL[j]);
TL1=(65536-PL[j]);
j++; //读取数组值得变量
if(j==6)
{
j=0; // j清零
}
}
}
}
void T0_time()interrupt 1
{
num++; //计10次的300ms
TH0=(65536-30000)/256;
TL0=(65536-30000)%256;
}
void T1_time() interrupt 1
{ TH1=(65536-PL[j]);
TL1=(65536-PL[j]); //重装初值
beep=~beep; //取反
}
希望能告诉我哪里错了,那部分理解的不对。谢谢大神了
作者: ssli 时间: 2016-7-20 17:09
定时器0和1不设置默认为方式0,最大计数位8191,应改为方式1
作者: ssli 时间: 2016-7-20 17:10
定时器1也没有启动
作者: ssli 时间: 2016-7-20 17:12
定时器1的中断序列号应改为3
作者: jwjjwj123 时间: 2016-7-20 18:37
定时器的初值高
作者: 陆小贱 时间: 2016-7-21 16:08
答案如下
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar num,j,bp;
sbit beep=P3^6;
uint code PL[]={50000,10000,5000,2500,1250,625,500} ;//1,10,50,100,200,400,800,1k(hz)方波
//我取他们定时的一半来对他们取反,但800HZ 和1khz太大我无法取半一次性放上去
void main()
{ TMOD=0x11;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
TH0=(65536-30000)/256;
TL0=(65536-30000)%256; //定时器0赋初值
TH1=(65536-PL[j])/256;
TL1=(65536-PL[j])%256;
bp=0;num=0;j=0;beep=1;
while(1)
{
if(bp>0)
{
TR0=0; //防止混乱
bp=0;
beep=~beep; //取反
if(num>5) //300毫秒间隔
{
num=0;
j++;
}
if(j>6) //j清零
{
j=0;
}
TR0=1; //开启定时器1
}
}
}
void T0_time()interrupt 1
{
TH0=(65536-30000)/256;
TL0=(65536-30000)%256;
num++;
}
void T1_time() interrupt 3
{ TH1=(65536-PL[j])/256;
TL1=(65536-PL[j])%256; //重装初值
bp++;
}
作者: majianya 时间: 2016-7-22 14:55
学习学习
作者: 诗和远方1515 时间: 2016-10-31 22:08
学习中,谢谢
作者: zl2168 时间: 2016-11-1 18:25
本帖最后由 zl2168 于 2016-11-1 18:38 编辑
你这个问题属于双音频输出。
实例13 双音频输出
内有电话铃声、救护车报警声
⒈ 电路设计 …
电路与上例基本相同,如图3-21所示。P1.7接发声器,P1.0、P1.2分别接按键开关K0、K1,要求按一次K0、K1,发声器分别发出电话铃声、救护车报警声。
⒉ 程序设计 …
⒊ Keil调试 …
⒋ Proteus仿真 …
先Proteus仿真一下,确认有效。
实例13 双音频输出.rar
(26.73 KB, 下载次数: 7)
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1
书中电路和程序设计有详细说明,程序语句条条有注解
作者: zl2168 时间: 2016-11-1 18:43
本帖最后由 zl2168 于 2016-11-1 18:47 编辑
还有一个程序,能输出双音频警车声,也在上述给你介绍的书中。
实例78 电子密码锁
先Proteus仿真一下,确认有效。
电子密码锁1.rar
(1.13 MB, 下载次数: 9)
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1
书中电路和程序设计有详细说明,程序语句条条有注解。
作者: zl2168 时间: 2016-11-1 18:49
本帖最后由 zl2168 于 2016-11-1 18:51 编辑
以上3种双音频声均用程序写成,即2种不同频率发声,再控制2种频率持续的时间,不是语音。
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |