合工大微机原理实验报告全解.docx
《合工大微机原理实验报告全解.docx》由会员分享,可在线阅读,更多相关《合工大微机原理实验报告全解.docx(40页珍藏版)》请在冰豆网上搜索。
![合工大微机原理实验报告全解.docx](https://file1.bdocx.com/fileroot1/2023-2/2/9abc2975-4116-45c3-8246-9714acea87b6/9abc2975-4116-45c3-8246-9714acea87b61.gif)
合工大微机原理实验报告全解
《微机原理与接口技术》课程实验报告
实验名称
实验一8251可编程通信实验(与微机)
姓名
系院专业
你的专业
班级
你的专业
13-5班
学号
实验日期
2015.5.20
指导教师
成绩
一、实验目的和要求
1、了解8251的内部结构、工作原理;了解8251与8086的接口逻辑;掌握对8251的初始化编程方法,学会使用8251实现设备之间的串行通信。
二、实验内容(包括实验步骤和代码)
(一)实验内容
1、编制程序:
实现8251A与PC机的串行通讯,使用8253作分频器提供8251的收发时钟。
2、连接线路,从微机接收一批数据,接收完毕,再将它们回送给微机。
(二)实验步骤
1、连线说明:
C4区:
CS(8253)、A0、A1
——
A3区:
CS2、A0、A1
C4区:
CLK0
——
B2区:
2M
C4区:
GATE
——
C1区的VCC
C4区:
OUT0
——
C3区:
RxCTxC
C3区:
CS(8251)、C/D
——
A3区:
CS4、A0
C3区:
CLK
——
B2区:
4M
C3区:
RXD、TXD
——
D7区:
RXD、TXD
2、运行程序
3、运行“串口助手(ComPort.EXE)”,设置串口(波特率4800,8个数据位,一个停止位,偶校验),打开串口,选择“HEX发送”、“HEX显示”,向8251发送10个字节数据(输入数据之间用空格分隔),是否能接收到10个字节数据,接收到的数据是否与发送数据一致。
4、改变传输数据的数目,重复实验,观察结果。
(三)实验代码
.MODEL
TINY
;使用8253的计数器0,外接2Mhz,经26分频后,送给8251,产生4800bps
CTL_ADDR
EQU
0241H
;控制字或状态字
DATA_ADDR
EQU
0240H
;读写数据
W_8253_T0
EQU
0260H
;计数器0地址
W_8253_C
EQU
0263H
;控制字
.STACK
100
.DATA
Receive_Buffer
DB
10DUP(0)
;接受缓冲器
Send_Buffer
EQU
Receive_Buffer
;发送缓冲器
.CODE
START:
MOV
AX,@DATA
MOV
DS,AX
MOV
ES,AX
NOP
CALL
INIT_8253
CALL
INIT_8251
START1:
MOV
CX,10
CALL
Receive_Group
MOV
CX,10
CALL
Send_Group
JMP
START1
INIT_8253
PROC
NEAR
MOV
DX,W_8253_C
MOV
AL,37H
;定时器0,方式3
OUT
DX,AL
MOV
DX,W_8253_T0
MOV
AL,26H
;BCD码26(2000000/26)=16*4800
OUT
DX,AL
MOV
AL,0
OUT
DX,AL
RET
INIT_8253
ENDP
INIT_8251
PROC
NEAR
CALL
RESET_8251
MOV
DX,CTL_ADDR
MOV
AL,7EH
;波特率系数为16,8个数据位
OUT
DX,AL
;一个停止位,偶校验
CALL
DLTIME
;延时
MOV
AL,15H;允许接收和发送发送数据,清错误标志
OUT
DX,AL
CALL
DLTIME
RET
INIT_8251
ENDP
Reset_8251
PROC
NEAR
MOV
DX,CTL_ADDR
MOV
AL,0
OUT
DX,AL
;向控制口写入"0"
CALL
DLTIME
;延时,等待写操作完成
OUT
DX,AL
;向控制口写入"0"
CALL
DLTIME
;延时
OUT
DX,AL
;向控制口写入"0"
CALL
DLTIME
;延时
MOV
AL,40H
;向控制口写入复位字40H
OUT
DX,AL
CALL
DLTIME
RET
Reset_8251
ENDP
;接受一组数据,CX--接受数目
Receive_Group
PROC
NEAR
LEA
DI,Receive_Buffer
Receive_Group1:
CALL
Receive_Byte
STOSB
LOOP
Receive_Group1
RET
Receive_Group
ENDP
;接受一个字节
Receive_Byte
PROC
NEAR
MOV
DX,CTL_ADDR
Receive_Byte1:
IN
AL,DX
;读入状态
TEST
AL,2
JZ
Receive_Byte1
;有数据吗?
MOV
DX,DATA_ADDR
;有
IN
AL,DX
RET
Receive_Byte
ENDP
;发送一组数据,CX--发送数目
Send_Group
PROC
NEAR
LEA
SI,Send_Buffer
Send_Group1:
LODSB
CALL
SendByte
LOOP
Send_Group1
RET
Send_Group
ENDP
;发送一个字节
Sendbyte
PROC
NEAR
PUSH
AX
MOV
DX,CTL_ADDR
;读入状态
Sendbyte1:
IN
AL,DX
TEST
AL,1
JZ
Sendbyte1
;允许数据发送吗?
POP
AX
;发送
MOV
DX,DATA_ADDR
OUT
DX,AL
RET
Sendbyte
ENDP
;延时
DLTIME
PROC
NEAR
MOV
CX,10
LOOP
$
RET
DLTIME
ENDP
END
START
三、实验结果及其分析
(一)实验结果
由图1.1可知,使用串口助手每发送十个字节的十六进制数便可以接收到这十个字节的十六进制数。
图1.1
(二)实验扩展及思考
1、请读者思考,如何修改程序实现8251的自发自收功能?
答:
将8251的TxD与RxD相连接,由TxD逐个发送字符,并用RxD逐个接收。
2、8251与8250有何区别?
答:
8250是异步收发器UART,8251是同步异步收发器USART,在PC机中带的串行口是8250
实验名称
实验二8255控制交通灯实验
姓名
系院专业
你的专业
班级
你的专业
13-5班
学号
实验日期
2015.6.8
指导教师
成绩
一、实验目的和要求
1、了解8255芯片的工作原理,熟悉其初始化编程方法以及输入、输出程序设计技巧。
学会使用8255并行接口芯片实现各种控制功能,如本实验(控制交通灯)等。
2、熟悉8255内部结构和与8086的接口逻辑,熟悉8255芯片的3种工作方式以及控制字格式。
二、实验内容(包括实验步骤和代码)
(一)实验内容
1、编写程序:
使用8255的PA0..2、PA4..6控制LED指示灯,实现交通灯功能。
2、连接线路验证8255的功能,熟悉它的使用方法。
(二)实验步骤
1、连线说明:
D3区:
CS、A0、A1
——
A3区:
CS1、A0、A1
D3区:
JP23(PA口)
——
F4区:
JP18
2、观察实验结果,是否能看到模拟的交通灯控制过程。
(三)实验代码
.MODEL
TINY
COM_ADD
EQU
0273H
PA_ADD
EQU
0270H
PB_ADD
EQU
0271H
PC_ADD
EQU
0272H
.STACK
100
.DATA
LED_Data
DB
10111110B
;东西绿灯,南北红灯
DB
10111111B
;东西绿灯闪烁,南北红灯
DB
10111101B
;东西黄灯亮,南北红灯
DB
11101011B
;东西红灯,南北绿灯
DB
11111011B
;东西红灯,南北绿灯闪烁
DB
11011011B
;东西红灯,南北黄灯亮
.CODE
START:
MOV
AX,@DATA
MOV
DS,AX
NOP
MOV
DX,COM_ADD
MOV
AL,80H
;PA、PB、PC为基本输出模式
OUT
DX,AL
MOV
DX,PA_ADD
;灯全熄灭
MOV
AL,0FFH
OUT
DX,AL
LEA
BX,LED_Data
START1:
MOV
AL,0
XLAT
OUT
DX,AL
;东西绿灯,南北红灯
CALL
DL5S
MOV
CX,6
START2:
MOVAL,1
XLAT
OUT
DX,AL
;东西绿灯闪烁,南北红灯
CALL
DL500ms
MOV
AL,0
XLAT
OUT
DX,AL
CALL
DL500ms
LOOP
START2
MOV
AL,2
;东西黄灯亮,南北红灯
XLAT
OUT
DX,AL
CALL
DL3S
MOV
AL,3
;东西红灯,南北绿灯
XLAT
OUT
DX,AL
CALL
DL5S
MOV
CX,6
START3:
MOV
AL,4
;东西红灯,南北绿灯闪烁
XLAT
OUT
DX,AL
CALL
DL500ms
MOV
AL,3
XLAT
OUT
DX,AL
CALL
DL500ms
LOOP
START3
MOV
AL,5
;东西红灯,南北黄灯亮
XLAT
OUT
DX,AL
CALL
DL3S
JMP
START1
DL500ms
PROC
NEAR
PUSH
CX
MOV
CX,60000
DL500ms1:
LOOP
DL500ms1
POP
CX
RET
DL500ms
ENDP
DL3S
PROC
NEAR
PUSH
CX
MOV
CX,6
DL3S1:
CALL
DL500ms
LOOP
DL3S1
POP
CX
RET
ENDP
DL5S
PROC
NEAR
PUSH
CX
MOV
CX,10
DL5S1:
CALL
DL500ms
LOOP
DL5S1
POP
CX
RET
ENDP
END
START
三、实验结果及其分析
(一)实验结果
全速运行程序,实验结果如图所示。
(二)实验扩展及思考
1、如何对8255的PC口进行位操作?
答:
8255控制字D7=1时,D6~D0为口模式控制,D7=0时控制字为PC口的位操作模式,如控制字=00H,PC0复位;控制字=01H,PC0置位;控制字=0EH,PC7复位;控制字=0FH,PC7置位;其中D6~D4没定义,D3~D1从000B~111B分别指定PC0~PC7脚,D0位为相应的电平高低,0为低电平,1为高电平。
实验名称
实验三静态存贮器(16位)读写实验
姓名
姓名
系院专业
你的专业
班级
你的专业
13-5班
学号
实验日期
2015.6.13
指导教师
成绩
一、实验目的和要求
1、了解静态存贮器的特性、扩展方法,掌握存贮器的读写时序。
2、掌握CPU对16位静态存贮器的访问方法
3、认真预习本节实验内容,尝试自行编写程序,填写实验报告。
二、实验内容(包括实验步骤和代码)
(一)实验内容
1、说明:
实验仪选用常用的静态存贮器芯片62256(32K×8位),二片组成32K×16位,共64K字节。
实验仪具有16位数据总线D0..D15、20位地址线A0..A19、BLE(低电平有效,选择低8位存贮器芯片)、BHE(低电平有效,选择高8位存贮器芯片);BLE、BHE同时有效,对存贮器字方式读写,BLE或BHE有效,对存贮器字节方式读写。
扩展16位存贮器时,不使用地址线A0。
2、编写程序:
将B4区的静态存贮器3000H-30FFH单元中数据复制到6000H-60FFH的单元中,并校验,检测写入的数据是否正确。
3、连接线路验证功能,熟悉它的使用方法。
(二)实验步骤
1、连线说明:
B4(RAM)区:
CS、BLE、BHE
——
A3区:
mCS0、BLE、BHE
B4(RAM)区:
RD、WR
——
A3区:
MEMR、MEMW
B4(RAM)区:
JP49(A0..A7)
——
A3区:
JP29(A1..A8)
B4(RAM)区:
JP38(A8..A15)
——
A3区:
JP33(A9..A16)
B4(RAM)区:
JP57(D0..D7)
——
A3区:
JP42(D0..D7)
B4(RAM)区:
JP56(D8..D15)
——
A3区:
JP40(D8..D15)
2、通过星研软件的存贮器窗、寄存器窗等,观察运行结果。
(三)实验代码
;数据块移动(16位存贮器实验)
.MODEL
TINY
.STACK
100
.CODE
START:
MOV
AX,8000H
;存贮器扩展空间段地址
MOV
DS,AX
MOV
ES,AX
NOP
MOV
CX,100H
MOV
SI,3000H
MOV
DI,6000H
CALL
Move
MOV
CX,100H
MOV
SI,3000H
MOV
DI,6000H
CLD
REPE
CMPSB
JNE
ERROR
TRUE:
JMP
$
ERROR:
JMP
$
Move
PROC
NEAR
CLD
CMP
SI,DI
JZ
Return
JNB
Move1
ADD
SI,CX
DEC
SI
ADD
DI,CX
DEC
DI
STD
Move1:
REP
MOVSB
Return:
RET
Move
ENDP
END
START
三、实验结果及其分析
(一)实验结果
3000H-30FFH单元中数据如图3.1所示。
当执行完程序后,3000H-30FFH单元中数据被复制到6000H-60FF单元中,如图3.2所示。
程序最终停留在JMP$。
图3.1
图3.2
(二)实验扩展及思考
1、子程序Move中为什么比较SI、DI?
答:
源数据块与目标范围有可能部分重叠,需要考虑从第一个字节开始复制(顺序复制),还是从最后一个字节开始复制(倒序复制)。
实验名称
实验四8259A
(1)中断控制器实验
姓名
姓名
系院专业
你的专业
班级
你的专业
13-5班
学号
实验日期
2015.6.13
指导教师
成绩
一、实验目的和要求
1、了解8259A的内部结构、工作原理;了解8259A与8086的接口逻辑;掌握对8259A的初始化编程方法,了解8086是如何响应中断、退出中断的。
二、实验内容(包括实验步骤和代码)
(一)实验内容
1、编制程序:
拨动单脉冲开关,“
”送给8259A的IR0,触发中断,8086计数中断次数,显示于F5区的数码管上
(二)实验步骤
1、连线说明:
B3区:
CS、A0
——
A3区:
CS3、A0
B3区:
INT、INTA
——
A3区:
INTR、INTA
B3区:
IR0
——
B2区:
单脉冲
D3区:
CS、A0、A1
——
A3区:
CS1、A0、A1
D3区:
PC0、PC1
——
F5区:
KL1、KL2
D3区:
JP20、B、C
——
F5区:
A、B、C
2、运行程序
3、上下拨动单脉冲开关,拨动二次,产生一个“
”,观察结果,数码管上显示的次数与拨动开关次数是否对应。
(三)实验代码
.MODEL
TINY
EXTRN
InitKeyDisplay:
NEAR,Display8:
NEAR
IO8259_0
EQU
0250H
IO8259_1
EQU
0251H
.STACK
100
.DATA
BUFFER
DB
8DUP(?
)
Counter
DB
?
ReDisplayFlag
DB
0
.CODE
START:
MOV
AX,@DATA
MOV
DS,AX
MOV
ES,AX
NOP
CALL
InitKeyDisplay
;对键盘、数码管控制器8255初始化
CALL
Init8259
CALL
WriIntver
MOV
Counter,0
;中断次数
MOV
ReDisplayFlag,1
;需要显示
STI
;开中断
START1:
LEA
SI,Buffer
CALL
Display8
CMP
ReDisplayFlag,0
JZ
START1
CALL
LedDisplay
MOV
ReDisplayFlag,0
JMP
START1
Init8259
PROC
NEAR
MOV
DX,IO8259_0
MOV
AL,13H
OUT
DX,AL
MOV
DX,IO8259_1
MOV
AL,08H
OUT
DX,AL
MOV
AL,09H
OUT
DX,AL
MOV
AL,0FEH
OUT
DX,AL
RET
Init8259
ENDP
WriIntver
PROC
NEAR
PUSH
ES
MOV
AX,0
MOV
ES,AX
MOV
DI,20H
LEA
AX,INT_0
STOSW
MOV
AX,CS
STOSW
POP
ES
RET
WriIntver
ENDP
LedDisplay
PROC
NEAR
MOV
AL,Counter
MOV
AH,AL
AND
AL,0FH
MOV
Buffer,AL
AND
AH,0F0H
ROR
AH,4
MOV
Buffer+1,AH
MOV
Buffer+2,10H
;高六位不需要显示
MOV
Buffer+3,10H
MOV
Buffer+4,10H
MOV
Buffer+5,10H
MOV
Buffer+6,10H
MOV
Buffer+7,10H
RET
LedDisplay
ENDP
INT_0:
PUSH
DX
PUSH
AX
MOV
AL,Counter
ADD
AL,1
DAA
MOV
Counter,AL
MOV
ReDisplayFlag,1
MOV
DX,IO8259_0
MOV
AL,20H
OUT
DX,AL
POP
AX
POP
DX
IRET
END
START
三、实验结果及其分析
(一)实验结果
每中断一次,便计数一次,中断77次后数码管显示如图4.1所示。
图4.1
实验名称
实验五8253方波实验
姓名
姓名
系院专业
你的专业
班级
你的专业
13-5班
学号
实验日期
2015.6.14
指导教师
成绩
一、实验目的和要求
1、了解8253的内部结构、工作原理;了解8253与8086的接口逻辑;熟悉8253的控制寄存器和初始化编程方法,熟悉8253的6种工作模式。
二、实验内容(包括实验步骤和代码)
(一)实验内容
1、编写程序:
使用8253的计数器0和计数器1实现对输入时钟频率的两级分频,得到一个周期为1秒的方波,用此方波控制蜂鸣器,发出报警信号,也可以将输入脚接到逻辑笔上来检验程序是否正确。
2、连接线路,验证8253的功能,熟悉它的使用方法。
(二)实验步骤
1、连线说明:
C4区:
CS、A0、A1
——
A3区:
CS2、A0、A1
C4区:
CLK0
——
B2区:
2M
C