微机原理硬件实验报告
- 格式:docx
- 大小:81.01 KB
- 文档页数:12
微机原理课程实验报告
实验题目
简易微型计算机控制系统的设计与接口芯片的使用,8259A、8254、8255A、8251A 的联合编程。
实验目的
掌握简易微型计算机控制系统的设计和搭建的步骤和方法,理解并使用8259A、8254、8255A、8251A接口芯片进行联合编程,实现双机通讯、基本输入输出、计数\定时、中断响应的基本功能,在此基础上,达到实验设计构想。
设计思路
1. 使用两台实验装置,一台为发送机,一台为接收机,进行两机间的串行通讯。
2. 运行各自对应程序后,发送机在DOS界面下显示开始信息“START”,接收机显示程序启动、等待接受的信息“BEGUN,RECEIVING INFO”。
3. 输入控制指令“TURN”(8路LED灯轮流闪动,每次灯闪0.5s),或“BLINK”(8路LED灯一同闪动,每次灯闪0.5s),或“FORWARD”(8路LED从两边向中间闪动,每次灯闪0.5s),回车后则接收机上8路LED灯出现各自对应效果,屏幕上显示“IT’S SHOW TIME”。
4. 显示15次(1min)后,演示结束,接收机LED灯出现OVER状态(每隔一灯亮),屏幕上显示“SHOW OVER”,并将结果传回发送机,发送机屏幕上显示同样内容。
5. 按ESC键退出程序。
程序思路
分为发送机程序和接收机程序两大部分
发送机程序思路(SENDER.ASM)
1. 程序启动时显示提示信息。指令字符串、提示信息的输入、显示、存储操作采用INT 21H的DOS中断功能调用。
2. 得到指令字符串后,判断其类型后,向发送机发送指令类型,功能实现通过8251A的双机通信,S/R(发送机、接收机,下同)设置相同的波特率、数据格式(1个停止位、偶检验、字符长度8位),均允许收发数据。
3. 发送完指令类型后,开始等待接收演示结束的指令。
4. 程序结束。
综上,发送机端主要用到8255的基本输入输出、8251A的双机串行异步通信、DOS功能调用等主要功能。
接收机程序思路(RECEIVER.ASM)
接收机程序中需要用到中断处理,因此设计思路分为主程序和中断处理子程序两部分。
接收机主程序
1. 程序启动后,完成对8251A、8253、8255的初始化编程,其中,8251的方式字波特率系数64,8个数据位,1个停止位,偶校验;命令字允许接收发送数据,清错误标志。8253的通道0为方式0,先写低字节,后写高字节,二进制计数。8255的初始化中A口、B口均为方式0,基本输入输出,A口输入、B口输出,C口暂时不用;
2. 设置中断向量,包括关中断、保存原中断向量和中断屏蔽寄存器的屏蔽字等;
3. 提示程序开始后,接收指令类型,功能实现通过8251的双机串行通信;
4. 接收到指令信息后,开中断,对8253装入初值9000H,CLK为18.432MHz,方式0时,每0.5s产生一次中断;
5. 设置效果演示次数,此时主程序进入循环,当次数没有减为0是,一直处于循环;
6. 次数CX=0后,跳出WAIT1,关中断,结束提示信息和LED灯显示OVER状态;
7. RECOVER程序段用来恢复原来的中断向量和屏蔽字;
8. 程序结束,返回DOS系统
中断处理子程序
1. 寄存器内容入栈保护;
2. 判别指令类型,执行对应效果程序段,使用OUT指令将LED灯对应的二进制状态通过8255的B口输入,使其出现相应效果;
3. 演示次数计数器减1;
4. 重装8253的通道0计数初值,方式不变,以便触发下次中断;
5. 向8259发中断结束命令,清除相应ISR置位;
6. 寄存器保护内容弹栈;
7. IRET返回命令
8. 中断处理子程序结束
综上,接收机端使用到了8251、8253、8255、8259基本上全部功能,8253用来产生计数中断,8259响应中断和中断服务,8255对外设(LED灯)输出,8251与发送机的串行通信。
硬件连线图
图一:双机通讯连线图
图二:接收机LED灯显示连线图
图三:接收机计数中断连线图
程序设计
发送机程序(SENDER.ASM)
CS0 EQU 3000H ;8255片选CS0 对应的端口始地址
PA EQU CS0+00H ;8255 的A 口地址
PB EQU CS0+01H ;8255 的B 口地址
PC EQU CS0+02H ;8255 的C 口地址
CP EQU CS0+03H ;8255 的控制寄存器地址
CS1 EQU 3020H ;8251片选CS1对应的端口地址
PD EQU CS1+00H ;8251 数据寄存器
PM EQU CS1+01H ;8251 方式控制寄存器
DATA SEGMENT
SET DB "------ START------",0AH,0DH,'$' ;提示信息
OVE DB "------SHOW IS OVER------",0AH,0DH,'$' ;结束信息提示BUFF DB 20 ;指令字符串输入缓冲区
DB ?
DB 20 DUP(?)
DATA ENDS
MSTACK SEGMENT STACK
SA DW 20 DUP(?)
TOP_STAC LABEL WORD
MSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:MSTACK,ES:DATA
START:
MOV AX,MSTACK
MOV SS,AX
LEA SP,TOP_STAC
MOV AX,DATA
MOV DS,AX
;8255A的初始化编程,方式0,A口输入,B口输出;
MOV DX,CP
MOV AL,10010000B
OUT DX,AL
MOV AX,DATA ;显示提示信息
MOV DS,AX
LEA DX,SET
MOV AH,9
INT 21H
MOV DX,PM ;8251初始化编程
MOV AL,00H
OUT DX,AL
CALL DELAY
OUT DX,AL
CALL DELAY
OUT DX,AL
CALL DELAY
MOV AL,40H
OUT DX,AL
CALL DELAY
MOV AL,01111110B ;方式字,波特率系数64,8个数据位,1个停止位,偶校验
OUT DX,AL
CALL DELAY
MOV AL,00110111B ;命令字,允许接收发送数据,清错误标志
OUT DX,AL
MOV AX,DATA ;将输入的指令存入输入缓冲区
MOV DS,AX
LEA DX,BUFF
MOV AH,0AH
INT 21H
MOV BX,DX
MOV CX,0