ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【汇编与接口】并行接口8255芯片实验

2022-02-01 23:58:17  阅读:220  来源: 互联网

标签:8255 芯片 并行接口 MOV AL BL SI DX PTR


文章目录

题目要求

本实验要实现:用按键并通过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,芯片,并行接口,MOV,AL,BL,SI,DX,PTR
来源: https://blog.csdn.net/weixin_46068120/article/details/122767169

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有