可编程并行IO接口8255案例文档格式.docx
- 文档编号:21660552
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:16
- 大小:228.23KB
可编程并行IO接口8255案例文档格式.docx
《可编程并行IO接口8255案例文档格式.docx》由会员分享,可在线阅读,更多相关《可编程并行IO接口8255案例文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
OUT20H,AL;
从A口输出
JMPN
CODEENDS
案例6.2:
8255A实现键盘接口
正确设定8255A并行端口的工作方式,设计电路并编制程序,利用PC口的高4位和低4位实现键盘的扫描,并利用数码管显示对应键值。
掌握利用8255A实现键盘扫描的原理及实验方法,正确应用8255A的各个端口。
案例6.2实现——8255A实现键盘接口
构造一个4*4键盘,利用8255A的PC口并结合程序识别按键,通过PA口所连接的数码管显示键值。
2.电路原理图设计
利用Proteus对本案例仿真连接如图6.17所示。
该仿真电路以图6.16作为基本的原理图。
利用8255A的PC口连接4*4矩阵键盘的4个行和4个列,自左向右、自上而下分别对应了0、1、…、F共16个数。
利用程序识别按键并通过PA口输出键值所对应的数值,例如:
若按下按键0,则在按下按键的同时在数码管上显示数值0;
若按下按键C,则在数码管上显示字符C。
图6.178255A实现键盘接口仿真效果图
3.汇编程序设计
该案例中所使用的程序代码(反转法)如下所示。
A_PORTEQU0F0H
B_PORTEQU0F2H
C_PORTEQU0F4H
CT_PORTEQU0F6H
CODE'
CODE,DS:
DATA
MOVAX,DATA
MOVDS,AX
KT:
MOVAL,88H;
控制字10001000B,方式0,A口输出,C高4位输入,C低4位输出
MOVDX,CT_PORT
OUTDX,AL;
判断有无键被按下
NO_KEY:
MOVAL,0
MOVDX,C_PORT
从C口低4位输出全0,C3~C0
INAL,DX;
从C口高4位输入C7~C4
ANDAL,0F0H;
保留高4位,即列值
CMPAL,0F0H
JZNO_KEY;
若无键被按下,继续检测等待
MOVCX,0;
去抖动延时,即很快的按键被忽略
LOOP$
组合键值(使用反转法)
MOVAH,AL;
有键被按下,将列值保存到AH中
MOVAL,81H;
控制字10000001B,方式0,A口输出,C高4位输出,C低4位输入
OUTCT_PORT,AL
MOVAL,AH
OUTC_PORT,AL;
C高4位输出
INAL,C_PORT;
C低4位输入
ANDAL,0FH;
保留低4位,即行值
ORAL,AH;
组合出行列值,并存入AL中
下面查找键值对应的七段码值
LEASI,KEY_CODE
LEADI,LED_SEV
MOVCX,16
TT:
CMPAL,[SI]
JZNN;
找到对应的键值
DECCX
JZKT;
查找完,仍然没有比对成功,则重新开始
INCSI
INCDI
JMPTT;
继续比较
输出七段码值
NN:
MOVAL,[DI]
MOVDX,A_PORT
OUTDX,AL
等待闭合键释放
WT2:
MOVAL,0
保留低4位
CMPAL,0FH;
若键未被释放,C低4位必定不全为1,只有键被释放,C低4位才全为1.
JNZWT2;
等待键被释放
JMPKT
DATASEGMENT
KEY_CODEDB0EEH,0DEH,0BEH,7EH,;
第0行键值,0~3
0EDH,0DDH,0BDH,7DH,;
第1行键值,4~7
0EBH,0DBH,0BBH,7BH,;
第2行键值,8~B
0E7H,0D7H,0B7H,77H;
第3行键值,C~F
七段数码管值
LED_SEVDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,67H,77H,7CH,39H,5EH,79H,71H
DATAENDS
ENDSTART
该案例使用行扫描法的程序如下所示。
送控制端口
有键被按下,延时,将列值保存到AH中;
LOOP$
组合键值(使用行扫描法)
MOVCX,4;
定义扫描的行数
MOVAL,0FEH;
设定第1次行扫描的数值为11111110,即从第0行开始扫描
LN:
MOVAH,AL;
保存低4位的行值到AH中
将行值从C口低4位送出
从C口高4位读入列值
ANDAL,0F0H;
CMPAL,0F0H;
判断是否在当前行
JNZKP;
说明在当前行,转到组合键值处理
MOVAL,AH;
不在当前行,准备下一行的扫描
ROLAL,1;
循环左移1位
DECCX
JNZLN;
行未扫描完,转到下一行扫描
JMPNO_KEY;
出错,重新开始
KP:
ANDAL,0F0H;
ANDAH,0FH;
ORAL,AH
MOVAL,[DI]
OUTDX,AL
;
等待闭合键被释放
C低4位输出
INAL,C_PORT;
C高4位输入
保留高4位
若键未被释放,C高4位必定不全为1,只有键被释放,C高4位才全为1.
等待键被释放
JMPKT;
重新开始
CODEENDS
4.补充案例
用8255A并行接口芯片实现24键的键盘接口,其接口电路如图6.18所示。
图中按键排列成8行3列,8255A的端口A与各行线相连,端口B的低3位PB2~PB0与各列线相连。
根据反转法原理,扫描24个键需要两个I/O端口,且这两个I/O端口还应该即能作为输入口又能作为输出口。
设8255A各端口A、B、C及控制寄存器地址为300H~303H。
以下程序实现对键盘的扫描,并将按键显示在CRT上,如果按下Y键,则退出该程序返回到DOS状态下。
图6.188255A实现键盘接口
PA55EQU300H
PB55EQU301H
P55CTLEQU303H
DATASEGMENT
TABLEDW0101H,0102H,0104H,0108H,0110H,0120H,0140H,0180H;
PB0列中各键键值
DW0201H,0202H,0204H,0208H,0210H,0220H,0240H,0280H;
PB1列中各键键值
DW0401H,0402H,0404H,0408H,0410H,0420H,0440H,0480H;
PB2列中各键键值
CHARDB‘CDEFBA9845673210WXYSRPMG’;
字符ASCII
MESDB‘PLAYANYKEYINTHESMALLKEYBOARD’,0AH,0DH
DB‘ITWILLBEONTHESCREEN!
ENDWITEY!
’,0AH,0DH,‘$’
DATAENDS
CODESEHMENT
MAINPROCFAR;
定义为段间过程
ASSUMECS:
MOVAX,DATA;
装入段基址
MOVDX,AX
MOVDX,OFFSETMES;
9号功能调用
MOVAH,09
INT21H
KY:
CALLKEY;
从缓冲区中取一字符,并显示
CMP[DI],‘Y’
JNZKY
MOVAX,4000H
INT21H;
若[DI]=‘Y’,则返回DOS
RET
MAINENDP;
主程序结束
KEYPROCNEAR;
段内过程(找出闭合键的行、列值)
KST:
MOVAL,82H
MOVDX,P55CTL
OUTDX,AL
WAIT1:
MOVAL,00;
A口低电平输出,行线低电平
MOVDX,PA55
MOVDX,PB55;
读列线,查找有没有闭合键
INAL,DX
CMPAL,0FFH;
没有闭合键,等待
JZWAIT1
PUSHAX;
列线值暂存堆栈
PUSHAX
MOVCX,1000H;
去抖动延时
DELAY:
LOOPDELAY
MOVDX,P55CTL;
反转A口为输入口,B口为输出口
MOVAL,90H
列值由B口输入
POPAX
MOVDX,PA55;
读行值
NOTAL
POPBX;
从堆栈中弹出列值至BX中
MOVAH,BL;
列值→AH
NOTAH;
AH取反
MOVSI,OFFSETTABLE;
取参数Table的偏移地址→SI
MOVDI,OFFSETCHAR;
取字符参数Char的偏移地址→DI
MOVCX,24;
24个字符长
CMPAX,[SI];
键值与Table中字符相比较
JZNN;
找到相应字符,转NN语句
DECCX;
长度修正
JZKST;
没找到,转KST语句继续查找
ADDSI,2
INCDI
JMPTT
MOVDL,[DI];
闭合键字符→DL
MOVAH,02;
2号功能调用,显示字符
PUSHDX;
DX暂存堆栈
MOVAL,82H;
A口控制字→控制寄存器,A口输出,B口输入
WAIT2:
MOVDX,PB55
CMPAL,0FFH
JNZWAIT2
POPDX
KEY:
ENDP;
过程结束
CODE:
ENDS;
代码段结束
ENDSTART;
源程序结束
读者可以根据前述案例在Proteus中自行实现。
项目实现——8255A实现交通信号灯的控制
1.概述
在前一章项目的基础上,基于8255A重新构造一个交通信号灯控制系统。
利用8255A的PA口,结合程序在不同时刻输出不同数值到各个路口的红、黄、绿三种颜色发光二极管,模拟实际的交通信号灯的控制。
利用Proteus对本案例仿真连接如图6.20所示。
十字路口的南北方向为A道,东西方向为B道。
仅使用8255A的PA口,其工作方式为方式0,输出端口。
PA口的低3位PA0、PA1、PA2分别接A道的红、黄、绿灯;
PA口的PA3、PA4、PA5分别接B道的红、黄、绿灯。
图6.20用8255A模拟交通信号灯仿真效果图
B_PORTEQU0F2H
C_PORTEQU0F4H
MOVAL,80H;
控制字10000000B,方式0,A口输出
A道绿灯放行,B红灯禁止
LP:
MOVAL,0F3H;
11110011,A道(PA2)绿灯亮,B道(PA3)红灯亮
延时10S
MOVCX,10
DP1:
CALLDELAY100
LOOPDP1
A道绿灯闪烁,B道红灯禁止
MOVAL,0F7H;
11110111,A道(PA2)绿灯灭,B道(PA3)红灯亮
从A口输出
CALLDELAY100
CALLDELAY100
A道黄灯亮,B道红灯禁止
MOVAL,0F5H;
11110101,A道(PA2)绿灯灭,B道(PA3)红灯亮
延时3s
MOVCX,3
DP2:
LOOPDP2
A道红灯禁止,B道绿灯放行
MOVAL,0DEH;
11011110,A道(PA0)红灯亮,B道(PA5)绿灯亮
从A口输出
DP3:
LOOPDP3
A道红灯禁止,B道绿灯闪烁
11111110,A道(PA0)红灯亮,B道(PA5)绿灯灭
A道红灯禁止,B道黄灯亮
MOVAL,0EEH;
11101110,A道(PA0)红灯亮,B道(PA4)黄灯亮
DP4:
LOOPDP4
JMPLP
1s延时程序
DELAY100PROC
PUSHCX;
保护现场
MOVCX,0
LOOP$
MOVCX,15000
POPCX;
恢复现场
RET
DELAY100ENDP
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 可编程 并行 IO 接口 8255 案例