扩展8255课程设计.docx
《扩展8255课程设计.docx》由会员分享,可在线阅读,更多相关《扩展8255课程设计.docx(19页珍藏版)》请在冰豆网上搜索。
扩展8255课程设计
一、课设目的及内容:
目的:
(1)在构成一台完整的模型机的基础上,控制真实的外围接口芯片,进行基本的8255并行口实验。
(2)熟悉用微过程控制模型机的数据通路,使学生掌握系统各功能模块的基本工作原理。
(3)培养学生单片机应用系统的设计能力;
(4)使学生较熟练地应用电子线路CAD工具完成单片机系统的硬件设计任务;
(5)学习设计与调试计算机的基本步骤及方法。
(6)将预习时编写的五条机器指令的微程序上机调试,通过执行机器指令,掌握各部联机运行情况,进一步建立整机概念。
内容:
(1)分析所设计系统中各功能模块的工作原理;
1.设计两条端口读写指令,以二进制数码开关作为8255的输入口,LED显示灯作为8255的输出口。
2.根据数据通路实现实验连线
3.熟悉系统数据通路,包括原理框图与实验箱布置。
4.编写一段程序,验证指令执行的正确性。
(2)选用合适的器件(芯片);
(3)提出系统的设计方案(要有系统电气原理图);
1.根据系统流程图,编写程序与微程序并调试通过
2.记录运行情况
(4)对所设计电路进行调试。
1.将指令做适当的修改操作并调试通过
2.验收,完成相应的实验报告
二、程序设计基本原理:
(1)实验模型机CPU结构
[1]运算器单元(ALUUINT)
运算器单元由以下部分构成:
两片74LS181构成了并-串型8位ALU;两个8位寄存器DR1和DR2为暂存工作寄存器,保存参数或中间运算结果。
ALU的S0~S3为运算控制端,Cn为最低进位输入,M为状态控制端。
ALU的输出通过三态门74LS245连到数据总线上,由ALU-B控制该三态门。
[2]寄存器堆单元(REGUNIT)
该部分由3片8位寄存器R0、R1、R2组成,它们用来保存操作数用中间运算结构等。
三个寄存器的输入输出均以连入数据总线,由LDRi和RS-B根据机器指令进行选通。
[3]指令寄存器单元(INSUNIT)
指令寄存器单元中指令寄存器(IR)构成模型机时用它作为指令译码电路的输入,实现程序的跳转,由LDIR控制其选通。
[4]时序电路单元(STATEUNIT)
用于输出连续或单个方波信号,来控制机器的运行。
[5]微控器电路单元(MICRO-CONTROLLERUNIT)
微控器主要用来完成接受机器指令译码器送来的代码,使控制转向相应机器指令对应的首条微代码程序,对该条机器指令的功能进行解释或执行的工作。
由输入的W/R信号控制微代码的输出锁存。
由程序计数器(PC)和地址寄存器(AR)实现程序的取指功能。
[6]逻辑译码单元(LOGUNIT)
用来根据机器指令及相应微代码进行译码使微程序转入相应的微地址入口,从而实现微程序的顺序、分支、循环运行,及工作寄存器R0、R1、R2的选通译码。
[7]主存储器单元(MAINMEM)
用于存储实验中的机器指令。
[8]输入输出单元(INPUT/OUTPUTDEVICE)
输入单元使用八个拨动开关作为输入设备,SW-B控制选通信号。
输出单元将输入数据置入锁存器后由两个数码管显示其值。
数据通路框图
图
(1)
扩展8255并行口实验
这个实验的原理图如上图
(1)所示。
部件实验过程中,各部件单元的控制信号是人为模拟产生的,而本次实验将能在微程序控制下自动产生各部件单元控制信号,实现特定指令的功能。
计算机数据通路的控制将由微程序控制器来完成,CPU从内存中取出一条机器指令到指令执行结束的一个指令周期全部由微指令组成的序列来完成,即一条机器指令对应与一个微程序。
本实验采用4条机器指令:
IN(输入)、COUT(端口写指令)、CIN(端口读指令)、JMP(无条件转移)其指令格式如下(前4位为操作码):
助记符机器指令码说明
IN00000000“外部开关量输入”的开关状态→R0
CINaddr00100000xxxxxxxxBUS→[addr]
COUTaddr00110000xxxxxxxx[addr]→BUS
JMPaddr01000000xxxxxxxxaddr→PC
其中IN为单字长(8位),其余为双字长指令,xxxxxxxx为addr对应的二进制地址码:
为了向RAM中装入程序和数据,检查写入是否正确,并能启动程序执行,还必须设计三个控制台操作微程序。
存储器读操作(KRD):
拨动总清开关CLR后,控制台开关SWB、SWA为“00”时,按START微动开关,可对RAM连续手动读操作。
存储器写操作(KWE):
拨动总清开关CLR后,控制台开关SWB、SWA为“01”时,按START微动开关,可对RAM进行连续手动写入。
启动程序:
拨动总清开关CLR后,控制台开关SWB、SWA置为“11”时,按START微动开关,即可转入到第01号“取址”微指令,启动程序运行。
SWB
SWA
控制台指令
0
0
读内存(KRD)
0
1
写内存(KWE)
1
1
启动程序(RP)
上述三条控制台指令用两个开关SWB、SWA的状态来设置,其定义如下:
微代码定义如下表所示:
24
23
22
21
20
19
18
17
16
151413
121110
987
6
5
4
3
2
1
S3
S2
S1
S0
M
Cn
WE
B1
B2
A
B
C
uA5
uA4
uA3
uA2
uA1
uA0
A字段B字段C字段
其中UA5-UA0为6位的后续微地址,A、B、C三个译码字段,分别由三个控制位译码出多位。
C字段中的P
(1)-P(4)是四个测试字位。
其功能是根据机器指令及相应微代码进行译码,使微程序转入相应的微地址入口,从而实现微程序的顺序、分支、循环运行。
B字段中的RD-B、R0-B、RI-B、分别为源寄存器选通信号、目的寄存器选通信号及变址寄存器选通信号其功能是根据机器指令来进行三个工作寄存R0、R1、R2的选通译码。
A8、A9为控制选通信号,当A8A9为00时,选通SW-B;为01时,选通CE;为10时,选通LED-B;为11时,表示均未选通。
S0~S3为运算控制控制信号,Cn为进位控制信号,M为状态控制控制信号。
原理如下图(图2),图中I0~I3为指令寄存器的第0~3位,LDRi打入工作寄存器信号的译码器使能控制位。
当拟定“取指”微指令时,该微指令的判别测试字段为P
(1)测试。
由于“取指”微指令是所有微程序都使用的公用微指令,因此P
(1)测试结果出现多路分支。
本机用指令寄存器的前4位(IR7-IR4)作为测试条件,出现5路分支,占用5个固定微地址单元。
控制台操作为P(4)测试,它以控制台开关SWB、SWA作为测试条件,出现了3路分支,占用3个固定微地址单元。
当分支微地址单元固定后,剩下的其它地方就可以一条微指令占用控存一个微地址单元随意填
本系统有两种I/O外部设备,一种是二进制代码开关,它作为输入设备(INPUTDEVICE);另一种是数码块,它作为输出设备(OUTPUTDEVICE)。
输入时,二进制开关数据直接经过三态门送到外部数据总线上,只要开关状态不变,输入的信息也不变。
输出时,将输出数据送到外部数据总线上,当写信号(W/R)有效时,将数据打入输出锁存器,驱动数码块显示。
(注意:
微程序流程图上的单元地址为8进制。
)
三、二进制微代码表设计:
(1)、基本的设计和实现的程序设计如下:
A、IN00000000“外部开关量输入”的开关状态→R0
B、CINaddr00100000BUS→[addr]
C、COUTaddr00110000[addr]→BUS
D、JMPaddr01000000addr→PC
机器指令程序微指令程序
$P0044$M00088105$M1EB7ED05
$P01F0$M0182ED05$M1FB9ED05
$P0203$M0250C004$M20019004
$P03E0$M0304A004$M21018406
$P0400$M04A0E004$M2281DB05
$P05F0$M0506E004$M23E48005
$P0601$M0607A004$M24018005
$P0708$M07A0E004$M25A0AA95
$P0800$M088AED05$M2627A004
$M098CED05$M2728BC05
$M0A3BA004$M29A0AA95
$M0B018005$M2A2BB405
$M0C3C2004$M2B419B95
$M0D0EA004$M2C2DA405
$M0E0FB605$M2D6EAB05$M0F25EA95$M2E2FAA0D
$M1083ED05$M2F30AA05
$M1185ED05$M3071810D
$M128DED05$M31419B95
$M13A6ED05$M32019A05
$M14011004$M3335B405
$M15010407$M3481DB05
$M16168005$M35419BBD
$M17019A3D$M36019A0D
$M18019205$M3738E004
$M192AA205$M38011005
$M1A2CB205$M393AE004
$M1B32A205$M3A010207
$M1C33A205$M3B080A07
$M1D36A205$M3C098A06
(4)、用ABLE语言设计控制逻辑,源程序如下:
ORG00H
PORTAEQU7CFFH;A口
PORTBEQU7DFFH;B口
PORTCEQU7EFFH;C口
CADDREQU7FFFH;控制字地址
SJMPSTART
ORG30H
START:
MOVA,#82H;方式0,PA,PC输出,PB输入
MOVDPTR,#CADDR
MOVX@DPTR,A
MOVDPTR,#PORTB
MOVXA,@DPTR;读入B口
MOVDPTR,#PORTA
MOVX@DPTR,A;输出到A口
CALLDELAY
LJMPSTART
DELAY:
MOVR6,#0
MOVR7,#0
DELAYLOOP:
DJNZR6,DELAYLOOP
DJNZR7,DELAYLOOP
RET
END
按照规定格式,将机器指令及微指令二进制表编辑成十六进制的如下格式文件。
机器指令格式说明:
$P例:
$P0000
机器指令代码
十六进制地址
0微指令格式说明:
$M例:
$M00018110
十六进制地址微指令代码
注意:
因系统文件格式要求,微指令代码的第一个字节(前8位)与第三字节(后8位)对换一下。
(3)、当完成上述全部微程序设计后,对每条微指令进行代码化,即将微程序流程图按微指令格式转化而成的,转化成为如下的“二进制微代码表”:
微地址
S3S2S1S0MCNWEA9A8
A
B
C
UA5…UA0
00
000000011
000
000
100
010000
01
000000011
110
110
110
000010
02
000000001
100
000
001
001000
03
000000001
110
000
000
000100
04
000000001
011
000
000
000101
05
000000011
010
001
000
000110
06
100101011
001
101
000
000001
07
000000001
110
000
000
001111
10
000000000
001
000
000
000001
11
000000011
110
110
110
000011
12
000000011
110
110
110
000111
13
000000011
110
110
110
010101
14
000000011
110
110
110
011010
15^
000000011
110
001
000
011011
16^
000000011
110
110
110
011100
17*
000000101
000
001
000
000001
20
000000011
110
110
110
010010
21
000000011
110
110
110
010100
22
000000001
010
000
000
010111
23
000000011
000
000
000
000001
24
000000000
010
000
000
011000
25*
000000001
110
000
000
010110
26*
000000001
010
000
000
011001
27
000001110
000
101
000
010000
30
000001101
000
101
000
010001
31*
000001110
000
101
000
000001
32*
000000001
101
000
110
000001
33^
000000001
001
000
000
000001
34^
000000001
110
000
000
011101
35^
000000001
011
000
000
011110
36^
000000011
010
001
000
011111
37^
011000011
001
101
000
000001
四、机器指令程序:
(1)、为本实验设计两条指令
a、端口读指令
助记符
CIND,R
指令格式
1110
R
D
其中第一字节前四位为操作码,D为端口地址,其功能是将端口地址为D的端口内容写入至寄存器Ri中。
b、端口写指令
助记符
COUTR,D
指令格式
1111
R
D
其功能是将Ri寄存器的内容写至以D为端口地址的端口中。
(2)、两条指令的微程序流程可设计为:
CINCOUT
0101
(3)根据以上的微程序流程图编写微程序。
微地址
S3S2S1S0MCNWEB1
B0
A
B
C
uA5~Ua0
十六进制代码
1E
00000101
1
110
110
110
110111
B7ED05
1F
00000101
1
110
110
110
111001
B9ED05
37
00000100
1
110
000
000
111000
38E004
38
00000101
0
001
000
000
000001
011005
39
00000100
1
110
000
000
111010
3AE004
3A
00000111
0
000
001
000
000001
010207
(5)、本实验设计机器指令程序如下指令程序。
地址(二进制)内容(二进制)助记符说明
0000000001000100INR0;“输入开关量”→R0
;输入开关置数10010000
0000000111110000COUTR0,[03];R0→以03H为地址的端口
0000001000000011
0000001111100000CIN[00],R0;将端口A(PA5~PA0)的内容读至R0
0000010000000000
0000010111100000COUTR0,[01];将R0的内容写至端口B(PB5~PB0)
0000011000000001
0000011100001000JMP00H
0000100000000000
其中,第一条指令从输入设备置数10010000,是将8255置成方式0,且A口输入,B口输出的控制字。
将机器指令写入主存,二进制开关uA5~uA0作为8255的输入,LZD13~LZD8显示灯作为8255的输出口显示,给输入开关置任意一数,运行程序,检查输出口显示灯指示是否和输入一致。
五、线路连接:
(1)、实验内部连线:
a、跳线器J1~J12全部拨在右边(自动工作方式);
b、跳线器J16、J18、J23、J24全部拨在左边;
c、跳线器J15、J19、J25全部拨在右边,跳线器J13、J14拨在左边;
d、跳线器J20~J22、J26、J27连上短路片;
e、JSE1连JSE2,SJ1连SJ2;
f、MBUS连BUS2;
g、REGBUS连BUS5;
h、PCBUS连EXJ2;
i、ALUBUS连EXJ3;
j、ALUO1连BUS1;
k、EXJ1连BUS3;
l、ALUO2连BUS4;
m、IJ1连IJ2;
(2)、外部连线说明:
·I/O扩展数据总线KJ1用8芯排线连至数据总线BUS6;
·I/O扩展区KJ2用5芯排线连至外部总线区的KZ;
·I/O扩展区KJ3(右1~6)用6芯排线连UJ2;
·I/O扩展区KJ4(右1~6)用6芯排线连KBUS1(右1~6);
·I/O扩展区GND和VCC用单针线与主控区GND和VCC相连;
·I/O扩展区短路片DL1、DL2连左边。
(3)A0、A1、CS、RD、WR五个引脚的电平与8255操作关系如下图:
A1
A0
RD
WR
CS
操作
0
0
1
0
1
0
0
0
0
1
1
1
0
0
0
输入操作(读)
数据总线通道→A
数据总线通道→B
数据总线通道→C
0
0
1
1
0
1
0
1
1
1
1
1
0
0
0
0
0
0
0
0
输出操作(写)
数据总线通道→A
数据总线通道→B
数据总线通道→C
数据总线→控制字存储器
X
1
X
X
1
X
X
0
1
X
1
1
1
0
0
断开功能
数据总线三态
非法条件
数据总线→三态
六、微程序流程及说明
以下是扩展8255并行口模型的设计和实现的调试的基本步骤:
①连续运行
A、将编程开关置为RUN(运行)状态,“STEP”置为“STEP”,“STOP”置为“RUN”。
B、使CLR1→0→1,微地址寄存器清零,程序计数器清零。
按动START键,系统连续运行程序,稍后将STOP拨至“STOP”时,系统停机。
C、停机后,可检查存数单元(0B)中的结果是否和理论值一致。
D、在联机运行程序时,进入DEBUG调试界面,使CLR1→0→1,序的首地址为00H,按相应功能键即可联机运行、调试程序。
②单步运行程序
1、运用联机软件的传送文件功能(F4)将该格式文件传入实验系统。
2、使编程开关处于“RUN”状态,STEP处于“STEP”状态,STOP处于(STOP)状态。
3、拨动总清开关CLR(0->1),微地址清零,PC计数器清零,程序首地址为00H。
4、按F6进入DEBUG界面,再按相应的功能键可以进入分步调试。
以下是一些运行过程中的截图: