汇编流水灯实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告学院(系)名称:计算机与通信工程学院

【实验过程记录(源程序、测试用例、测试结果及心得体会等)】///////////////////////////////////////////////////////流水灯;自己改的

IOY0 EQU 3000H ;片选IOY0对应的端口始地址MY8255_A EQU IOY0+00H*2 ;8255的A口地址

MY8255_B EQU IOY0+01H*2 ;8255的B口地址

MY8255_C EQU IOY0+02H*2 ;8255的C口地址

MY8255_MODE EQU IOY0+03H*2 ;8255的控制寄存器地址

STACK1 SEGMENT STACK

DW 256 DUP(?)

STACK1 ENDS

CODE SEGMENT

ASSUME CS:CODE

START: MOV DX,MY8255_MODE ;初始化8255工作方式MOV AL,82H ;工作方式0,A口输出,B口输入

OUT DX,AL

LOOP1:MOV DX,MY8255_A ;写A口

MOV AL,00000001B

OUT DX,AL

CALL DALL Y

MOV DX,MY8255_A ;写A口

MOV AL,00000010B

OUT DX,AL

CALL DALL Y

MOV DX,MY8255_A ;写A口

MOV AL,00000100B

OUT DX,AL

CALL DALL Y

MOV DX,MY8255_A ;写A口

MOV AL,00001000B

OUT DX,AL

CALL DALL Y

MOV DX,MY8255_A ;写A口

MOV AL,00010000B

OUT DX,AL

CALL DALL Y

MOV DX,MY8255_A ;写A口

MOV AL,00100000B

OUT DX,AL

CALL DALL Y

MOV DX,MY8255_A ;写A口

MOV AL,01000000B

OUT DX,AL

CALL DALL Y

MOV DX,MY8255_A ;写A口

MOV AL,10000000B

OUT DX,AL

CALL DALL Y

MOV AH,1 ;判断是否有按键按下

INT 16H

JZ LOOP1 ;无按键则跳回继续循环,有则退出

QUIT: MOV AX,4C00H ;结束程序退出

INT 21H

DALL Y PROC NEAR ;软件延时子程序

PUSH CX

PUSH AX

MOV CX,0FFFH

D1: MOV AX,0FFFFH

D2: DEC AX

JNZ D2

LOOP D1

POP AX

POP CX

RET

DALL Y ENDP

CODE ENDS

END START

模拟交通灯(实验现象在代码后面:6个灯实验)

IIOY0 EQU 3000H ;片选IOY0对应的端口始地址MY8255_A EQU IOY0+00H*2 ;8255的A口地址

MY8255_B EQU IOY0+01H*2 ;8255的B口地址

MY8255_C EQU IOY0+02H*2 ;8255的C口地址

MY8255_MODE EQU IOY0+03H*2 ;8255的控制寄存器地址

STACK1 SEGMENT STACK

DW 256 DUP(?)

STACK1 ENDS

CODE SEGMENT

ASSUME CS:CODE

START: MOV DX,MY8255_MODE ;初始化8255工作方式

MOV AL,80H ;工作方式0,A口输出,B口输入

OUT DX,AL

MOV DX,MY8255_A ;写A口

MOV AL,00010001B //初始状态:两个红灯亮;

OUT DX,AL

CALL DALL Y

LOOP1: MOV DX,MY8255_A ;写A口

MOV AL,00010010B //接着一个路口红灯不变,另一个路口变黄灯;

OUT DX,AL

CALL DALL Y

MOV DX,MY8255_A ;写A口

MOV AL,00010100B //一个路口红灯不变,另一个路口由黄灯变绿灯;

OUT DX,AL

CALL DALL Y

MOV DX,MY8255_A ;写A口

MOV AL,00100010B //接着两个黄灯亮;

OUT DX,AL

CALL DALL Y

MOV DX,MY8255_A ;写A口

MOV AL,01000001B //然后刚才的红灯由黄灯变绿灯,绿灯由黄灯变红灯,如此循环;

OUT DX,AL

CALL DALLY

MOV AH,1 ;判断是否有按键按下

INT 16H

JZ LOOP1 ;无按键则跳回继续循环,有则退出

QUIT: MOV AX,4C00H ;结束程序退出

INT 21H

DALL Y PROC NEAR ;软件延时子程序

PUSH CX

PUSH AX

MOV CX,09FFFH

D1: MOV AX,0FFFFH

D2: DEC AX

JNZ D2

LOOP D1

POP AX

POP CX

RET

DALL Y ENDP

CODE ENDS

END START

相关文档
最新文档