4537|8

64

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

怎样使用两个定时器? [复制链接]

请教啊,同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,
间隔300ms依次输出1,10,50,100,200,400,800,1k(hz)的方波。


还有,我想多看关于c语言实例的书,找了很久也没有,可以推荐一下吗....

最新回复

不是很懂,想知道,帮顶.  详情 回复 发表于 2009-5-10 18:43
点赞 关注

回复
举报

81

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
北航的馬東梅老師的書可以一看 雖然錯誤也很多 但是同類書中比較好的了
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
不懂你说的一个定时器用来控制时间是不是控制300ms这个时间
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

4
 
如果是的话,当用来控制时间的定时器一到300MS就来一个中断,进行把第二个定时间的初始值进行赋值,而且在这个定时器
里用一个值来记数,这样在那一次中断就对另一个定时器赋什么值!
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

5
 
间隔300ms依次输出1,

LZ你不是在开玩笑吗?
300MS间隔输出1秒一次的频率

你的间隔还没有输出时间长,这个能得到输出效果吗?

呵呵其它的基本好办,以1K的为基准,算好,其它的在中断里计数应该就OK了

不过会有误差

要误差小点,用状态机方式,不同的输出要求为不同的状态,然后采用不同的寄存器配置
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 
啊..可能题错了.不过还是不懂....可能意思是在300ms内输出800hz方波,下一300内输出1khz方波...如此类推..

引用 4 楼 lbing7 的回复:
间隔300ms依次输出1,

LZ你不是在开玩笑吗?
300MS间隔输出1秒一次的频率

你的间隔还没有输出时间长,这个能得到输出效果吗?

呵呵其它的基本好办,以1K的为基准,算好,其它的在中断里计数应该就OK了

不过会有误差

要误差小点,用状态机方式,不同的输出要求为不同的状态,然后采用不同的寄存器配置
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

7
 
设TC1控制频率,TC2控制时值
每个要播放的音符的数据结构可看作包含两个元素:频率(单位:HZ)、时值(单位:ms)
从而,可以声明为:
  1. struct Note{
  2.     unsigned int tune; //频率
  3.     unsigned int time; //时值
  4. } *m_pNote;
复制代码

那么,整个待播放的音乐可以存放到一个结构数组中。
程序每次读取一个音符,进行播放。
有两种方法:循环和中断。建议用中断的,因为循环的话,播放期间,MCU无法出路别的指令。其实在播放启动后,不需要MCU的。
总体思路:
调用一个函数启动播放,这个函数负责接受音乐的数据地址、待播放音符数。并开启TC2的比较中断,同时播放第一个音符。
后面的音符在TC2的中断函数里播放。
每播放一个音符,地址加1(sizeof(Note))。
就是这样,有了大体框架,楼主可以按照这个去实现。
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

8
 
谢啦,哈哈

引用 6 楼 Soyokaze 的回复:
设TC1控制频率,TC2控制时值
每个要播放的音符的数据结构可看作包含两个元素:频率(单位:HZ)、时值(单位:ms)
从而,可以声明为:

C/C++ codestruct Note{
    unsigned int tune; //频率
    unsigned int time; //时值
} *m_pNote;


那么,整个待播放的音乐可以存放到一个结构数组中。
程序每次读取一个音符,进行播放。
有两种方法:循环和中断。建议用中断的,因为循环的话,播放期间,MCU无法出路别…
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

9
 
不是很懂,想知道,帮顶.
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表