8086课程设计_RAM字节扩展_8255A矩阵键盘输入
注:
原理图设计使用proteus8.6,汇编代码编写使用emu8086,
参考书籍为《微机原理与接口技术(第二版)》楼顺天版。
本文代码参考:https://blog.csdn.net/qq_29687847/article/details/106588692?fps=1&locationNum=2,感谢大佬,侵删。
题目:
8086最小系统,设计RAM容量为16K*8bit, 地址为1C000H-1FFFFH,将键盘输入的数字(以ASCII字符的形式) 写入到这一存储空间。
设计方案:
1、8086 最小系统:参照参考书P164设计8086最小系统总线结构,如下图所示。
2、RAM 容量为 16K8bit:存储器芯片选用Intel 6264(存储容量为8K8),用两片Intel 6264构成连续的RAM存储区域。参照参考书P198图6.32,如下图所示。
3、地址为 1C000H——1FFFFH:软件编写的时候,设置存储起始位置为1C000H即可。
4、矩阵键盘输入:采用非编码式键盘的结构,编写计算键值的键盘扫描程序。参照参考书P319图11.19设计矩阵键盘与8086系统总线的连接,如下图所示。
实验原理图:
1、8086系统部分:8086芯片及锁存器相关设置。
2、存储部分:RAM部分采用6264(8K8bit)字扩展为16K8bit。
3、矩阵键盘:
a.键盘部分:
非编码式键盘一般采用行列式结构并按矩阵形式排列。
b.控制部分:
扫描与存储输出等功能使用了8255A芯片;B端口为行扫描,C端口为列扫描;A0、A3-A15的门电路组合同LS138结合控制8255A的CS端口以确定- 8255A的端口地址;A1、A2选择B/C端口;AD0-AD7输入控制字以确定8255A的工作方式。
程序流程说明:
汇编程序:
DATA SEGMENT
DATA ENDS
CODE SEGMENT
START:
MOV BX,1C00H
MOV DS,BX
MOV BX,0000H
LP:
MOV AL,10000001B
OUT 66H,AL ;控制字 1000 0001 写入;写行读列
KEY_IN_L:
MOV AL,00000000B ;将0000输入B
OUT 62H,AL
IN AL,64H
AND AL,0FH
CMP AL,0FH
JNC KEY_IN_L
MOV CX,03000H ;延时去抖动
LOOP $
MOV AL,00000000B ;重复读取
OUT 62H,AL
IN AL,64H
AND AL,0FH
CMP AL,0FH
JNC KEY_IN_L ;确认非抖动则记录
MOV DL,0 ;记录当前列值
L1:
MOV CX,4
SHR AL,1
JNC L2
INC DL
LOOP L1
L2:
MOV BL,DL ;转移列值
MOV AL,10000010B
OUT 66H,AL ;控制字 1000 0010 写入;读行写列
KEY_IN_H:
MOV AL,00000000B ;将0000输入C
OUT 64H,AL
IN AL,62H
AND AL,0FH
CMP AL,0FH
MOV DL,0 ;记录当前行值
H1:
MOV CX,4
SHR AL,1
JNC H2
INC DL
LOOP H1
H2:
MOV AL,DL
SHL AL,1
SHL AL,1
ADD AL,BL ;保存键值到AL
MOV BL,AL
BCD_TO_ASCII:
MOV AH,AL
AND AL,0FH
ADD AL,30H
SHR AH,4
AND AH,0FH
ADD AH,30H
OUTPUT:
MOV [SI],AL
MOV [SI+1],0
INC SI
MOV CX,100
LOOP $
JMP LP
ENDLESS:
JMP ENDLESS
CODE ENDS
END START
仿真结果说明:
通过矩阵键盘依次键入随机数字:18042219,偶片和奇片轮流存入键入的值(通过软件转化的ASCII码),打开Memory Contents可以查看存入的值。DS:1C00,SI:0008,LA:1C008。符合题目要求。
设计总结:
略。抄袭可耻,诚实无价。
本文资源链接:
https://download.csdn.net/download/weixin_43586860/12511620