【汇编与接口】并行接口8255芯片实验
2022/2/2 1:29:21
本文主要是介绍【汇编与接口】并行接口8255芯片实验,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 题目要求
- 连线图
- 流程图
- 代码及注释
题目要求
本实验要实现:用按键并通过8255并行接口来控制数码管的显示。具体如下:
(1)用8255的PA口控制数码管的段码。
(2)用8255的PC口控制数码管的位码。
(3)初始状态时,在最右侧数码管上显示0,自此,可用按键控制数码管的后续显示,具体为:
- 按一下‘l’键,显示数字的数码管向左移一位。若已到了最左端,则跳到最右端继续显示。
- 按一下‘r’键,显示数字的数码管向右移一位。若已到了最右端,则跳到最左端继续显示。
- 按一下‘u’键,显示数字的数码管不动,但其中显示的数字加1。若加到10,则设为0。
- 按一下‘d’键,显示数字的数码管不动,但其中显示的数字减1。若减到-1,则设为9。
- 按一下‘e’键,显示数字的数码管灭掉,演示结束。
- 按任何其他的键,数码管无反应。
连线图
流程图
代码及注释
DATA SEGMENT IO8255_A EQU 288H IO8255_C EQU 28AH IO8255_K EQU 28BH LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;保存各个数字的数码管亮的十六进制数 BUFFER DB 0 ;BUFFER存储当前输出的数字 BZ DW ? ;BZ存储位码 CHAR DB ? ;CHAR存储当前输入的字母L/R/U/D/E DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV DX,IO8255_K ;K命令口 MOV AL,80H ;命令口写入80H,即10000000B,意味方式0,PA,PB,PC口均为输出口 OUT DX,AL MOV SI,OFFSET LED ;SI指向LED,方便找到要显示的数字 MOV BL,BUFFER MOV BH,01 MOV BYTE PTR BZ,BH MOV BH,0 ADD SI,BX MOV AL,BYTE PTR [SI] ;AL中存入0,也即将从PA口输出数字0的段码 MOV DX,IO8255_A ;从PA口输出数字0段码,显示数字为0 OUT DX,AL MOV AL,BYTE PTR BZ MOV DX,IO8255_C ;从PC口输出位码,最后一位将用于显示 OUT DX,AL LOOPALL: MOV SI,OFFSET LED MOV AH,01 INT 21H MOV CHAR,AL ;从键盘输入一个字母,将其存入CHAR MOV BL,108 CMP CHAR,BL ;与L的ASCII码比较,查看是否为L JNZ NEXT1 CALL LEFT ;是L则调用LEFT子程序,否则进行下一个比较 NEXT1:MOV BL,114 CMP CHAR,BL ;与R的ASCII码比较,查看是否为R JNZ NEXT2 CALL RIGHT ;是R则调用RIGHT子程序,否则进行下一个比较 NEXT2:MOV BL,117 CMP CHAR,BL ;与U的ASCII码比较,查看是否为U JNZ NEXT3 CALL UP ;是U则调用UP子程序,否则进行下一个比较 NEXT3:MOV BL,100 CMP CHAR,BL ;与D的ASCII码比较,查看是否为D JNZ NEXT4 CALL DOWN ;是D则调用DOWN子程序,否则进行下一个比较 NEXT4:MOV BL,101 CMP CHAR,BL ;与E的ASCII码比较,查看是否为E JNZ LOOPALL JMP EXIT ;是E则跳转到EXIT退出,否则回到循环开头 LEFT:MOV BL,BYTE PTR BZ ROL BL,1 ;位码循环左移一位,使用ROL保证到最左端可以回到最右端 MOV BYTE PTR BZ,BL MOV SI,OFFSET LED MOV BL,BUFFER ;BUFFER中数字直接使用 MOV BH,0 ADD SI,BX MOV AL,BYTE PTR [SI] MOV DX,IO8255_A ;PA口输出段码 OUT DX,AL MOV AL,BYTE PTR BZ MOV DX,IO8255_C ;PC口输出位码 OUT DX,AL RET RIGHT:MOV BL,BYTE PTR BZ ROR BL,1 ;位码循环右移一位,使用ROR保证到最右端可以回到最左端 MOV BYTE PTR BZ,BL MOV SI,OFFSET LED MOV BL,BUFFER MOV BH,0 ADD SI,BX MOV AL,BYTE PTR [SI] MOV DX,IO8255_A OUT DX,AL MOV AL,BYTE PTR BZ MOV DX,IO8255_C OUT DX,AL RET UP:MOV BL,BUFFER INC BL ;当前数字自增1 MOV BH,0 MOV DL,9 CMP BL,DL ;如果数字加一后大于9,则将数字置零 JNA NU ;否则跳到NU MOV BL,0 NU:MOV BUFFER,BL ;将新的数字存入BUFFER MOV SI,OFFSET LED ADD SI,BX MOV AL,BYTE PTR [SI] MOV DX,IO8255_A OUT DX,AL MOV AL,BYTE PTR BZ MOV DX,IO8255_C OUT DX,AL RET DOWN:MOV BL,BUFFER SUB BL,1 ;当前数字自减1 MOV BH,0 ;若自减后小于0则将数字置9 JNC ND ;否则跳到ND MOV BL,9 ND:MOV BUFFER,BL ;将新的数字存入BUFFER MOV SI,OFFSET LED ADD SI,BX MOV AL,BYTE PTR [SI] MOV DX,IO8255_A OUT DX,AL MOV AL,BYTE PTR BZ MOV DX,IO8255_C OUT DX,AL RET EXIT:MOV DX,IO8255_A ;数码管熄灭 MOV AL,0 OUT DX,AL MOV AX,4C00H ;程序中断 INT 21H CODE ENDS END START
这篇关于【汇编与接口】并行接口8255芯片实验的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?