单片机 实验四定时器设计.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机 实验四定时器设计

实验四 定时器设计---电子音响 一、实验目的 1、学习MCS-51单片机定时器T0、T1的使用方法 2、简单了解使用单片机演奏乐曲的操作原理。 二、实验内容: 利用定时器产生不同频率的方法,组成乐谱由单片机进行信息处理,经过放大后,利用8031 的P1.7口输出音乐《新年好》。 三、基本原理 1、原理图: 2、让喇叭发出某个音符的方法 不同的音符对应不同的频率。所以只要用不同频率的信号驱动喇叭,就能发出不同的音符了。所以转换为使用定时器在P1.7引脚输出某一频率的方波脉冲即可。 如果知道了一个音符的频率后,怎样让单片机发出相应频率的声音呢? 例如:某个音的频率f = 440 Hz,也就是使P1.7引脚上产生440Hz频率的方波。需要使用定时器定时来完成。 周期为:T = 1/ f = 1/440 =2272μs=2.272ms 所以可以使用定时器方式0或者方式1,每定时1.136ms就中断一次,中断服务程序中使P1.7引脚取反即可。 使用定时器方式1,晶振频率12Mhz,产生1.136ms的定时时间,那么定时器初值可以如下计算 : 同样的方法,可以计算出每一种音符的定时初值。 另外,只产生一个周期的方波脉冲时间太短,听不到。所以,将这一段脉冲延续一段时间。这里使用的道理是:定时器中断只要启动了就一直要继续,除非主程序结束或者关中断。所以主程序执行的时间也就是定时器工作的时间,也就是声音延续的时间。如果让主程序延时4个delay之后END,那么声音只会响4个delay的时长。但是如果主程序是个死循环,声音就会一直响下去,所以延时就没有必要了。 3、如何写出程序,定时初值FD80H,延时4个DELAY(每个DELAY大概为65ms),产生某个音? ORG 0000H SJMP MAIN ORG 000BH LJMP ZHONGDUAN ;对定时器T0初始化,使用定时方式1,定时初值FD80H(TMOD、IE、TH0、TL0、TCON等的设置) MAIN: 。。。。。。。。。。。。。 ;初始化完成 MOV A,#04H ;这条指令可以省略 ACALL DELAY ;这条指令可以省略 AJMP MAIN DELAY: MOV R2,A DL1: MOV R7,#81H DL2: MOV R6,#0FFH DL3: DJNZ R6,DL3 DJNZ R7,DL2 DJNZ R2,DL1 RET ZHONGDUAN: ;中断服务程序,给TH0、TL0重新赋初值 ;将P1.0引脚取反。 RETI END 注意:题目中,延时程序的使用不是必须的,如果不延时,只要主程序不结束,定时器中断就会继续,所以一直是发出该声音。 如果,让主程序结束,才会发出短暂的 该声音后结束。那就需要延时,不能让主程序结束太早。 如果想实现 响—停---响-- 停这个过程,可以如下处理: 主程序中LOOP: SETB TR0 MOV A,#04H LCALL DELAY CLR TR0 MOV A,#04H LCALL DELAY SJMP LOOP 4、音乐产生的原理 单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率。因此单片机奏乐只需弄清楚两个概念,也就是“音调”和“节拍”。 音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。乐谱中每一个音符都与某一个特定的频率相对应。所以只需要产生不同频率的方波信号(产生不同音调),并且延时不同的时间(产生不同节拍),即可完成音乐的播放。 解释:节拍表示一个音符唱多长的时间 音符的节拍我们可以举例来说明。 以为例加以说明:它表示乐谱中以四分音符为节拍,每一小结有三拍。比如: 其中1 、2 为一拍,3、4、5为一拍,6为一拍共三拍。1 、2的时长为四分音符的一半,即为八分音符长,3、4的时长为八分音符的一半,即为十六分音符长,5的时长为四分音符的一半,即为八分音符长,6的时长为四分音符长。 一拍的时长大约为400—500ms 。以一拍的时长为400ms为例,则当以四分音符为节拍时,四分音符的时长就为400ms,八分音符的时长就为200ms,十六分音符的时长就为100ms。 所以,在单片机上控制一个音符唱多长可采用循环延时的方法来实现。首先,确定一个基本时长的延时程序,比如说以十六分音符的时长为基本延时时间,那么,对于一个音符,如果它为十六分音符,则只需调用一次延时程序,如果它为八分音符,则只需调用二次延时程序,如果它为四分音符,则只需调用四次延时程序,依次类推。 5、将决定音调的

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档