基本IO的应用文档格式.docx
《基本IO的应用文档格式.docx》由会员分享,可在线阅读,更多相关《基本IO的应用文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
实验四基本I/O口的应用
■必修□选修□演示性实验□验证性实验■操作性实验□综合性实验
实验地点
H123
实验仪器台号
指导教师
实验日期及节次
2016.05.11星期三第一二节
一、实验综述
1、实验目的及要求
实验目的:
(1)加深对锁存器和缓冲器的基本原理的了解;
(2)掌握I/O口编程的基本方法;
(3)掌握基本I/O口的扩展方法及编程方法。
实验要求:
(1)编写程序使开关Ki闭合时,对应LEDi灯亮;
(2)编写程序:
开关K8闭合时,实现八个LED灯从上到下循环点亮;
K8断开停止循环;
(3)编写程序实现八个LED灯从两边到中间,从中间到两边循环点亮,按下K1停
止循环。
2、实验仪器、设备或软件
计算机、DEBUGMasmforwindow集成实验环境,proteus软件。
二、实验过程(实验步骤、记录、数据、分析)
1、实验原理
锁存器74LS373与发光二极管LED1~LED8;
缓冲器74LS245与K1~K8开关相连,本实验为模拟灯亮暗实验,开关闭合对应LED亮。
2.利用MASM进行汇编程序
(1)编写程序:
使开关Ki闭合时,对应LEDi灯亮
程序代码如下:
DATASSEGMENT
;
此处输入数据段代码
DATASENDS
STACKSSEGMENT
此处输入堆栈段代码
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKSSTART:
MOVAX,DATAS
MOVDS,AX
MOVDX,600H;
IO3#的地址为600H
L1:
INAL,DX;
读输入口的开关状态
NOTAL;
取反
OUTDX,AL;
写输出口,使对应LED灯点亮
JMPL1
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
运行结果:
当K1闭合时,LED1灯亮
当K6闭合时,LED6灯亮
开关K8闭合时,实现八个LED灯从上到下循环点亮;
K8断开停止循环。
STACKS
START:
MOVAH,01H;
灯循环显示初值
LP1:
MOVDX,600H
WAIT1:
取端口数据
TESTAL,00000001B;
对key8的判断
JNZWAIT1;
JZ表示key8按下,若没有闭合则等待,直到key8按下
MOVDX,600H
MOVAL,AH
OUTDX,AL
MOVCX,2801H;
延时
WAIT2:
NOP;
表示空循环一个机器指令的时间
NOP
LOOPWAIT2;
—个LOOP相当于两个NOP
ROLAH,1;
由于要循环显示,则要找规律
JMPLP1
当K8闭合时,LED灯自下而上循环点亮
突然断开K8,则LED灯停止循环,一直停留在断开前的状态
TB
(3)编写程序实现八个LED灯从两边到中间,从中间到两边循环点亮,
按下K1停止循环。
;
TABDB81H,42H,24H,18H,18H,24H,42H,81H
此处输入代码段代码
LEABX,TAB
LP2:
MOVAH,00H
INAL,DX;
JNZWAIT2;
JZ表示key8按下,若没有闭合则等待,直到key8按下
MOVAL,AH;
把数据取出
XLAT;
(换码指令,把数据段中偏移地址为BX+AL的内存单元的内容送到AL中)无规则的数据放到表格中可以有序输出
LOOPWAIT1
INCAH;
目的是在一次执行时,把TAB的指针下移
CMPAH,08H;
比较是否把TAB的数据全读完。
JNZLP1
JMPLP2
运行结果:
按下K1停止循环。
第三个实验也可以这样做,不用查表,用循环指令
ROL和ROF来实现
源代码程序如下:
CODES
MOVBL,80H
MOVBH,01H
LOP2:
WAIT2:
TESTAL,00000001B;
JZ表示key8按下,若没有闭合则等待,直到key8按下INAL,DX
TESTAL,80H
MOVAL,0
JZJP1
ROLBL,1
RORBH,1
MOVAH,BL
ADDAH,BH
JP1:
MOVCX,2000H;
LOOPLOP2
实验结果同上
三、结论
1分析讨论
(1)刚开始的时候不知道NOP的作用,自己查了资料
NOP指令即“空指令”,在x86的CPU中机器码为0x90(144)。
执行到NOP旨令时,CPU十么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令。
所以NOP指令自然也会占用执行一个指令的CPU时间片。
常用于程序延时或精确计时,不过在较快的CPU上不明显。
(2)还有之前不明白一开始仿真时,为十么这些灯是全亮的?
可能是没有数据的
输入,悬空就是高电平吧(LED是高电平有效)
(3)在做实验时,学到了延时子程序和要把无序的数据输出时,可用查表方式
(4)在做从两边到中间亮时,自己做了一个程序,没有用查表方式,而是参仿了循环的程序,使用ROL和ROF指令
(5)—开始使用的是PROTUES8.做的实验,但是做不了,只能用比8.0版本低的来做,不知道老师如何使用8.0版本来做这个实验仿真,求解?
?
四、指导教师评语及成绩:
评语:
该同学实验报告详细认真,非常好完成了该次实验,并有所体会,有自己独立的思考,还做了一个自己的程序。
成绩:
93
指导教师签名:
批阅日期: