logo资料库

简单IO应用,流水灯控制,汇编语音,8086.docx

第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
资料共14页,剩余部分请下载后查看
一.实验操作流程
二:实验
实验一: 亮4个灯、暗4个灯,1亮1暗均匀分布,且稳定不变
实验二:亮1个灯,暗7个灯,从上到下轮流点亮每一个灯,每次只亮一个灯,循环间隔约2秒;
实验三:亮2个灯,暗6个灯,一个灯从上往中间轮流点亮,另一个灯从下往中间轮流点亮,循环间隔约1秒。
实验四:采用ROR、ROL循环移位语句(P77)及LOOP语句(P81),实现一个灯从第1个循环点亮
三:实验总结
实验 1 简单 IO 应用—流水灯控制 实验过程需完成内容: 1、亮 4 个灯、暗 4 个灯,1 亮 1 暗均匀分布,且稳定不变; 2、亮 1 个灯,暗 7 个灯,从上到下轮流点亮每一个灯,每次只亮一个灯, 循环间隔约 2 秒; 3、亮 2 个灯,暗 6 个灯,一个灯从上往中间轮流点亮,另一个灯从下往中 间轮流点亮,循环间隔约 1 秒。 4、采用 ROR、ROL 循环移位语句(P77)及 LOOP 语句(P81),实现一个灯从 第 1 个循环点亮到第 8 个,然后从第 8 个循环点亮至第 1 个,一直上下循环。 图 1 实验电路图
一.实验操作流程 1 解压 Proteus 软件(Proteus 7 Professional\BIN\ISIS.EXE),实验时导入 IO 文件夹的*.DSN 文 件 ; 2 参考教材 P349“附录 A x86 汇编语言程序上机过程与调试方法 A.1”编制汇编程序并调试; 3 将生成的*.exe 导入 8086 CPU,并运行; 4 查看结果,修改 ASM 文件程序,调试程序,记录实验现象。 二:实验 实验一: 亮 4 个灯、暗 4 个灯,1 亮 1 暗均匀分布,且稳定 不变 ;定义堆栈------------------ STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS ;定义变量------------------ DATA SEGMENT CNT DB 10101010B DATA ENDS ;代码段------------------ CODE SEGMENT ASSUME CS:CODE,DS:DATA ORG 0100H ;定义变量 CNT=80H START: MOV AX,DATA MOV DS,AX MOV AL,CNT MOV DX,0000H ;这里不用改变 ;这里不用改变 ;数据段地址 ;数据段存入数据段寄存器 ;初始 CNT=10000000B 送 AL ;Led 外设的端口地址 ;亮 1 桟灯? LP: OUT DX,AL CALL DELAY CALL DELAY CALL DELAY CALL DELAY ;添加你的程序 ;添加你的程序 ;添加你的程序 ;其他程序段在理解的情况下可以自己编辑 JMP LP ;调至 LP 再次进入循环 ;调用延时子程序 ;DELAY 软件延时子程序
;这里用到堆栈 ;这里循环了几次? DELAY PROC PUSH BX PUSH CX MOV BX,2 LP2:MOV CX,0 LP1:LOOP LP1 DEC BX JNZ LP2 POP CX POP BX RET DELAY ENDP CODE ENDS END START 运行结果: 实验二:亮 1 个灯,暗 7 个灯,从上到下轮流点亮每一个灯, 每次只亮一个灯,循环间隔约 2 秒; 汇编代码: ;定义堆栈------------------ STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS ;定义变量------------------ DATA SEGMENT CNT DB 10000000B ;定义变量 CNT=80H
DATA ENDS ;代码段------------------ CODE SEGMENT ASSUME CS:CODE,DS:DATA ;这里不用改变 ;这里不用改变 ORG 0100H START: MOV AX,DATA MOV DS,AX MOV AL,CNT MOV DX,0000H LP:OUT DX,AL CALL DELAY ROL AL,1 JMP LP ;数据段地址 ;数据段存入数据段寄存器 ;初始 CNT=10000000B 送 AL ;Led 外设的端口地址 ;亮 1 桟灯? ;调用延时子程序 ;添加你的程序 ;添加你的程序 ;添加你的程序 ;其他程序段在理解的情况下可以自己编辑 JMP LP ;调至 LP 再次进入循环 ;DELAY 软件延时子程序 DELAY PROC ;这里用到堆栈 ;这里循环了几次? PUSH BX PUSH CX MOV BX,2 LP2:MOV CX,0 LP1:LOOP LP1 DEC BX JNZ LP2 POP CX POP BX RET DELAY ENDP CODE ENDS END START 运行结果:
实验三:亮 2 个灯,暗 6 个灯,一个灯从上往中间轮流点亮, 另一个灯从下往中间轮流点亮,循环间隔约 1 秒。 ;定义堆栈------------------ STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS ;定义变量------------------ DATA SEGMENT ;定义变量 CNT=80H CNT DB 00000001B DATA ENDS
;代码段------------------ CODE SEGMENT ASSUME CS:CODE,DS:DATA ORG 0100H ;这里不用改变 ;这里不用改变 START: MOV AX,DATA MOV DS,AX MOV BL,00000001B MOV CL,10000000B MOV AL,CNT MOV DX,0000H ;数据段地址 ;数据段存入数据段寄存器 ;初始 CNT=10000000B 送 AL ;Led 外设的端口地址 LP: MOV AL,BL ADD AL,CL OUT DX,AL CALL DELAY SHL BL,1 SHR CL,1 JMP LP ;添加你的程序 ;亮 1 桟灯? ;调用延时子程序 ;添加你的程序 ;添加你的程序 ;其他程序段在理解的情况下可以自己编辑 JMP LP ;调至 LP 再次进入循环 ;这里用到堆栈 ;这里循环了几次? ;DELAY 软件延时子程序 DELAY PROC PUSH BX PUSH CX MOV BX,2 LP2:MOV CX,0 LP1:LOOP LP1 DEC BX JNZ LP2 POP CX POP BX RET DELAY ENDP CODE ENDS END START 运行结果:
分享到:
收藏