微机原理与接口技术课设报告.docx
- 文档编号:16105704
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:18
- 大小:309.91KB
微机原理与接口技术课设报告.docx
《微机原理与接口技术课设报告.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术课设报告.docx(18页珍藏版)》请在冰点文库上搜索。
微机原理与接口技术课设报告
微机原理与接口技术
课程设计报告
2012年12月15
一、课程设计目的和意义
通过本次课程设计要掌握8254、8255芯片使用的方法,灵活运用课本知识,加深所学的知识,对所学的相关芯片的原理、内部结构、使用方法等有更加深刻的了解,学会利用课本知识联系实际应用及编程。
同时并了解综合问题的程序设计掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程,使我们以后搞设计时逻辑更加清晰。
二、设计任务
利用微机原理试验箱,设计简易电子琴,要求至少可以弹出7个音节,弹出音节可在计算机屏幕和数码管显示。
三、设计思想
本系统设计的电子时钟以8086微处理器作为CPU,用8254做定时计数器产生时钟频率,8255做可编程并行接口显示弹奏音节。
在此系统中,8254的功能是定时计数,接入8254的CLK信号为周期性时钟信号。
8254采用计数器0工作于方式0和方式3。
四、设计原理
本程序的主要设计原理是键盘数字键1~7按下控制选择不同的频率,实现计时结果的数码管和计算机屏幕显示,按SPACE退出程序。
程序先判断按键是否合法(在1~7),合法则键盘数字键1~7分别对应不同的子程序,8254写入不同的计数值,产生不同的频率,输出到发声单元发声。
1.8254可编程间隔定时器
图18254初始化字
由此,本设计中的8254的初始化为:
MOVAL,30H;采用计数器0,方式0,
MOVDX,MY8254_Mode
OUTDX,AL
MOVAL,37H;计数器0,方式3
MOVDX,MY8254_Mode
OUTDX,AL
8254是Intel公司生产的可编程间隔定时器。
是8253的改进型,比8253具有更优良的性能。
8254具有以下基本功能:
●有3个独立的16位计数器;
●每个计数器可按二进制或十进制(BCD)计数;每个计数器可编程工作于6种不同工作方式;每个计数器允许的最高计数频率为10MHz;
●8254有读回命令,除了可以读出当前计数单元的内容外,还可以读出状态寄存器的内容。
●计数脉冲可以是有规律的时钟信号,也可以是随机信号。
计数初值公式为n=fCLKi÷fOUTi,其中fCLKi是输入时钟脉冲的频率,fOUTi是输出波形的频率。
图2内部结构框图和引脚图
上图是8254的内部结构框图和引脚图,它是由与CPU的接口、内部控制电路和三个计数器组成。
8254的工作方式如下述:
(1)方式0:
计数到0结束输出正跃变信号方式。
(2)方式1:
硬件可重触发单稳方式。
(3)方式2:
频率发生器方式。
(4)方式3:
方波发生器。
(5)方式4:
软件触发选通方式。
(6)方式5:
硬件触发选通方式。
8254的控制字有两个:
一个用来设置计数器的工作方式,称为方式控制字;另一个用来设置读回命令,称为读回控制字。
这两个控制字共用一个地址,由标识位来区分。
当读回控制字的D4位为0时,由该读回控制字D1~D2位指定的计数器的状态寄存器内容将被锁存到状态寄存器中。
状态字格式如图2.6所示:
图38254状态字格式
2、8255可编程外围接口芯片
8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种工作方式下工作:
方式0—基本输入/输出方式
方式1—选通输入/输出方式
方式2—双向选通输入/输出方式
8255引脚图如图3.2示,各引脚功能如下。
D7~D0——与CPU侧连接的八条双向数据线;
WR(低电平有效)——写输入信号;
RD(低电平有效)——读输入信号;
CS(低电平有效)——片选输入信号;
A0、A1——片内寄存器选择输入信号;
PA7~PA0——A口外设双向数据线;
PB7~PB0——B口外设双向数据线;
PC7~PC0——C口外设双向数据线;
RESET——复位输入信号
图58254初始化字
由此,本设计中的8255的初始化为:
MOVAL,89H;控制字A口方式0输出
MOVDX,MY8255_Mode;PC7-PC0输入,B口方式0输出
OUTDX,AL
3、音符与频率对照关系
对于音乐,每个音阶都对应于一个确定的频率,将对应的音符频率的方波输出到扬声器上,就可以发出这个音符的声音。
音符与频率对照关系如表1所示。
五、软件流程图
六、硬件接线图
七、心得体会
经过了一周的课设,我们在忙绿中学到了很多知识,也明白了很多道理。
虽然我们组做的课设不是非常顺利,但也因此让我们意识到整个团队之间的合作精神是非常的重要。
对于平时只是接触到书本上的理论知识的我,这次课设让我对一些元件有了一个新的认识,“实践是检验真理的唯一标准”,通过课程设计我们才认识到自己还有很多地方要学习,很多理论上能实现的问题、在实际上都实现不了,问题层出不穷。
但是最终在我们的努力下,圆满的完成了此次课设。
刚开始课设的时候,我都不明白课设要干什么,更别说怎么干了。
我们参考了书本和一些资料,最终还是需要我们自己写的、我们首先在小组内讨论了课设的题目。
首先需要电子琴的程序,然后需要实验接线图,我们先了解了一些元器件的功能以及端口地址。
接下来我们参考了一份程序感觉可以,接着就调试了,出现了很多问题,我们一起讨论然后修改,最终没有了问题。
然后发出声音,按键后发出对应的音符,最后顺利的完成了课设,可以说这次课设我们获益匪浅。
课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下、我们的合作下解决了。
同时,也让我们意识到了课程设计是对我们学习综合素质的提高,明白了实践学习的重要性。
八、代码
;根据CHECK配置信息修改下列符
IOY0EQU09C00H
IOY3EQU09C80H
MY8255_AEQUIOY0+4*00H
MY8255_BEQUIOY0+4*01H
MY8255_ModeEQUIOY0+4*03H
MY8254_0EQUIOY3+4*00H
MY8254_ModeEQUIOY3+4*03H
DATASEGMENT
DisplayDB'Youcanplaythepianowithnumber:
1~7',0AH,0DH
DB'YoucanclickSPACEtoclosethepiano...',0AH,0DH,'$'
ErrorDB0AH,0DH,'Errror!
Youhavepressthewrongkey...',0AH,0DH,'$'
PlaceDB50DUP(?
)
CountDB0
IfemptyDB0AH,0DH,'ThePlaceisempty,Pleaseinputthemusicnoteatfirst.',0AH,0DH,'$'
tableDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;存放数码管显示的键值
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEADX,Display;显示字符串“Youcanplaythepianowithnumber:
1~7”
MOVAH,09H
INT21H
LEASI,Place;求输入缓冲区的位移
CONTINUE:
CALLINPUT;调用输入子函数
CMPDL,20H;判断输入是否为空格,空格则结束
JZEXIT
CMPDL,72H
JZREPLAY
CMPDL,52H
JZREPLAY
CALLNUMBER;若输入的是0~7的数字则去执行相应子函数
JMPCONTINUE;处理完当前输入的功能后去接收下次键盘输入
EXIT:
CALLQUIT
QUITPROCNEAR
MOVAL,30H;8254初始化,采用计数器0,方式0,
MOVDX,MY8254_Mode
OUTDX,AL
MOVAL,00H
MOVDX,MY8255_A
OUTDX,AL
MOVAL,01H
MOVDX,MY8254_0
OUTDX,AL
MOVAX,4C00H;返回DOS
INT21H
QUITENDP
8255INITPROCNEAR
MOVAL,89H;8255初始化,控制字A口方式0输出
MOVDX,MY8255_Mode;PC7-PC0输入,B口方式0输出
OUTDX,AL
MOVAL,0F7H
MOVDX,MY8255_B;B口输出,数码管显示
OUTDX,AL
MOVAL,CL
pushbx
MOVBX,OFFSETtable
ANDAX,00FFH
ADDBX,AX
MOVAL,[BX]
MOVDX,MY8255_A
OUTDX,AL
CALLDELAY2
POPBX
RET
8255INITENDP
8254INITPROCNEAR
MOVAL,37H;8254初始化:
计数器0,方式3
MOVDX,MY8254_Mode
OUTDX,AL
MOVAL,BL
MOVDX,MY8254_0
OUTDX,AL
MOVAL,BH
OUTDX,AL
CALLDELAY;延迟
MOVAL,30B;再将8255初始化为计数器0,工作方式0
MOVDX,MY8254_Mode
OUTDX,AL
RET
8254INITENDP
INPUTPROCNEAR;此子程序用于接收键盘输入数字并判断输入是否合法
MOVAH,1
INT21H
CMPAL,30H
JBSKIP
CMPAL,37H
JASKIP
MOVDH,Count;计数加1
CMPDH,32H;32H=50判断缓冲区有没有满
JZSKIP
INCDH
MOVCount,DH
MOV[SI],AL;输入的数字送入缓冲区
INCSI
SKIP:
MOVDL,AL
RET
INPUTENDP
DELAYPROCNEAR;延时程序,用于输入音符的延时
MOVBX,02000H
INCX:
MOVCX,0FFFFH
DELAY2:
LOOPDELAY2
DECBX
JNZINCX
RET
DELAYENDP
DELAY2PROCNEAR;延时程序,用于软件延时
PUSHCX
PUSHAX
MOVCX,4000H
D1:
MOVAX,0600H
D2:
DECAX
JNZD2
LOOPD1
POPAX
POPCX
RET
DELAY2ENDP
NUMBERPROCNEAR;判断输入的数字是不是在音节1~7中
PUSHDX
CMPDL,30H
JZZERO
CMPDL,31H;判断键盘输入是否为1
JZDo;跳到处理输入为1的子程序
CMPDL,32H
JZRe
CMPDL,33H
JZMi
CMPDL,34H
JZFa
CMPDL,35H
JZSo
CMPDL,36H
JZLa
CMPDL,37H
JZSi
JMPERROR;如果不是0—7就显示错误信息
ZERO:
MOVBX,1
MOVCL,1H
JMPNEXT
Do:
MOVBX,2267;1M/441=2267
MOVCL,01H
JMPNEXT;跳到调用发声、数码管显示子程序的程序
Re:
MOVBX,2020
MOVCL,02H
JMPNEXT;跳到调用发声、数码管显示子程序的程序
Mi:
MOVBX,1798
MOVCL,03H
JMPNEXT;同理
Fa:
MOVBX,1697
MOVCL,04H
JMPNEXT;同理
So:
MOVBX,1512
MOVCL,05H
JMPNEXT;同理
La:
MOVBX,1347
MOVCL,06H
JMPNEXT;同理
Si:
MOVBX,1199
MOVCL,07H
JMPNEXT;同理
ERROR:
LEADX,Error;用于提示用户输入错误的子程序
MOVAH,09H
INT21H
JMPSHUT
NEXT:
CALL8255INIT;调用用于数码管显示的子程序
CALL8254INIT;调用用于发声的子程序
SHUT:
POPDX
RET
NUMBERENDP
CODEENDS
ENDSTART
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 接口 技术 报告