《微机原理与接口》课程上机操作实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《微机原理与接口》课程上机操作
实验报告
姓名:王自胜
学号: 12212162
指导教师:付文秀
时间: 2014年12月
I/O地址译码与交通灯控制实验
一、实验目的
通过并行接口8255实现十字路口交通灯的模拟控制,进一步掌握对并行口的使用。

二、实验内容
如图5-3,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。

编程使六个灯按交通灯变化规律燃灭。

十字路口交通灯的变化规律要求:
(1)南北路口的绿灯、东西路口的红灯同时亮3秒左右。

(2)南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮。

(3)南北路口的红灯、东西路口的绿灯同时亮3秒左右。

(4)南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁若干次。

8255动态分配地址:
控制寄存器: 0EC0BH
A口地址: 0EC08H
C口地址: 0EC0AH (5)转(1)重复。

三、程序流程图
四、程序清单
DATA SEGMENT
X DB ?
DATA ENDS
STACK1 SEGMENT STACK
DW 100H DUP(0)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA
MOV DS,AX
;---------------INIT---------------- MOV DX,0EC0BH ;写控制字
MOV AL,80H
OUT DX,AL
L3: MOV DX,0EC0AH
MOV AL,24H ;南北绿灯,东西红灯亮
OUT DX,AL
CALL DELAY
CALL DELAY ;长延时,3s左右
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
MOV BL,8
MOV AL,04H
L0: XOR AL,40H ;南北黄灯闪,东西红灯亮OUT DX,AL
CALL DELAY ;延时
CALL DELAY
DEC BL ;闪烁几次
JNZ L0
CALL DELAY
MOV AL,81H ;南北红灯亮,东西绿灯亮
OUT DX,AL
CALL DELAY
CALL DELAY
CALL DELAY ;长延时,3s左右
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
MOV BL,9
MOV AL,80H
L1: XOR AL,02H ;南北红灯亮,东西黄灯闪OUT DX,AL
CALL DELAY ;延时
CALL DELAY
DEC BL
JNZ L1 ;闪烁几次
CALL DELAY
MOV DL,0FFH
MOV AH,06H
INT 21H
JZ L3 ;六号功能判断若无字符输入ZF=1继续循环
;------------------------------
MOV AH,4CH
INT 21H
;-----------延时函数------------
DELAY : PUSH CX
PUSH DX
MOV CX,1FFFH
LOP1: MOV DX,0FFFFH
LOP2: DEC DX
JNZ LOP2
LOOP LOP1
POP DX
POP CX
RET
CODE ENDS
END START
可编程定时时钟/计数器(8253)
一、实验目的
掌握8253的基本工作原理和编程方法。

二、实验内容
按图5-1虚线连接电路,将计数器0设置为方式0,计数器初值为N(N≤0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)。

按图5-2连接电图,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化(频率1HZ)。

三、实验原理
8253具有3个独立的计数通道,采用减1计数方式。

在门控信号有效时,每输入1个计数脉冲,通道作1次计数操作。

当计数脉冲是已知周期的时钟信号时,计数就成为定时。

作计数器时,要求计数的次数可直接作为计数器的初值预置到减“1”计数器中。

8253中各通道可有6种可供选择的工作方式,以完成定时、计数或脉冲发生器等多种功能。

本实验用到的是方式0—计数结束中断。

在写入计数值N之后的第一个CLK的下降沿将N装入计数执行单元,待下一个CLK的下降沿到来且门控信号GATE为高电平时,通道开始启动计数。

在计数过程中,OUT一直保持低电平,直到计数达“0”时,OUT输出由低电平变为高电平,并且保持高电平。

四、程序流程图
五、程序清单
DATA SEGMENT
N E QU 0BH ;计数器初值,不大于0FH
CHL DB 0AH,0DH,'$' ;换行
DATA ENDS
STACK1 SEGMENT STACK
DW 100 DUP(0)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
START: MOV AX,DATA
MOV DS,AX
;--------------INIT----------------
MOV DX,0EC03H;控制寄存器地址
MOV AL,10H;计数器0,低字节,方式0,
二进制计数
OUT DX,AL ;写入控制字
MOV DX,0EC00H
MOV AL,N
OUT DX,AL ;写入计数初值
MOV CL,N
L0: ;MOV AL,0 ;计数器0锁存
;MOV DX,IO8253
;OUT DX,AL
MOV DX,0EC00H
IN AL,DX ;读取当前数值
CMP AL,CL
JNE L0;若AL不等于CL,则继续到L0循环
DEC CL ;更改CL值
MOV DL,AL
CMP DL,09H ;是0~9吗?
JLE ASCI
ADD DL,07H ;是A~F
ASCI: ADD DL,30H
MOV AH,02H ;单字符输出计数器当前值
INT 21H
MOV DX,OFFSET CHL;输出字符串换行
MOV AH,09H
INT 21H
CMP CL,0
JNL L0;CL不小于0时,继续循环
;------------------------------
MOV AH,4CH
INT 21H
CODE ENDS
END START
2)
DATA SEGMENT
X DB ?
DATA ENDS
STACK1 SEGMENT STACK
DW 100H DUP(0) STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA
MOV DS,AX
MOV AL,36H
MOV DX,0EC03H ;写计数器0控制字
OUT DX,AL
MOV AX,1000 ;写计数器0初值
MOV DX,0EC00H
OUT DX,AL;先写低字节后写高字节
MOV AL,AH
OUT DX,AL
;------------------------------------- MOV AL,76H
MOV DX,0C403H
OUT DX,AL ;写计数器1控制字
MOV AX,1000 ;写计数器0初值
MOV DX,0C401H
OUT DX,AL
MOV AL,AH ;先写低字节后写高字节
OUT DX,AL
CODE ENDS
END START
串行通讯
一、实验目的
1、进一步了解串行通信的基本原理。

2、掌握串行接口芯片8250的工作原理和编程方法。

3、熟悉PC机串行口的基本连接方法
二、实验内容
1、PC机RS-232串口自发自收。

按照PC机串口自发自收的连接方法连线。

编写PC机自发自收串行通信程序,要求:从键盘输入一个字符,将字符通过串口发送出去,再由此串口将字符接收回来并在屏幕上显示,实现自发自收。

2、两台PC机间RS-232串口通信。

按照PC机RS-232串口直接互连的方法连接两台PC机。

编写PC机直接互连串行通信程序;要求:由甲机键盘键入字符经串口发送给乙机,再由乙机通过串口接收字符并显示在屏幕上。

当键入感叹号“!”,结束收发过程。

三、实验原理
1、异步通信
本实验以字符为单位进行传送,每传送一个字符,以起始位作为开始标志,以停止位作为结束标志。

异步串行通信的工作过程是:传送开始后,接收设备不断地检测传输线是否有起始位到来,当接收到一系列的“1”(空闲或停止位)之后,检测到第一个“0”,说明起始位出现,就开始接收所规定的数据位、奇偶校验位及停止位。

经过接收器处理,将停止位去掉,把数据位拼装成一字节数据,并且经奇偶校验无错误,才算是正确地接收到了一个字符。

当一个字符接收完毕,接收设备又继续测试传输线,监视“0”电平的到来(下一个字符的开始),直到全部数据接收完毕。

D0 D1… Dn
空闲位
数据位奇











空闲位
2、8250各部分功能说明
8250片内有10个寄存器,其中有几个是共用地址的,其识别由线路控制寄存器(LCR)的最高位DLAB来决定。

各寄存器的地址如下:
3、数据发送和接收:
四、程序清单
1.自发自收
CODE SEGMENT
ASSUME CS:CODE
START: MOV AL,10000000B ;8250初始化,设DLAB=1 MOV DX,3FBH
OUT DX,AL
MOV AX,30H ;写入除数低字节
MOV DX,3F8H
OUT DX,AL
MOV AL,AH ;写入除数高字节
MOV DX,3F9H
OUT DX,AL
MOV AL,00001010B ;7位数据,1位停止,奇校验
MOV DX,3FBH
OUT DX,AL ;写入线路控制寄存器
MOV AL,00010000B ;自检控制
MOV DX,3FCH
OUT DX,AL ;写入Modem控制寄存器
MOV AL,0
MOV DX,3F9H
OUT DX,AL ;写中断允许寄存器,屏蔽中断
WAIT_FOR:
MOV DX,3FDH ;读线路状态寄存器
IN AL,DX
TEST AL,00011110B ;出错否
JNZ ERROR ;出错,转ERROR
TEST AL,00000001B ;接收数据就绪否
JNZ RECEIVE ;就绪,转接受
TEST AL,00100000B ;发送寄存器空否,不空,返回等待JZ WAIT_FOR
MOV AH,1
INT 21H ;读键盘
MOV DX,3F8H ;发送
OUT DX,AL
JMP WAIT_FOR ;返回等待
RECEIVE:
PUSH CX
PUSH AX
MOV CX,02000H
T1: MOV AX,0FFFFH
T2: DEC AX
JNZ T2
LOOP T1 ;延时程序
MOV DX,3F8H ;读接收数据
IN AL,DX
AND AL,01111111B ;保留7位数据
CMP AL,03H ;是Ctrl+C?
JNZ CHAR
MOV AH,4CH ;返回DOS
INT 21H
CHAR: PUSH AX
MOV DL,AL
MOV AH,2H ;显示接收字符
INT 21H
POP AX
JMP WAIT_FOR ;返回等待
ERROR: MOV DX,3FDH ;出错则清除线路状态寄存器IN AL,DX
MOV DL,'?' ;显示'?'
MOV AH,02H
INT 21H
JMP WAIT_FOR
CODE ENDS
END START
2.双机通信
(1)发送端:
CODE SEGMENT
ASSUME CS:CODE
START: MOV AL,80H ;8250初始化,设DLAB=1 MOV DX,3FBH
OUT DX,AL
MOV AX,30H
MOV DX,3F8H
OUT DX,AL ;写入除数低字节
MOV AL,AH
INC DX
OUT DX,AL ;写入除数高字节
MOV AL,0AH ;7位数据,1位停止,奇校验
MOV DX,3FBH
OUT DX,AL ;写入线路控制寄存器
MOV AL,03H
MOV DX,3FCH
OUT DX,AL ;写入Modem控制寄存器
MOV AL,0
MOV DX,3F9H
OUT DX,AL ;写中断允许寄存器,屏蔽所有中断
WAIT1: MOV DX,3FDH ;读线路状态寄存器
IN AL,DX
TEST AL,1EH ;出错否
JNZ ERROR
;TEST AL,01H ;接收数据就绪否
;JNZ SEND ;发送
TEST AL,20H ;发送寄存器空否,不空,返回等待
JZ WAIT1
SEND: MOV AH,1
INT 21H ;读键盘
CMP AL,21H ;是'!'?
JZ EXIT ;是,返回操作系统
MOV DX,3F8H ;不是,则发送
OUT DX,AL
JMP WAIT1 ;返回等待
ERROR: MOV DX,3FDH ;出错则清除线路状态寄存器
IN AL,DX
MOV DL,'?' ;显示'?'
MOV AH,02H
INT 21H
JMP WAIT1
EXIT: MOV AH,4CH
INT 21H
CODE ENDS
END START
(2)接收端:
CODE SEGMENT
ASSUME CS:CODE
START: MOV AL,80H ;8250初始化
MOV DX,3FBH
OUT DX,AL
MOV AX,30H ;写除数
MOV DX,3F8H
OUT DX,AL ;写入除数低字节
MOV AL,AH
INC DX
MOV DX,3F9H
OUT DX,AL ;写入除数高字节
MOV AL,0AH
MOV DX,3FBH
OUT DX,AL ;写入线路控制寄存器
MOV AL,03H
MOV DX,3FCH
OUT DX,AL ;写入Modem控制寄存器
MOV AL,0
MOV DX,3F9H
OUT DX,AL ;写中断允许寄存器,屏蔽所有中断
WAIT1: MOV DX,3FDH ;读线路状态寄存器
IN AL,DX
TEST AL,1EH ;出错否
JNZ ERROR
TEST AL,01H ;接收数据就绪否
JNZ RECEIVE ;转接收
;TEST AL,20H ;发送寄存器空否,不空,返回等待
;JZ WAIT1
JMP WAIT1 ;均返回等待
RECEIVE: MOV DX,3F8H ;读接收数据
IN AL,DX
AND AL,01111111B ;保留位数据
CMP AL,21H ;是'!'?
JNZ CHAR
MOV AH,4CH ;返回操作系统
INT 21H
CHAR: PUSH AX
MOV DL,AL
MOV AH,2 ;显示接受字符
INT 21H
POP AX
JMP WAIT1 ;返回等待
ERROR: MOV DX,3FDH ;出错则清除线路状态寄存器 IN AL,DX
MOV DL,'?' ;显示'?'
MOV AH,02H
INT 21H
JMP WAIT1
CODE ENDS
END START
课程综合实验(抢答器)
一、实验目的
1、了解微机化竞赛抢答器的基本原理。

2、进一步学习使用并行接口。

二、实验内容
图5-4为竞赛抢答器(模拟)的原理图,逻辑开关K0~K7代表竞赛抢答按钮0~7号,当某个逻辑电平开关置“1”时,相当某组抢答按钮按下。

在七段数码管上将其组号(0~7)显示出来,并使喇叭响一下。

从键盘上按空格键开始下一轮抢答,按其它键程序退出。

8255动态分配地址:
控制寄存器: 0EC0BH
A口地址: 0EC08H
C口地址: 0EC0AH 三、程序流程图
四、程序清单
DATA SEGMENT
LIST DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DATA ENDS
STACK1 SEGMENT STACK
DW 100H DUP(0)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
START: MOV AX,DATA
MOV DS,AX
;-------------------------------------------------- MOV DX,0EC0BH
MOV AL,89H
OUT DX,AL ;对8255进行初始化
L0: MOV DX,0EC0AH
IN AL,DX ;读C口状态
CMP AL,0 ;如果为0则循环
JZ L0
MOV BL,0
L1: INC BL
SHR AL,1 ;将AL逻辑右移
JNC L1
DEC BL
MOV AL,BL ;求出组号
MOV BX,OFFSET LIST ; 七段显示代码表的首址送BX AND AX,00FFH ; 屏蔽AX高字节,组号
ADD BX,AX ; 形成显示字符的地址
MOV AL,[BX] ; 取出字符送AL
MOV DX,0EC08H
OUT DX,AL ; 送到A口输出显示
MOV DL,7
MOV AH,2
INT 21H ;响铃功能调用
MOV AH,01H
INT 21H
CMP AL,20H ;当为空格时跳到CLOSE
JZ CLOSE
MOV AH,4CH
INT 21H
CLOSE: MOV AL,0
MOV DX,0EC08H
OUT DX,AL
JMP L0
CODE ENDS
END START
实验总结
做完了微机的实验之后感触很多,实践是检验自己知识掌握程度的最好工具。

做实验之前感觉自己这方面的知识点掌握的还是很牢固的,做了试验之后才发现了自己的不足。

另外微机实验让我有种学以致用的感觉,通过动手操作也提高了我对微机这门课程的兴趣。

最后给实验室一些建议:1:希望能把实验室的电脑整体杀一下毒,我身边有好多同学把程序拷贝到自己电脑时出现了电脑死机,系统崩溃的问题,给学习生活带来了很大的不便。

2:实验室里有很多试验箱是有问题的,会影响实验的完成,希望学校能够及时更换。

相关文档
最新文档