微机接口实验报告.doc
-/微机接口实验报告实验一:I/O地址译码一、实验目的掌握I/O 地址译码电路的工作原理。二、实验原理和内容实验电路如图(1)所示,其中74LS74 为D 触发器,可直接使用实验台上数字电路实验区的D 触发器,74LS138 为地址译码器。译码输出端Y0Y7 在实验台上I/O 地址输出端引出,每个输出端包含8 个地址,Y0:280H287H,Y1:288H28FH, 当CPU 执行I/ O 指令且地址在280H2BFH 范围内,译码器选中,必有一根译码线输出负脉冲。例如:执行下面两条指令Y4 输出一个负脉冲,执行下面两条指令MOV DX, 2A0HOUT DX,AL(或IN AL,DX)Y5 输出一个负脉冲。MOV DX,2A8HOUT DX,AL(或IN AL,DX)利用这个负脉冲控制L7 闪烁发光(亮、灭、亮、灭、),时间间隔通过软件延时实现。三、实验程序L1: MOV DX, 2A0H/选通74LS138的11口OUT DX, AL/使端口A输出,给D触发器一个时钟信号LOOP $/延时LOOP $/延时MOV DX, 2A8H/选用74LS138的10口OUT DX, AL/使D触发器清零LOOP $/延时LOOP $/延时MOV AH, 11/十一号功能调用INT 21H/如果有键按下INC AL/AL加一,退出循环JNZ L1/ 如果没键按下,则继续循环四、总结第一次实验比较简单、主要是学会了通过程序控制芯片及其端口的选通,其方法是根据芯片外围搭建的电路使DX进行写或读的操作、例如本实验里,要想选通74LS138的11口操作8255的端口A,则需要使A9A8A7A6A5A4A3A2A1A0=1010100000=2A0H,同理操作10口时,则使DX=2A8H,再加上延时DELAY功能,即可使LED灯循环亮灭。但是如果不给芯片断电,则LED灯会一直循环,不能进进行人为的控制,所以又在后面加上了11号功能调用,只要当AL=0,循环结束。实验二:可编程并行接口一、实验目的掌握8255 方式0 的工作原理及使用方法。二、实验内容实验电路如图,8255C口接逻辑电平开关K0K7,A 口接LED 显示电路L0L7。编程从8255C口输入数据,再从A口输出。三、编程提示1、8255 控制寄存器端口地址28BHA 口的地址288HC 口的地址28AH2、参考流程图四、实验程序MOV DX,28BH/写端口CMOV AL , 10001001BOUT DX, AL /8255初始化L1:MOV DX, 28AHIN AL,DX /读取C口数据MOV DX, 288H/写端口AOUT DX,AL /从A口输出MOV AH,11/十一号功能调用INT 21HINC ALJNZ L1MOV AH, 4CHINT 21H五、实验总结这个实验可以看作是第一个实验的加强,同样也考验的是对端口的读写操作,因为有了第一次实验的经验、所以这次实验特别顺利,没有出现什么问题。实验三:七段数码管静态显示一、实验目的掌握数码管显示数字的原理二、实验内容静态显示:按图1连接好电路,将8255 的A 口PA0PA6 分别与七段数码管的段码驱动输入端ag相连,位码驱动输入端S1 接+5V(选中),S0、dp 接地(关闭)。编程从键盘输入一位十进制数字(09),在七段数码管上显示出来。 图1图2 三、编程提示1、实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。2、段数码管的字型代码表如下表:3、参考流程图(见图3)四、实验程序LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH/建立表格用于显示数字MOV DX,28BH/写控制字寄存器MOV AL, 10000000B/使端口C按方式0输出OUT DX,AL/8255初始化,A口为输出L2:MOV AH, 1INT 21HCMP AL,30H/和0比较JB L1/小于则结束程序CMP AL,39H/和9比较JA L1/大于则结束程序SUB AL,30H/ASCII码减30得到对应数字MOV BX,OFFSET LED/将表LED的首地址赋值给BXADD BL, AL/将AL的值加给BLADC BH, 0MOV AL, BX/查表MOV DX, 288H/通过A口输出OUT DX, ALJMP L2/继续循环L1:MOV AH, 4CH INT 21H五、实验总结因为以前在学习单片机和FPGA的时候都做过静态数码管的实验,所以实验原理已经非常了解了,这里的难点就是用汇编语言来实现。首先,要建立一个表以便于快速得到数字对应的数码管的值;其次写一个比较程序来确定输入的值是否是自然数;然后再通过ASCII码减30即可得到这个数的值,经过查表就可以输出了,实验思路清晰,所以做起来并不难。实验四:七段数码管动态显示一、实验目的掌握数码管显示数字的原理二、实验内容动态显示:按图2连接好电路,七段数码管段码连接不变,位码驱动输入端S1,S0 接8255 C 口的PC1,PC0。编程在两个数码管上显示56。三、参考流程图四、实验程序MOV DX, 28BH/写控制字寄存器MOV AL, 80H/使端口C按方式0输出OUT DX, ALL1: MOV DX, 28AH/写端口CMOV AL, 01H/控制第一个数码管的位码OUT DX, ALMOV DX, 288H/写端口AMOV AL, 7DH/使第一个数码管显示6OUT DX, ALCALL DEALY/延时MOV DX, 28AH/写端口CMOV AL, 02H/控制第二个数码管的位码OUT DX, ALMOV DX, 28BH/写端口AMOV AL, 6DH/使第一个数码管显示5CALL DELAY/延时MOV AH,11/十一号功能调用INT 21HINC ALJNZ L1MOV AH, 4CHINT 21HDELAY PROC/延时子程序 MOV CX, 00FFHD2:MOV BX, 00FFHD1:PUSH AXPUSH DXPOP DXPOP AXDEC BXJNZ D1LOOP D2RETDELAY ENDP五、实验总结在做完了静态数码管之后,我尝试做了一下动态数码管。再画了动态数码管流程图之后实验思路非常清晰,主要是要先选择端口C来控制位码,再选择端口A来控制段码,并且在两个数码管之间加入延时程序。一开始写完程序后发现两只数码管都显示5,后来发现是因为在控制第二只数码管的位码时第一只数码管的位码并没有关闭,所以第一只数码管也显示了5,在发现问题后对程序进行了修改,实验现象就显现了。
收藏
- 资源描述:
-
-/
微机接口实验报告
实验一:I/O地址译码
一、实验目的
掌握I/O 地址译码电路的工作原理。
二、实验原理和内容
实验电路如图(1)所示,其中74LS74 为D 触发器,可直接使用实验台上数字电路实验区的D 触发器,74LS138 为地址译码器。译码输出端Y0~Y7 在实验台上I/O 地址输出端引出,每个输出端包含8 个地址,Y0:280H~287H,Y1:288H~28FH,…… 当CPU 执行I/ O 指令且地址在280H~2BFH 范围内,译码器选中,必有一根译码线输出负脉冲。
例如:执行下面两条指令
Y4 输出一个负脉冲,执行下面两条指令
MOV DX, 2A0H
OUT DX,AL(或IN AL,DX)
Y5 输出一个负脉冲。
MOV DX,2A8H
OUT DX,AL(或IN AL,DX)
利用这个负脉冲控制L7 闪烁发光(亮、灭、亮、灭、……),时间间隔通过软件延时实现。
三、实验程序
L1: MOV DX, 2A0H //选通74LS138的11口
OUT DX, AL //使端口A输出,给D触发器一个时钟信号
LOOP $ //延时
LOOP $ //延时
MOV DX, 2A8H //选用74LS138的10口
OUT DX, AL //使D触发器清零
LOOP $ //延时
LOOP $ //延时
MOV AH, 11 //十一号功能调用
INT 21H //如果有键按下
INC AL //AL加一,退出循环
JNZ L1 // 如果没键按下,则继续循环
四、总结
第一次实验比较简单、主要是学会了通过程序控制芯片及其端口的选通,其方法是根据芯片外围搭建的电路使DX进行写或读的操作、例如本实验里,要想选通74LS138的11口操作8255的端口A,则需要使A9A8A7A6A5A4A3A2A1A0=1010100000=2A0H,同理操作10口时,则使DX=2A8H,再加上延时DELAY功能,即可使LED灯循环亮灭。但是如果不给芯片断电,则LED灯会一直循环,不能进进行人为的控制,所以又在后面加上了11号功能调用,只要当AL=0,循环结束。
实验二:可编程并行接口
一、实验目的
掌握8255 方式0 的工作原理及使用方法。
二、实验内容
实验电路如图,8255C口接逻辑电平开关K0~K7,A 口接LED 显示电路L0~L7。编程从8255C口输入数据,再从A口输出。
三、编程提示
1、8255 控制寄存器端口地址28BH
A 口的地址288H
C 口的地址28AH
2、参考流程图
四、实验程序
MOV DX,28BH //写端口C
MOV AL , 10001001B
OUT DX, AL //8255初始化
L1:MOV DX, 28AH
IN AL,DX //读取C口数据
MOV DX, 288H //写端口A
OUT DX,AL //从A口输出
MOV AH,11 //十一号功能调用
INT 21H
INC AL
JNZ L1
MOV AH, 4CH
INT 21H
五、实验总结
这个实验可以看作是第一个实验的加强,同样也考验的是对端口的读写操作,因为有了第一次实验的经验、所以这次实验特别顺利,没有出现什么问题。
实验三:七段数码管静态显示
一、实验目的
掌握数码管显示数字的原理
二、实验内容
静态显示:按图1连接好电路,将8255 的A 口PA0~PA6 分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端S1 接+5V(选中),S0、dp 接地(关闭)。编程从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。
图1 图2
三、编程提示
1、实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。
2、段数码管的字型代码表如下表:
3、参考流程图(见图3)
四、实验程序
LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
//建立表格用于显示数字
MOV DX,28BH //写控制字寄存器
MOV AL, 10000000B //使端口C按方式0输出
OUT DX,AL //8255初始化,A口为输出
L2:MOV AH, 1
INT 21H
CMP AL,30H //和0比较
JB L1 //小于则结束程序
CMP AL,39H //和9比较
JA L1 //大于则结束程序
SUB AL,30H //ASCII码减30得到对应数字
MOV BX,OFFSET LED //将表LED的首地址赋值给BX
ADD BL, AL //将AL的值加给BL
ADC BH, 0
MOV AL, [BX] //查表
MOV DX, 288H //通过A口输出
OUT DX, AL
JMP L2 //继续循环
L1:MOV AH, 4CH
INT 21H
五、实验总结
因为以前在学习单片机和FPGA的时候都做过静态数码管的实验,所以实验原理已经非常了解了,这里的难点就是用汇编语言来实现。首先,要建立一个表以便于快速得到数字对应的数码管的值;其次写一个比较程序来确定输入的值是否是自然数;然后再通过ASCII码减30即可得到这个数的值,经过查表就可以输出了,实验思路清晰,所以做起来并不难。
实验四:七段数码管动态显示
一、实验目的
掌握数码管显示数字的原理
二、实验内容
动态显示:按图2连接好电路,七段数码管段码连接不变,位码驱动输入端S1,S0 接8255 C 口的PC1,PC0。编程在两个数码管上显示56。
三、参考流程图
四、实验程序
MOV DX, 28BH //写控制字寄存器
MOV AL, 80H //使端口C按方式0输出
OUT DX, AL
L1: MOV DX, 28AH //写端口C
MOV AL, 01H //控制第一个数码管的位码
OUT DX, AL
MOV DX, 288H //写端口A
MOV AL, 7DH //使第一个数码管显示6
OUT DX, AL
CALL DEALY //延时
MOV DX, 28AH //写端口C
MOV AL, 02H //控制第二个数码管的位码
OUT DX, AL
MOV DX, 28BH //写端口A
MOV AL, 6DH //使第一个数码管显示5
CALL DELAY //延时
MOV AH,11 //十一号功能调用
INT 21H
INC AL
JNZ L1
MOV AH, 4CH
INT 21H
DELAY PROC //延时子程序
MOV CX, 00FFH
D2:MOV BX, 00FFH
D1:PUSH AX
PUSH DX
POP DX
POP AX
DEC BX
JNZ D1
LOOP D2
RET
DELAY ENDP
五、实验总结
在做完了静态数码管之后,我尝试做了一下动态数码管。再画了动态数码管流程图之后实验思路非常清晰,主要是要先选择端口C来控制位码,再选择端口A来控制段码,并且在两个数码管之间加入延时程序。一开始写完程序后发现两只数码管都显示5,后来发现是因为在控制第二只数码管的位码时第一只数码管的位码并没有关闭,所以第一只数码管也显示了5,在发现问题后对程序进行了修改,实验现象就显现了。
展开阅读全文