《微机原理与接口实验-电子琴设计(共14页).doc》由会员分享,可在线阅读,更多相关《微机原理与接口实验-电子琴设计(共14页).doc(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上微机原理与接口实验_电子琴一、设计目的通过课程设计使学生更进一步掌握微机原理及应用课程的有关知识,提高应用微机解决问题的能力,加深对微机应用的理解。通过查阅资料,结合所学知识进行软、硬件的设计,使学生初步掌握应用微机解决问题的步骤及方法。为以后学生结合专业从事微机应用设计奠定基础。二、设计的原始资料及依据查阅定时器8254,可编程8255及音节的频率范围等资料。通过改变键盘输入来改变8254输出频率,实现扬声器发音。三、设计的主要内容及要求利用微机原理试验箱,设计简易电子琴,要求至少可以弹出7个音阶。四、 设计完成后应提交成果的种类、数量、质量等方面的要求;提交课程设
2、计说明书一份。在说明书中要有设计原理、硬件电路接线图、设计的程序及必要注释等。七、主要参考资料(文献)、微机原理与应用大连理工大学出版社、微机原理与接口技术北京航空航天大学出版社、微型计算机原理与汇编语言电子工业出版社、汇编语言程序设计中央广播电视大学出版社 中文摘要和关键词本实验是利用微机原理试验箱、8255芯片、8254芯片、键盘、扬声器等硬件设备,设计简易电子琴。首先利用了编程程序,编辑了8255芯片控制字, 对其进行初始化,使其工作在方式0,即基本输入输出状态,将8255的A端口设置为输出,C端口进行,经CPU运算后, 输出到8254芯片的A端口中,由此实现对其的初始化。将8254芯片
3、设置为工作在方式3,即输出对称方波状态。A端口为输入,“OUT”指令可将输出对应一定频率的方波送到扬声器中,由此实现发声。本实验通过频率大小控制发出声音的高低,通过对延时程序的调用控制发出声音的长短。并通过所编程序实现对键盘的重复扫描,重而可以弹奏多个音符的试验目的。关键字: 编程、工作方式、运算一、设计题目:简易电子琴设计二、设计内容:利用微机原理试验箱,设计简易电子琴。三、设计目的:通过课程设计使学生更进一步掌握微机原理及应用课程的有关知识,提高应用微机解决问题的能力,加深对微机应用的理解。通过查阅资料,结合所学知识进行软、硬件的设计,使学生初步掌握应用微机解决问题的步骤及方法。为以后学生
4、结合专业从事微机应用设计奠定基础。四、设计要求:1可以弹出7个音阶。2弹奏简短音乐。3通过改变键盘输入来改变8254输出频率,实现扬声器发音五、设计原理:音符与频率的关系如表所示,而持续时间则取决于乐曲的速度和每个音符持续的长短。在拍号为4/4的乐曲中,每小节包含拍,全音符持续拍,二分音符持续拍,四分音符持续拍,八分音符持续半拍等等。根据乐曲进行速度,假设一个全音符分配S时间,则每拍持续时间为MS。如果持续时间的最小单位是MS,则相应的拍长时间数据为,该数据存放在BX寄存器中,从而可以确定每个音符的持续时间。音符123456712345671频率131147165175196220247262
5、294330349392440494523六、元器件功能简介:18255引脚功能RESET:复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。CS:片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许8255与CPU进行通讯。RD:读信号线,当这个输入引脚为低电平时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。WR:写入信号,当这个输入引脚为低电平时,允许CPU将数据或控制字写入8255。D0D7:三态双向数据总线,8255与CPU数据传送的通道,当CPU 执行输入输出指令时,通过它实现8
6、位数据的读/写操作,控制字和状态信息也通过数据总线传送。PA0PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入锁存器。PB0PB7:端口B输入输出线,一个8位的I/O锁存器, 一个8位的输入输出缓冲器。PC0PC7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入缓冲器。端口C可以通过工作方式设定而分成2个4位的端口, 每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。A1、A0:端口地址总线,8255中有端口A、B、C和一个内部控制字寄存器,共4个端口,由A0、A1输入地址信号来寻址
7、。本实验用到的引脚有PA0-PA3、PC0-PC3、D0-D7、A0、A1、WR、RD、CS 、和GND 。 图 1. 8255的控制字格式28254 可编程计数定时器芯片完成对外部脉冲信号的各种处理。8254芯片内部具有三个独立的16位计数器,它可用程序设置成多种工作方式,按十进制计数或二进制计数,最高计数速率可达10MHz。8254的全部功能是由CPU编程设定的。CPU通过输出指令给8254装入控制字,从而设定其功能。8254控制字格式如下: D7 D6 D5 D4 D3 D2 D1 D0SC1SC0RL1RL0M2M1M0BCD 各位的功能见表1表4: 表1 SC1、SC0 计数器选择S
8、C1 SC0选择计数器0 0选择0#0 1选择1#1 0选择2#1 1使用方法参见8254使用说明 表2 RL1、RL0CPU读写操作RL1 RL0操作类型0 0计数器封锁操作0 1读写计数器低8位1 0读写计数器高8位1 1先读写低8位,后读写高8位 表3 M2、M1、M0 工作方式选择M3 M2 M1计 数 工 作 方 式0 0 0方 式 00 0 1方 式 10 1 0方 式 20 1 1方 式 31 0 0方 式 41 0 1方 式 5 表4 BCD计数方式选择BCD数 码 形 式0十六位二进制计数1四位十进制 ( BCD ) 码计数七、设计原程序及注解程序代码:MY8255_A EQ
9、U 0600HMY8255_B EQU 0602HMY8255_C EQU 0604H MY8255_MODE EQU 0606HMY8254_MODE EQU 06C6HMY8254_A EQU 06C0H ;进行宏定义DATA SEGMENTFREQ_LIST DW 441D,495D,556D,589D,661D,742D,833D,882D,262D,294D,330D,373D,402D,450D,494D,-1DDATA ENDS;建立数据段CODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AX ;实现段寄存器D
10、S的初始化 MOV DX,MY8255_MODEMOV AL,81HOUT DX,AL ;写8255芯片的控制字,实 现工作在方式0,A端口和B端口输出,C端口输入MOV DX,MY8254_MODEMOV AL,36HOUT DX,AL ;使8254工作在方式3,A 口输入,运用计数器0,二进制方式BEGIN: CALL CCSCAN ;扫描JNZ INK1 ;有键按下时跳到INK1JMP BEGIN ;没见按下时循环执行 BEGIN;确定按下键的位置INK1: MOV CH,0FEH ;确定按下键在第一列 MOV CL,00H ;将CL清零COLUM: MOV AL,CH MOV DX,M
11、Y8255_A ;将8255的A口地址赋给DX OUT DX,AL ;将CPU中的AL值送到8255 的A口中,即送到x1、x2、 x3、x4中 MOV DX,MY8255_C ; 将8255的C口地址赋给DX IN AL,DX ;将C口的值送到AL中 L1: TEST AL,01H ;检验按下键是否在L1 JNZ L2 ;不是L1则跳到L2 MOV AL,00H ;为了后面用来与FREQ_LIST 数据段中数对应 JMP KCODE ;强制跳转到KCODEL2: TEST AL,02H ;检验按下键是否在L2 JNZ L3 ;不是L2则跳到L3MOV AL,04H ;为了后面用来与FREQ_
12、LIST 数据段中数对应。JMP KCODE ;强制跳转到KCODEL3: TEST AL,04H ;检验按下键是否在L23 JNZ L4 ;不是L3则跳到L4MOV AL,08H ;为了后面用来与FREQ_LIST 数据段中数对应。JMP KCODE ;强制跳转到KCODEL4: TEST AL,08H ;检验按下键是否在L4 JNZ NEXT ;不是L4则跳到NEXTMOV AL,0CH ;为了后面用来与FREQ_LIST 数据段中数对应。KCODE: ADD AL,CL ;实现AL与CL的无进位加法 MOV DL,2D MUL DL ;将AL乘以2结果保存到AX中 PLAY: MOV S
13、I,OFFSET FREQ_LIST ;使SI指向 FREQ_LIST的首地址 ADD SI,AX ;通过SI加AX 实现指针SI的移动 MOV DX,0FH MOV AX,4240H ;被除数为0F4240H DIV WORD PTRSI ;除数为SI所指的数据 MOV DX,MY8254_A ;将8255的A口地址赋给DX OUT DX,AL ;输出商的低4位 MOV AL,AH OUT DX,AL ;输出商的高4位 MOV CX,8D ;输入计数值CX NEXT3: CALL DALLY ;调用延时子程序DALLYLOOP NEXT3 ;CX不为0重复执行NEXT3 MOV DX,0FH
14、 MOV AX,4240H ;被除数为0F4240H MOV SI ,30D DIV WORD PTRSI ;除数为SI=30所指的数据 MOV DX,MY8254_A ;将8255的A口地址赋给DX OUT DX,AL MOV AL,AH OUT DX,AL ;实现静音,结束一个音符的发音 JMP BEGIN ;跳转到BEGIN,重复扫描NEXT: INC CL ;使CL加1,为了后面用来与FREQ_LIST数据段中数对应 MOV AL,CH TEST AL,08H JZ KERR ;无键按下时跳转到KERR ROL AL,1D ;向左移位 MOV CH,AL JMP COLUM ;强制跳转
15、到COLUMKERR: JMP BEGIN ;跳到BEGIN重新开始扫描;键盘扫描子程序CCSCAN: MOV AL,00H MOV DX,MY8255_A OUT DX,AL ;使8255芯片A端口输出 为0,既使x1、x2、x3、 X4为0 MOV DX,MY8255_C IN AL,DX ;将从C端口输入的y1、y2、y3、y4送到AL中NOT AL ;将AL取反 AND AL,0FH ;将AL前4位清零RET;延时子程序DALLY: PUSH CX ;将CX压栈 MOV CX,000FH T1: MOV AX,0009FHT2: DEC AX ;使AX减1JNZ T2 ;AX不为0重复
16、T2LOOP T1 ;CX不为0重复T1POP CX ;将CX出栈RETCODEENDS ;代码段定义结束END START ;程序结束八、程序流程图:开始程序初始化调用按键扫描程序是否有按键测试按键位置N播放Y九、程序接线图:键 X1盘 数 X4码 管 Y1显示 Y2单元PA0 D0PA3 D7PC0 A0PC3 A2 WR RD CS8255单元XD0 XD0XD7 XD7XA1 XA1XA2 XA2IOW IOWIOR IORIOY0 IOY3 CLK系统总线D0D7 GATE0A0A1 OUT0WRRDCSCLK08254单元电子发声单 元 +5V右图Y组对应8255芯片的C口(Y值为
17、1)与+5V连 L1 L2 L3 L413141516910111256781234Y4Y3 X组对应8255芯片的A口(X值为0)Y2当有键按下时如5键,其对应的Y值Y2为0,则8255芯片由C口输入的数 Y1值为1101给AL。 X1 X2 X3 X4 总 结本学期我们有一周的微机原理课设,虽然时间不是很长,但对我而言收获却很多,也体会到了电子设计行业工作的辛苦,经过老师细心的讲解和我们的不懈努力,最终我组能够把学到的知识运用到实际中去,这让我对本学科的学习产生了更加浓厚的兴趣,但一切都是值得的。这次课程设计对我综合运用所学知识的能力的提高有不小的帮助,之前做的实验都是很简单的编程,跟硬件
18、结合也没有这么复杂,实现的功能都比较简单,可是这次要实现的功能相对来说比较复杂,要求掌握的知识比较综合。经过一周的实训,汇编语言的一些编程设计等操作可以较为熟练,微机原理课程所涉及到的领域和应用的范围也得到了更多的了解,总的来说,实训的一周是丰富而有成功的。刚开始学习汇编语言是相当吃力的,许多内容在以前没有接触过,许多源代码不能理解,实训的头两天就是很简单的试着操作这些内容一点点的积累掌握,回去后不理解的地方赶紧询问其他同学以便在第二天上机时应用好,经过不懈的努力,终于将一个简单的电子琴程序设计完成。汇编语言是一门较难的计算机内容,开始学习的时候较为困难,但是平时的课堂的学习和这一次的集中的上
19、机实训,使我不但能够较好的了解并掌握了一些汇编语言的知识和技能,相信在以后的社会生活中也可以得到应用。在最后的答辩前,我对几天来在对几个程序的编排和改进上所遇到的问题又进行了认真的总结,使我对整个程序都有了很深的了解,而且也可以熟练的操作和应用到程序中去,也顺利的通过了答辩。这是一次成功的实训,也是应值得远记住的一次实训,在这次实训中我充分感受到了集体的力量,在我组组员的共同努力下,我们的电子琴程序从无到有、功能从弱到强,一步步的走向成功,这段经历将成为我生活中一段宝贵的精神财富。参考文献:、微机原理与应用大连理工大学出版社、微机原理与接口技术北京航空航天大学出版社、微型计算机原理与汇编语言电子工业出版社、汇编语言程序设计中央广播电视大学出版社 专心-专注-专业