单片机 实验四定时器设计.doc_第1页
单片机 实验四定时器设计.doc_第2页
单片机 实验四定时器设计.doc_第3页
单片机 实验四定时器设计.doc_第4页
单片机 实验四定时器设计.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机原理与应用实验实验四 定时器设计-电子音响一、实验目的1、学习MCS-51单片机定时器T0、T1的使用方法2、简单了解使用单片机演奏乐曲的操作原理。二、实验内容:利用定时器产生不同频率的方法,组成乐谱由单片机进行信息处理,经过放大后,利用8031 的P1.7口输出音乐新年好。三、基本原理1、原理图:2、让喇叭发出某个音符的方法不同的音符对应不同的频率。所以只要用不同频率的信号驱动喇叭,就能发出不同的音符了。所以转换为使用定时器在P1.7引脚输出某一频率的方波脉冲即可。如果知道了一个音符的频率后,怎样让单片机发出相应频率的声音呢?例如:某个音的频率f = 440 Hz,也就是使P1.7引脚上产生440Hz频率的方波。需要使用定时器定时来完成。周期为:T = 1/ f = 1/440 =2272s=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 MAINORG 000BHLJMPZHONGDUAN;对定时器T0初始化,使用定时方式1,定时初值FD80H(TMOD、IE、TH0、TL0、TCON等的设置)MAIN:。;初始化完成 MOV A,#04H ;这条指令可以省略ACALL DELAY ;这条指令可以省略 AJMP MAINDELAY:MOVR2,ADL1:MOV R7,#81HDL2:MOV R6,#0FFHDL3:DJNZ R6,DL3DJNZR7,DL2DJNZR2,DL1RETZHONGDUAN:;中断服务程序,给TH0、TL0重新赋初值;将P1.0引脚取反。RETIEND注意:题目中,延时程序的使用不是必须的,如果不延时,只要主程序不结束,定时器中断就会继续,所以一直是发出该声音。如果,让主程序结束,才会发出短暂的 该声音后结束。那就需要延时,不能让主程序结束太早。如果想实现 响停-响- 停这个过程,可以如下处理:主程序中LOOP: SETB TR0 MOV A,#04H LCALL DELAY CLR TR0 MOV A,#04HLCALL DELAYSJMP LOOP 4、音乐产生的原理单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率。因此单片机奏乐只需弄清楚两个概念,也就是“音调”和“节拍”。音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。乐谱中每一个音符都与某一个特定的频率相对应。所以只需要产生不同频率的方波信号(产生不同音调),并且延时不同的时间(产生不同节拍),即可完成音乐的播放。解释:节拍表示一个音符唱多长的时间音符的节拍我们可以举例来说明。以为例加以说明:它表示乐谱中以四分音符为节拍,每一小结有三拍。比如:其中1 、2 为一拍,3、4、5为一拍,6为一拍共三拍。1 、2的时长为四分音符的一半,即为八分音符长,3、4的时长为八分音符的一半,即为十六分音符长,5的时长为四分音符的一半,即为八分音符长,6的时长为四分音符长。一拍的时长大约为400500ms 。以一拍的时长为400ms为例,则当以四分音符为节拍时,四分音符的时长就为400ms,八分音符的时长就为200ms,十六分音符的时长就为100ms。所以,在单片机上控制一个音符唱多长可采用循环延时的方法来实现。首先,确定一个基本时长的延时程序,比如说以十六分音符的时长为基本延时时间,那么,对于一个音符,如果它为十六分音符,则只需调用一次延时程序,如果它为八分音符,则只需调用二次延时程序,如果它为四分音符,则只需调用四次延时程序,依次类推。5、将决定音调的定时器初值和决定节拍的延时时间做成表格的形式,即一个音有两个元素共占用3个字节:TH0+TL0(2个字节)、延时的次数(1个字节)。使用定时器0的方式1. 两个0FFH,0FFH表示结束。表结构给出:分析TAB: DB 0FEH,25H,04H,0FEH,25H,02HDB 0FEH,25H,02H,0FDH,80H,04HDB 0FEH,84H,02H,0FEH,84H,02HDB 0FEH,84H,04H,0FEH,25H,04HDB 0FEH,25H,02H,0FEH,84H,02HDB 0FEH,0C0H,04H,0FEH,84H,02HDB 0FEH,98H,02H,0FEH,84H,02HDB 0FEH,57H,08H,00H,00H,04HDB 0FFH,0FFH四、连线方法:(1)把P1.7用插针连至SIN插孔上。喇叭插头线插到DVCC系统J5插座。五、编程方法:1)首先给定时器初始化:MOV TMOD,#01H ;定时器方式1SETBEA ;开中断SETBET0取出表中的第一个、第二个值赋给TH0、TL0MOV DPTR,#TABCLRAMOVCA,A+DPTRMOVR1,A ;用R1暂存INCDPTRCLRAMOVCA,A+DPTRMOVR0,A ;用R0暂存还要注意:当表中的数值前两个数是0FF的时候,表示结束,要从头开始重新循环ANL A,R1 ;也就是前两个字节进行与运算。CJNE A,#0FFH,START启动定时器:MOVTH0,R1MOVTL0,R0SETBTR02)单个节拍的延时程序给出:A中的内容是取出的节拍个数,即表中每一个音的第3个字节。 DELAY:MOVR2,ADL1:MOV R7,#81HDL2:MOV R6,#0FFHDL3:DJNZ R6,DL3DJNZR7,DL2DJNZR2,DL1RET如何取出第三个字节内容呢?MOVCA,A+DPTRLCALL DELAY 3)中断服务程序:;完成两件事情,第一:要给P1.7取反,第二,定时器初值重装ZHONGDUAN:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论