找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6706|回复: 10
打印 上一主题 下一主题
收起左侧

定时器设置频率和间隔的难题

[复制链接]
跳转到指定楼层
楼主
ID:129083 发表于 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;                                 //取反

}
希望能告诉我哪里错了,那部分理解的不对。谢谢大神了

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:130196 发表于 2016-7-20 17:09 来自触屏版 | 只看该作者
定时器0和1不设置默认为方式0,最大计数位8191,应改为方式1
回复

使用道具 举报

板凳
ID:130196 发表于 2016-7-20 17:10 来自触屏版 | 只看该作者
定时器1也没有启动
回复

使用道具 举报

地板
ID:130196 发表于 2016-7-20 17:12 来自触屏版 | 只看该作者
定时器1的中断序列号应改为3
回复

使用道具 举报

5#
ID:61390 发表于 2016-7-20 18:37 来自触屏版 | 只看该作者
定时器的初值高
回复

使用道具 举报

6#
ID:129083 发表于 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++;                                 
}
回复

使用道具 举报

7#
ID:134560 发表于 2016-7-22 14:55 | 只看该作者
学习学习
回复

使用道具 举报

8#
ID:123712 发表于 2016-10-31 22:08 | 只看该作者
学习中,谢谢
回复

使用道具 举报

9#
ID:111634 发表于 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 CProteus》清华大学出版社ISBN 978-7-302-41682-1
书中电路和程序设计有详细说明,程序语句条条有注解

回复

使用道具 举报

10#
ID:111634 发表于 2016-11-1 18:43 | 只看该作者
本帖最后由 zl2168 于 2016-11-1 18:47 编辑

还有一个程序,能输出双音频警车声,也在上述给你介绍的书中。
实例78  电子密码锁
先Proteus仿真一下,确认有效。
电子密码锁1.rar (1.13 MB, 下载次数: 9)





以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1
书中电路和程序设计有详细说明,程序语句条条有注解。



回复

使用道具 举报

11#
ID:111634 发表于 2016-11-1 18:49 | 只看该作者
本帖最后由 zl2168 于 2016-11-1 18:51 编辑

以上3种双音频声均用程序写成,即2种不同频率发声,再控制2种频率持续的时间,不是语音。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表