ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:151.90KB ,
资源ID:7156006      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7156006.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(微机原理课程设计.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

微机原理课程设计.docx

1、微机原理课程设计摘 要 微机原理课程设计设计简易电子琴 本实验是利用微机原理试验箱、8255芯片、8254芯片、键盘、扬声器等硬件设备,设计简易电子琴。首先利用了编程程序,编辑了8255芯片控制字, 对其进行初始化,使其工作在方式0,即基本输入输出状态,将8255的A端口设置为输出,C端口进行,经CPU运算后, 输出到8254芯片中,由此实现对其的初始化。将8254芯片设置为工作在方式3,即输出对称方波状态。A端口为输入,“OUT”指令可将输出对应一定频率的方波送到扬声器中,由此实现发声。本实验通过频率大小控制发出声音的高低,通过对延时程序的调用控制发出声音的长短。并通过所编程序实现对键盘的重

2、复扫描,重而可以弹奏多个音符的试验目的。关键词 8254芯片 8255芯片 电子发声元件 键盘目 录 摘要.1目录 21. 实验内容.32. 实验要求.33. 工作原理.33.1 按键部分.33.2 发声部分.34. 程序流程图.44.1 按键部分 .44.2 发声部分.55. 硬件连接图及音符频率.66. 芯片简介.7 6.1 8254芯片简介7 6.2 8255芯片简介87. 程序代码.107.1 按键部分代码.10 7.2 发声部分代码.148. 键盘与数码显示管工作原理.17总结.18致谢.19参考文献.20 正文1. 实验内容:利用定时/计数器8254实现音乐演奏。2 实验要求:(1

3、)配合延时和控制程序控制扬声器发声(演奏音乐)。 (2)把键盘当作电子琴按键进行演奏。3 工作原理3.1 按键部分本程序是通过并行接口芯片8255对键盘进行扫描(对于键盘单元的工作原理见正文第9点),将8255芯片的PA0PA4,PC0PC4它们分别与键盘伤的X1X4,Y1Y4相连, 根据控制字81H,决定工作在方式0,A端口和B端口输出,C端口输入,由其C口将按键情况输入到CPU中,在CPU中进行一系列运算,通过定时器8254将不同频率的波形经OUTO输入到扬声器中,从而实现扬声器的发音。 本实验中8254的工作方式为方式3 ,输出的波形为对称方波。由于系统中8254的CLK端已固定接好频率

4、为1MHZ的方波信号,所以要控制其输出端OUT0输出不同的频率只要根据通过写入不同的计数初值就能实现。 公式为:CLK0端的输入频率/OUT0端的输出频率=计数初值N通过频率的大小控制音阶的不同,通过延时程序控制发音的长短,由此达到实验要求。 3.2 发声部分:发生部分由8254完成:一个音符对应一个频率,将对应一个音符频率的方波通到扬声器上,就可以发出这个音符的声音。将一段乐曲的音符对应频率的方波依次送到扬声器,就可以演奏出这段乐曲。利用8254的方式3“方波发生器”,将相应一种频率的计数初值写入计数器,就可产生对应频率的方波。计数初值的计算如下:计数初值 输入时钟 输出频率例如输入时钟采用

5、1MHz,要得到800Hz的频率,计数初值即为1000000800。音符与频率对照关系如表1所示。对于每一个音符的演奏时间,可以通过软件延时来处理。首先确定单位延时时间程序(根据CPU的频率不同而有所变化)。然后确定每个音符演奏需要几个单位时间,将这个值送入DL中,调用DALLY子程序即可。 4 程序流程图4.1 按键部分4.2 发声部分5 硬件连接图及音符频率6 芯片简介6.1 8254芯片简介1) D0-D7双向数据线,用以传送数据和控制字。计数器的计数值亦通过此数据总线进行读写。2) CS输入信号,低电平有效。作为片选。3) RD读控制信号,低电平有效。4) WR写控制信号,低电平有效5

6、) A0、A1为8254的内部计数器和一个控制寄存器的编码选择信号6) CLK0是每个计数器的时钟输入端。计数器对此时钟信号进行计数。CLK最高频率可达2MHZ。7) GATE0-GATE2门控制信号,即计数器的控制输出信号,用来控制计数器的工作。8) OUT0-OUT2计数器输出信号,用来产生不同方式工作时的输出波形9) 8254具有3个独立的16位计数器,6种不同的工作方式。计数寄存器用来寄存计数初值,计数工作单元为16位减1计数器,它的初值便是计数寄存器内容,计数单元对CLK脉冲计数,每出现一个CLK脉冲,计数器减1,当CLK端出现了规定个数的脉冲时,OUT输出一个脉冲信号。10) 本实

7、验中,我们用到的引脚有:D0-D7、A0-A1、WR、RD、CS、CLK0、GATE0、OUT0等;设定工作在方式3用来产生方波、应用计数器0。表1 8254的方式控制字格式表2 8254读出控制字格式表3 8254状态字格式6.2 8255芯片简介1) D0D7:三态双向数据总线,8255与CPU数据传送的通道,当CPU 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。2) PA0PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入锁存器。3) PB0PB7:端口B输入输出线,一个8位的I/O锁存器, 一个8位的输入输出缓冲

8、器。4) PC0PC7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入缓冲器。端口C可以通过工作方式设定而分成2个4位的端口, 每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。5) CS:片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许8255与CPU进行通讯。6) RD:读信号线,当这个输入引脚为低电平时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。7) WR:写入信号,当这个输入引脚为低电平时,允许CPU将数据或控制字写入8255。8) RESET:复位输入

9、线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。9) A1、A0:端口地址总线,8255中有端口A、B、C和一个内部控制字寄存器,共4个端口,由A0、A1输入地址信号来寻址。10) 本实验用到的引脚有PA0-PA3、PC0-PC3、D0-D7、A0、A1、WR、RD、CS 、和GND ;设定工作在方式0,A口输出、B口输出、C口低4位输入。 8255内部结构及引脚表4 8255 工作方式控制字图7 程序代码7.1 按键部分代码MY8255_A EQU 0600HMY8255_B EQU 0602HMY8255_C EQU 0604H MY82

10、55_MODE EQU 0606HMY8254_MODE EQU 06C6HMY8254_A EQU 06C0H ;进行宏定义MYDATA SEGMENTCHUSHU DW 441D,495D,556D,589D,661D,742D,833D,882D,221D,248D,278D,294D,330D,371D,416D,-1DMYDATA ENDS ;建立数据段 MYDATAMYCODE SEGMENT ;建立数据段 MYCODE ASSUME CS:MYCODE,DS:MYDATASTART: MOV AX,MYDATA MOV DS,AX ;实现段寄存器DS的初始化 MOV DX,MY8

11、255_MODE MOV AL,81H OUT DX,AL ;写8255芯片的控制字,实 ;现工作在方式0,A端口和B端口输出,C端口输入MOV DX,MY8254_MODE MOV AL,36H OUT DX,AL ;使8254工作在方式3,A ;口输入,运用计数器0,以二进制方式进行BEGIN: CALL CCSCAN ;调用扫描子程序 JNZ NUM1 ;有键按下时跳到NUM1 JMP BEGIN ;没键按下时循环执行 ; BEGIN;=;确定按下键的位置;=NUM1: CALL CCSCAN JNZ NUM2 ;有键按下时跳到NUM2 JMP BEGIN ;没键按下时循环执行BEGIN

12、NUM2: MOV CH,0FEH ;确定按下键在第一列 MOV CL,00H ;将CL清零COLUM: MOV AL,CH MOV DX,MY8255_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 ;为了后面用来与CHUSHU ;数据段中数对应 JMP KCODE ;强制跳转到KCOD

13、EL2: TEST AL,02H ;检验按下键是否在L2 JNZ L3 ;不是L2则跳到L3MOV AL,04H ;为了后面用来与CHUSHU ;据段中数对应。JMP KCODE ;强制跳转到KCODEL3: TEST AL,04H ;检验按下键是否在L23 JNZ L4 ;不是L3则跳到L4MOV AL,08H ;为了后面用来与CHUSHU数据段中数对应 JMP KCODE ;强制跳转到KCODEL4: TEST AL,08H ;检验按下键是否在L4 JNZ NEXT ;不是L4则跳到NEXTMOV AL,0CH ;为了后面用来与CHUSHU ;据段中数对应。KCODE: ADD AL,CL

14、 ;实现AL与CL的无进位加法 MOV DL,2H MUL DL ;将AL乘以2结果保存到AX中PLAY: LEA SI,CHUSHU ;使SI指向CHUSHU的首地址 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,8H ;输入计数值CX NEXT3: CALL DALLY ;调用延时

15、子程序DALLY CALL DALLYCALL DALLYCALL DALLYCALL DALLYLOOP NEXT3 ;CX不为0重复执行NEXT3 MOV DX,0FH 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,为了后面用来与CHUSHU 数;据段中数对应

16、MOV AL,CH TEST AL,08H JZ KERR ;无键按下时跳转到KERR ROL AL,1D ;向左移位 MOV CH,AL JMP COLUM ;强制跳转到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位清零

17、RET;=;延时子程序;=DALLY: PUSH CX ;将CX压栈 MOV CX,000FH T1: MOV AX,0009FHT2: DEC AX ;使AX减1 JNZ T2 ;AX不为0重复T2 LOOP T1 ;CX不为0重复T1 POP CX ;将CX出栈RETMYCODE ENDS ;代码段定义结束END START ;程序结束7.2 发声部分代码; 端口定义IOY3 EQU 06C0HIOY1 EQU 0640HMY8254_COUNT0 EQU IOY3+00H ;8254计数器0端口地址MY8254_COUNT1 EQU IOY3+02H ;8254计数器1端口地址MY825

18、4_COUNT2 EQU IOY3+04H ;8254计数器2端口地址MY8254_MODE EQU IOY3+06H ;8254控制寄存器端口地址MY8255_A EQU IOY1+00H ;8255输入输出0端口地址MY8255_B EQU IOY1+02H ;8255输入输出1端口地址MY8255_C EQU IOY1+04H ;8255输入输出2端口地址MY8255_MODE EQU IOY1+06H ;8255控制寄存器端口地址 STACK1 SEGMENT STACK DW 256 DUP(?)STACK1 ENDSDATA SEGMENT FREQ_LIST DW 330,393

19、,525,661, 661,700,589, 589,786,495,525 DW 661,700,786,525,525,589, 661,393,525,661, 661,700,589 DW 589,786,495,525, 661,700,786,525,525,589, 525,0TIME_LIST DB 4, 4, 4, 4, 12, 4, 16, 8, 4, 4, 16 DB 4, 4, 4, 4, 8, 8, 16, 4, 4, 4, 12, 4, 16 DB 8, 4, 4, 16, 4, 4, 4, 4, 8, 8, 16DATA ENDSCODE SEGMENT ASSU

20、ME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DX,MY8254_MODE ;ASSUME CS:CODE,DS:DATA ;初始化8254工作方式 MOV AL,36H ;定时器0、方式3 OUT DX,AL MOV DX, MY8255_MODE ;初始化8255 MOV AL, 90H ;A口输入,B口输出 OUT DX, AL XIE: MOV DX, MY8255_A IN AL, DX MOV DX, MY8255_B OUT DX, AL CALL DALLY CMP AL,01H JZ BEGIN JMP BEGINBE

21、GIN: MOV SI,OFFSET FREQ_LIST ;装入频率表起始地址 MOV DI,OFFSET TIME_LIST ;装入时间表起始地址 JMP PLAYPLAY: MOV DX,0FH ;输入时钟为1MHz,1M = 0F4240H MOV AX,4240H DIV WORD PTR SI ;取出频率值计算计数初值,0F4240H / 输出频率 MOV DX,MY8254_COUNT0 OUT DX,AL ;装入计数初值 MOV AL,AH OUT DX,AL MOV DL,DI ;取出演奏相对时间,调用延时子程序 CALL DALLY ADD SI,2 INC DI CMP W

22、ORD PTR SI,0 ;判断是否到曲末? JE XIE JMP PLAYDALLY PROC ;延时子程序D0: MOV CX,0010HD1: MOV BX,0FF0HD2: DEC BX JNZ D2 LOOP D1 DEC DL JNZ D0 RETDALLY ENDP CODE ENDS END START8 键盘与数码显示管工作原理 13141516910111256781234 (L4)Y4如图 (L3)Y3 X组对应8255芯片的A口(X值为0) (L2)Y2 Y组对应8255芯片的C口(Y值为1) (L1)Y1 。 X1 X2 X3 X4 当有键按下时,该键的X、Y接触,Y

23、值变为0,改变了输入8255芯片C口的数值,从而与程序中的L1,L2,L3,L4对应,确定按键位置。实现通过改变键盘输入来改变8254输出频率,实现扬声器发音。总 结随着科技的进步微机的应用已经很多,由传统的物理实现转变到软件实现,而且起精确程度也大大的提高,且实现方法也越来越简单。这些则是由汇编语言程序来实现的。在这里是在学完了微型计算机原理及应用,然后进行的课程设计,充分发挥了我的思维,学有所用,将学到的知识真正转化到了实际之中。先画出硬件设计图,这个过程是基础,然后是流程图,这个是重点,流程图的完成后在依据流程图进行程序的编写。通过对电子琴程序设计的汇编实现,对硬件特别是8254、825

24、5并行口的原理和实现都有了很深的了解。更加深了对汇编语言的使用.以前接触的那些程序都是很短、很基础的,但是在课程设计中碰到的那些需要很多代码才能完成的任务。所以在编写程序之前必须有一个完整清晰的思路设计好各个模块所实现的功能。其次,以前对于编程工具的使用还处于一知半解的状态上,但是经过一段上机的实践,对于怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个寄存器的内容以确保程序的正确性上都有了很大程度的提高。在完成我的设计的作品的时候,的的确确发生了很多问题,比如两个题目是否都要做,做哪个?放弃哪个?但是最后我们决定挑战一下,两个题目都做!还有更具体的问题比如说发声单元发声不规律,或者不

25、发声,发声无节奏等等,但是我秉着稳扎稳打的态度,对每一句汇编语言进行修正,和同组的同学进行讨论,最终将发声单元完善,做到能够自动播放音乐,我们组重新编写了曲目,使我们各自有各自的曲目,不重复。致 谢通过这次课程设计我们学到了不少东西,真正认识到了微机原理的重要性,了解到了CPU,8255、8254等芯片功能的强大。真正的运用自己的双手,完成了上大学以来的第一个运用微机原理试验箱设计而成的作品,收获颇多!当然,在设计的过程中我们遇到了很多的困难 。然而我们用耐心的去克服,用信心去解决。并且在解决问题的过程中,学到了很多实际的知识,很多是书本上学不到的,加深了我们对微机原理应用的认识。以前的上机课

26、上,我们所应用的程序都是很简单的编程,实现的功能都比较简单,而本次课设要求我们掌握的知识比较综合,从分析到编程,再到连线,完完全全是一个独立系统的过程。所以,在编制程序时遇到很多困难。 在解决问题时我们还体会到充分的调用用周围的资源是多么的重要。我们的一些问题都是自己首先通过查书查资料,通过图书馆,通过网络来解决的,最后,在还没有解决的情况下,再去问曲老师。这不仅培养了自己的解决问题的能力,同时,又熟悉了如何利用周边的资源快速有效的去解决问题。 给我最深刻的是作程序的要能够沉的住气,要有耐性! 一周的课程设计虽然短暂,但是我们全心地投入其中,养成了一种敢于钻研敢于创新的习惯,学会了静心钻研,与同组同学相互合作,如此才能把程序设计的更加完整,更加新颖! 通过课程设计,让我在课本的基础上,更深入的了解了各种芯片的用法和程序的完成过程,调试方法及技巧 。可以说是收益匪浅! 最后,衷心的谢谢曲乐声老师对我们的耐心指导,让我们能够顺利的迈进微机原理科学的殿堂,我相信我们会受益终生!参考文献1 王惠中. 微机原理及应用.武汉:武汉大学出版社,20112 邹逢兴. 微型计算机原理与接口技术实验指导. 北京:清华大学出版社,20093 赵全利, 吕建平, 邹雪艳.微型计算机原理及接口技术.北京: 机械工业出版社,20094 何宏.微型计算机原理与接口技术.陕西:西安电子科技大学出版社,

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1