1、8255 B口AL有按键?结束YN程序代码及注释:CS0 EQU 3000H ;片选CS0 对应的端口始地址MY8255_A EQU CS0+00H ;8255 的A 口地址MY8255_B EQU CS0+01H ;8255 的B 口地址MY8255_C EQU CS0+02H ;8255 的C 口地址MY8255_MODE EQU CS0+03H ;8255 的控制寄存器地址STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODESTART: MOV DX,MY8255_MODE ;初始化8255 工作方式
2、MOV AL,82H ;工作方式0,A 口输出,B 口输入OUT DX,ALLOOP1: MOV DX,MY8255_B ;读B 口IN AL,DXMOV DX,MY8255_A ;写A 口MOV AH,1 ;判断是否有按键按下INT 16HJZ LOOP1 ;无按键则跳回继续循环,有则退出QUIT: MOV AX,4C00H ;结束程序退出INT 21HCODE ENDSEND START实验步骤(1).设计实验线路图,将PCI总线扩展卡上总线与仿真ISA总线进行连接。(2).编写程序。(3).打开实验箱电源,运行程序,拨动开关组,观察数据灯的显示。实验现象:拨动开关,每个开关对应的数据灯随
3、着开关的开与关而亮灭。2、流水线指示灯显示实验:首先分别将A口和B口写入7FH和FEH,然后分别将该数右移和左移一位,在送到端口上,这样循环下去,从而实现流水灯的显示。8255流水灯显示实验参考接线图如图所示。 8255 B口方式0输出AL7FH循环左移AL延时DATA SEGMENTLA DB ? ;定义数据变量LB DB ?DATA ENDSCODE,DS:DATA MOV AX,DATAMOV DS,AXMOV DX,MY8255_MODE ;定义8255 工作方式MOV AL,80H ;工作方式0,A 口和B 口为输出写A 口发出的起始数据MOV AL,80HMOV LA,ALMOV
4、DX,MY8255_B ;写B 口发出的起始数据MOV AL,01HMOV LB,AL CALL DALLYMOV AL,LA ;将A 口起始数据右移再写入A 口ROR AL,1MOV DX,MY8255_AMOV AL,LB ;将B 口起始数据左移再写入B 口ROL AL,1MOV DX,MY8255_BDALLY PROC NEAR ;软件延时子程序PUSH CXPUSH AXMOV CX,0FFFHD1: MOV AX,0FFFFHD2: DEC AXJNZ D2LOOP D1POP AXPOP CXRETDALLY ENDP(3).打开实验箱电源,运行程序,观察数据灯的显示。数据灯从右
5、向左依次亮成流线型,并始终保持在同一时间只有一个灯亮着。3键盘及显示实验实验要求将8255单元与LED-KEYBOARD单元连接,编写程序,扫描键盘输入,并将扫描结果送数码块显示。8255键盘及显示实验参考接线图如图3-6所示。图3-6 8255键盘及显示实验参考接线图DTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71HDATA ENDS ;键值表,0F 对应的7 段数码管的段位值MOV SI,3000H ;建立缓冲区,存放要显示的键值MOV AL,00H ;先初始化键值为0MOV SI,ALMOV
6、SI+1,ALMOV SI+2,ALMOV SI+3,ALMOV SI+4,ALMOV SI+5,ALMOV DI,3005HMOV AL,81H ;方式0,A 口、B 口输出,C 口低4 位输入BEGIN: CALL DIS ;显示刷新CALL CLEAR ;清屏CALL CCSCAN ;扫描按键JNZ GETKEY1 ;有键按下则跳置GETKEY1判断PC 键盘是否有按键按下JZ BEGIN ;返回到DOSGETKEY1:CALL DIS ;CALL DALLY再次扫描按键JNZ GETKEY2 ;有键按下则跳置GETKEY2JMP BEGIN ;否则跳回开始继续循环GETKEY2:MOV
7、 CH,0FEHMOV CL,00H ;设置当前检测的是第几列COLUM: MOV AL,CH ;选取一列,将X1X4 中一个置0MOV DX,MY8255_C ;读Y1Y4,用于判断是哪一行按键闭合L1: TEST AL,01H ;是否为第1 行JNZ L2 ;不是则继续判断设置第1 行第1 列的对应的键值JMP KCODEL2: TEST AL,02H ;是否为第2 行JNZ L3 ;MOV AL,04H ;设置第2 行第1 列的对应的键值L3: TEST AL,04H ;是否为第3 行JNZ L4 ;MOV AL,08H ;设置第3 行第1 列的对应的键值L4: TEST AL,08H
8、;是否为第4 行JNZ NEXT ;MOV AL,0CH ;设置第 4 行第1 列的对应的键值KCODE: ADD AL,CL ;将第1 列的值加上当前列数,确定按键值CALL PUTBUF ;保存按键值KON:扫描按键,判断按键是否弹起JNZ KON ;未弹起则继续循环等待弹起NEXT: INC CL ;当前检测的列数递增MOV AL,CHTEST AL,08H ;检测是否扫描到第4 列JZ KERR ;是则跳回到开始处ROL AL,1 ;没检测到第4 列则准备检测下一列MOV CH,ALJMP COLUMKERR: JMP BEGINCCSCAN PROC NEAR ;扫描是否有按键闭合子
9、程序MOV AL,00H将4 列全选通,X1X4 置0MOV DX,MY8255_CIN AL,DX ;读Y1Y4NOT ALAND AL,0FH ;取出Y1Y4 的反值CCSCAN ENDPCLEAR PROC NEAR ;清除数码管显示子程序段位置0 即可清除数码管显示CLEAR ENDPDIS PROC NEAR ;显示键值子程序PUSH AX ;以缓冲区存放的键值为键值表偏移找到键值并显示MOV SI,3000HMOV DL,0DFHMOV AL,DLAGAIN: PUSH DXOUT DX,AL ;设置X1X4,选通一个数码管MOV AL,SI ;取出缓冲区中存放键值MOV BX,OFFSET DTABLEAND AX,00FFHADD BX,AXMOV AL,
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1