硬件课程设计.docx
《硬件课程设计.docx》由会员分享,可在线阅读,更多相关《硬件课程设计.docx(18页珍藏版)》请在冰点文库上搜索。
硬件课程设计
西安邮电学院
课程设计实验报告
系部名称
:
计算机系
学生姓名
:
***
专业名称
:
计算机科学与技术
班级
:
计科0701
学号
:
***
时间
:
2010年6月21日至2010年7月2日
指导老师
:
***
实验一:
简易电子琴
一.实验目的
学习可编程并行接口芯片8255A和可编程定时器/计数器芯片8253实现电子琴的模拟控制,进一步掌握并行接口和定时器/计数器及数码管和逻辑开关控制的实际应用。
二.实验内容
1、在PC键盘上定义七个按键,分别对应1,2,3,4,5,6,7七个音符,按键退出
2、在按下重放键(R或者r键)后,将存之PC内存中的音符读出并播放对应的音乐,即完成重放功能
3、要求使用8255,8253,8259A中的至少两个芯片完成实验。
三.实验原理及思路
1、设计原理
(1)对于一个特定的D/A转换接口电路,CPU执行一条输出指令将数据送入D/A,即可在其输出端得到一定的电压输出。
给D/A转换器输入按正弦规律变化的数据,在其输出端即可产生正弦波。
对于音乐,每个音阶都有确定的频率。
各音阶标称频率值:
(2)产生一个正弦波的数据可取32个(小于亦可),不同频率的区别,可通过调节向D/A转换器输出数据的时间间隔,例如:
发"1"频率为261。
1HZ,周期为1/261.1=3.83ms,输出数据的时间间隔为3.83ms/32=0.12ms.定时时间可以由8253配合8255来实现。
按下某键后发音时间的长短可以由发出的正弦波的个数多少来控制。
2、电路连接图
(1)8253和8255连接如下
(2)使用PC键盘作为音符输入,完成人机交互的部分。
数字键盘的1~7表示音符CDEFGAB,即Do、Re、Mi、Fa、Sol、La、Si
3.实验流程
在本次课程设计中,根据复杂程序设计思想——模块化程序设计,分析和确定程序总体设计目标:
电子琴基本功能及部分扩展功能后,将总体目标划分为若干模块(子程序,具体可见下)。
程序设计的思路按以下顺序进行:
(1)根据实验箱(TD-PIT/TD-PIT++)分析系统,并完成连线图的设计
(2)在
(1)的基础上确定代码中的硬件接口,此部分要求设计封闭。
(3)确定程序总体设计目标,将总体目标划分为若干模块
(4)在
(1)
(2)的基础上完成硬件的连接,并相应的做出程序的部分编写
(4)定义每个模块的具体任务,明确它与其他模块间的通信方式
(5)编写模块式的源程序,并在硬件基础上开机进行调试。
(6)模块连接,形成完整的程序,并上机进行系统测试和Debug
(7)测试完成,修改错误的和标记的注释内容,并做系统的检查
(8)检查无误,交由老师负责检查和提问
(7)写程序设计文档,完成实验
四.实验流程图
五.调试情况,设计技巧及体会
拿到这次课程设计的八个题目,看到周围绝大多数同学选择了交通灯,我和万祺同学经过讨论一致决定选择电子琴。
第一天,我们主要复习了微机接口中有关芯片的知识为后面的实验打好基础。
第二天,我们认真分析了电子琴的原理,设计了实验流和连线图。
第三天,我们搭建好实验电路,先编写了让电子琴发音的汇编程序并调试通过。
第四天,在前一天的程序基础上编写发音回放程序部分,最终完成实验。
第五天,验收检查。
在实验过程中我和**同学一起设计了实验流程,我还负责了电路连线和部分程序编写调试。
六、源程序清单
MY8255_PAEQU1400H
MY8255_MODEEQU1403H
MY8253_0EQU1440H
MY8253_MODEEQU1443H
DATASEGMENT
PRINT_INPUTDB'pleaseinput:
1,2,3,4,5,6,7',0AH,0DH
DB'inputSPACEwillexit',0AH,0DH,'$'
PRINT_ERRORDB0AH,0DH,'ERROR!
!
INPUTAGAIN',0AH,0DH,'$'
PRINT_REPLAYDB0AH,0DH,'REPLAYING...',0AH,0DH,'$'
MUSIC_BUFDB50,?
KEY_COUNTDB0
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEADX,PRINT_INPUT
MOVAH,09
INT21H
LEASI,MUSIC_BUF
NEXT_CHORCH:
CALLINPUT
CMPDL,20H;SPACE
JZEND_DZQ
CMPDL,72H
JZREPLAY
CMPDL,52H
JZREPLAY
CALL__KEY
JMPNEXT_CHORCH
REPLAY:
CALLREPLAY_MUSIC
JMPNEXT_CHORCH
END_DZQ:
INIT_8255PROCNEAR
MOVAL,10001011B;控制字A口输出
MOVDX,MY8255_MODE
OUTDX,AL
MOVAL,CL
MOVDX,MY8255_PA
OUTDX,AL
RET
INIT_8255ENDP
INIT_8253PROCNEAR
MOVAL,37H;8253初始化,计数器0,工作在方式3,16位计数
MOVDX,MY8253_MODE
OUTDX,AL
MOVAL,BL;置入计数初值
MOVDX,MY8253_0
OUTDX,AL
MOVAL,BH
OUTDX,AL
CALLDELAY
MOVAL,00110000B
MOVDX,MY8253_MODE
OUTDX,AL
RET
RET
INIT_8253ENDP
INPUTPROCNEAR
MOVAH,1
INT21H
CMPAL,31H
JBSKIP
CMPAL,37H
JASKIP
MOV[SI],AL
INCSI
MOVDH,KEY_COUNT
INCDH
MOVKEY_COUNT,DH
SKIP:
MOVDL,AL
RET
INPUTENDP
REPLAY_MUSICPROCNEAR
LEADX,PRINT_REPLAY
MOVAH,09
INT21H
MOVDH,KEY_COUNT
SUBDH,30H
LEASI,MUSIC_BUF
RETRY:
MOVDL,[SI]
CALL__KEY
INCSI
DECDH
JNZRETRY
END_REPLAY:
RET
REPLAY_MUSICENDP
DELAYPROCNEAR
MOVBX,02000H
INCX:
MOVCX,0FFFFH
DELAY2:
LOOPDELAY2
DECBX;置延迟时间常数BL
JNZINCX
RET
DELAYENDP
MOVAH,4CH
INT21H
__KEYPROCNEAR
PUSHDX
CMPDL,31H
JZDo
CMPDL,32H
JZRe
CMPDL,33H
JZMi
CMPDL,34H
JZFa
CMPDL,35H
JZSo
CMPDL,36H
JZLa
CMPDL,37H
JZSii
JMPERROR
Do:
MOVBX,1912;1908
MOVCL,11111110B
JMPNEXT
Re:
MOVBX,1702;1700
MOVCL,11111101B
JMPNEXT
Mi:
MOVBX,1517;1515
MOVCL,11111011B
JMPNEXT
Fa:
MOVBX,1431;1432
MOVCL,11110111B
JMPNEXT
So:
MOVBX,1275;1275
MOVCL,11101111B
JMPNEXT
La:
MOVBX,1136;1136
MOVCL,11011111B
JMPNEXT
Sii:
MOVBX,1012;1012
MOVCL,10111111B
JMPNEXT
ERROR:
LEADX,PRINT_ERROR
MOVAH,09
INT21H
JMPSHUT
NEXT:
CALLINIT_8255
CALLINIT_8253
SHUT:
POPDX
RET
__KEYENDP
CODEENDS
ENDSTART
实验二基本模型机设计与实现
一.实验目的
1.在掌握部件单元电路实验的基础上,将微程序控制器模块与运算器模块、存储器模块组合成一起,组成一台基本模型计算机。
2.通过CPU运行五条机器指令组成的简单程序,掌握机器指令与微指令的关系,建立利用指令控制整机(输入、输出、运算、存储系统)的概念。
二.实验内容
1、实验原理
部件实验过程中,各部件单元的控制信号是人为模拟产生的,而本次实验将能在微程序控制下自动产生各部件单元控制信号,实现特定指令的功能。
这里,实验计算机数据通路的控制将由微程序控制器来完成,CPU从内存中取出一条机器指令到指令执行结束的一个指令周期全部由微指令组成的序列来完成,即一条机器指令对应一个微程序。
⑴有关微控制器部分在前一实验中已详细介绍
⑵主存储器的读、写和运行
为了向主存储器RAM中装入程序或数据,并且检查写入是否正确以及能运行主存储器中的程序,必须设计三个控制操作微程序。
存储器读操作:
拨动总清开关后,置控制开关SWC、SWA为"00"时,按要求连线后,连续按"启动运行"开关,可对主存储器RAM连续手动读操作。
存储器写操作:
拨动总清开关后,置控制开关SWC、SWA为"01"时,按要求连线后,再按"启动运行"开关,可对主存储器RAM进行连续手动写入。
运行程序:
拨动总清开关后,置控制开关SWC、SWA为"11"时,按要求连线后,再按"启动运行"开关,即可转入到第01号"取址"微指令,启动程序运行
上述三条控制指令用两个开关SWC、SWA的状态来设置,其定义如下:
⑶指令寄存器介绍
指令寄存器用来保存当前正在执行的一条指令。
当执行一条指令时,先把它从内存取到缓冲寄存器中,然后再传送到指令寄存器。
指令划分为操作码和地址码字段,由二进制构成,为了执行任何一条给定的指令,必须对操作码进行测试P
(1),通过节拍脉冲T4的控制以便识别所要求的操作。
"指令译码器"根据指令中的操作码进行译码,强置微控器单元的微地址,使下一条微指令指向相应的微程序首地址。
⑷输入/输出设备
本系统有两种外部I/O设备,一种是二进制代码开关KD0~KD7,它作为输入设备INPUT;另一种是数码显示块,它作为输出设备OUTPUT。
例如:
输入时,二进制开关数据直接经过三态门送到外部数据总线上,只要开关状态不变,输入的信息也不变。
输出时,将输出数据送到外部数据总线上,当写信号(W/R)有效时,将数据打入输出锁存器,驱动数码块显示。
⑸设计指令
根据基本模型机的硬件设计五条机器指令:
外设输入指令IN、二进制加法指令ADD、存数指令STA、输出到外设指令OUT、无条件转移指令JMP。
指令格式如下:
助记符 机器指令码 说 明
IN 0000 0000;"外部开关量输入"KD0~KD7的开关状态→R0
ADDaddr0001 0000××××××××; R0+[addr]→R0
STAaddr0010 0000××××××××;R0→[addr]
OUTaddr0011 0000××××××××;[addr]→BUS
JMPaddr0100 0000××××××××;[addr]→PC
说明:
指令IN为单字节指令,其余均为双字节指令,××××××××为addr对应的主存储器二进制地址码。
⑹基本模型机监控软件的设计
本模型机监控软件主要完成从输入设备读入数据,进行简单算术运算后,将结果存入内存的某个单元,最后通过输出设备输出结果。
监控软件详细如下:
地 址 内容 助记符 说 明
0000 0000 0000 0000 IN ;"INPUT DEVICE"→R0
0000 0001 0001 0000 ADD[0AH];R0+[0AH]→R0
0000 0010 0000 1010
0000 0011 0010 0000 STA[0BH];R0→[0BH]
0000 0100 0000 1011
0000 0101 0011 0000 OUT[0BH];[0BH]→BUS
0000 0110 0000 1011
0000 0111 0100 0000 JMP[00H];00H→PC
0000 1000 0000 0000
0000 1001
0000 1010 0000 0001 ;自定义参加运算的数
0000 1011 ;求和结果存放单元
三.实验结构图
四.二进制代码表
s3
s2
s1
s0
M
CN
WE
A9
A8
A
B
C
UA5…UA0
0
0
0
0
0
0
0
1
1
110
110
110
011001
0
0
0
0
0
0
0
1
1
010
001
000
011101
0
0
0
0
0
0
0
1
1
010
001
000
011110
0
0
0
0
0
0
0
1
1
010
001
000
101011
0
0
0
0
0
0
0
1
1
010
001
000
000001
0
0
0
0
0
0
0
1
1
001
101
000
010110
0
0
1
1
0
0
0
1
1
010
001
000
000001
0
0
0
0
0
0
0
1
1
001
101
000
011010
0
0
0
0
1
0
0
1
1
110
000
000
011011
0
0
0
0
0
0
0
0
1
011
000
000
011100
0
0
0
0
0
0
0
0
1
010
001
000
000001
0
0
0
0
0
0
0
1
1
001
101
000
000001
0
1
1
0
0
0
0
1
1
001
101
000
000001
0
0
0
0
0
0
0
1
1
001
101
000
000001
1
1
1
1
0
1
0
1
1
001
101
000
000001
1
1
0
0
0
1
0
1
1
001
101
000
000001
五.实验程序
00
0000
0000
IN
01
0001
0000
ADD[28H]
02
0010
1000
03
0010
0000
STA[2AH]
04
0010
1010
05
0011
0000
OUT
06
0010
1010
07
0101
0000
SUC[29H]
08
0010
1001
09
0010
0000
STA
0A
00101
1010
0B
0011
0000
OUT
0C
0010
1010
0D
0110
0000
INC
0E
0010
0000
STA
0F
0010
1010
10
0011
0000
OUT
11
0010
1010
12
0111
0000
DEC
13
0010
0000
STA
14
0010
1010
15
0011
0000
OUT
16
0010
1010
17
1000
0000
A+A
18
0010
0000
STA
19
0010
1010
1A
0011
0000
OUT
1B
0010
1010
1C
1001
0000
清0
1D
0010
0000
STA
1E
0010
1010
1F
0011
0000
20
0010
1010
21
1010
0000
22
0010
0000
23
0010
1010
24
0011
0000
25
0010
1010
26
0100
0000
27
0000
0000
28
0000
1010
加数为10
29
0000
0101
减数为5
2A
0000
0000
六.调试情况,设计技巧及体会
通过紧张有序的一周的课程设计实践,不仅让我对计算机的基本组成、简单运算器的数据传送通路组成、静态随机存取存储器RAM工作特性及数据的读写方法、时序信号发生电路组成原理、微程序控制器的设计思想和组成原理、微程序的编制、写入过程有了进一步的了解,也让我觉得自己的动手能力有了很大的提高;自信心也增强了,在课程设计中自己动脑子解决遇到的问题,书本上的知识有了用武之地,这巩固和深化了自己的知识结构。
通过这次实践,我相信,只要自己在每一次实践中都能仔细思考,课程设计其实都不会很难,关键在于自己能不能认真思考,能不能亲自动手做实验,而不是想着其他人的劳动果实,其次你还要多操作,只有多操作才能从中发现问题,才能及时向老师和同学请教,解决问题,从而更好的掌握书本中知识。
还有通过这次实践也让我懂得了:
学校安排课程设计目的不在于你做了多少,不在于你做得好不好,关键在于你能否认真去对待,在于你能否通过这次设计对课本上知识有了更深刻的认识,在于能否从中学到书本上学不到的知识。
因此,我会认真地对待我的每一次实验。