怎样使用两个定时器?

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


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

回复评论 (8)

北航的馬東梅老師的書可以一看 雖然錯誤也很多 但是同類書中比較好的了
点赞  2009-5-9 00:09
不懂你说的一个定时器用来控制时间是不是控制300ms这个时间
点赞  2009-5-9 08:38
如果是的话,当用来控制时间的定时器一到300MS就来一个中断,进行把第二个定时间的初始值进行赋值,而且在这个定时器
里用一个值来记数,这样在那一次中断就对另一个定时器赋什么值!
点赞  2009-5-9 08:40
间隔300ms依次输出1,

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

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

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

不过会有误差

要误差小点,用状态机方式,不同的输出要求为不同的状态,然后采用不同的寄存器配置
点赞  2009-5-9 11:04
啊..可能题错了.不过还是不懂....可能意思是在300ms内输出800hz方波,下一300内输出1khz方波...如此类推..

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

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

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

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

不过会有误差

要误差小点,用状态机方式,不同的输出要求为不同的状态,然后采用不同的寄存器配置
点赞  2009-5-9 12:33
设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))。
就是这样,有了大体框架,楼主可以按照这个去实现。
点赞  2009-5-9 23:36
谢啦,哈哈

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

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


那么,整个待播放的音乐可以存放到一个结构数组中。
程序每次读取一个音符,进行播放。
有两种方法:循环和中断。建议用中断的,因为循环的话,播放期间,MCU无法出路别…
点赞  2009-5-10 00:47
不是很懂,想知道,帮顶.
点赞  2009-5-10 18:43
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复