level 1
贴吧用户_GWP2yZ9
楼主
帮帮可怜的娃,程序有了,用的emu8086汇编,死活不会连。
目标:以8086CPU和8255为核心设计一个流水灯,具体要求如下:
利用8255的PB口连接八个灯,另外PC7口的一位设置一个按键,如果键按下,流水灯由上而下;如果键打开,流水灯由下而上。要求画出电路原理图,说明工作原理,编写程序及程序流程图,并在protues软件上完成仿真,实现相关要求。下面是代码。
; 定义8255端口地址
DATA_PORT EQU 300H ; 数据端口
CTRL_PORT EQU 303H ; 控制端口
STACK SEGMENT STACK
DW 100H DUP(?)
STACK ENDS
DATA SEGMENT ; 声明数据段
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX, DATA ; 将 DATA 段的段地址加载到 AX MOV DS, AX ; 将 AX 的值移动到 DS
; 初始化8255 (PB口输出,PC7输入)
MOV DX, CTRL_PORT ; 将控制端口地址加载到 DX MOV AL, 80H ; 方式 0,PB输出,PC上部输入
OUT DX, AL ; 使用 DX 寄存器输出
LOOP: ; 读取PC7状态
MOV DX, CTRL_PORT ; 将控制端口地址加载到 DX IN AL, DX ; 使用 DX 寄存器输入
TEST AL, 80H ; 检测PC7 (第7位)
JZ DOWN ; PC7为0,按键按下,向下流动
JMP UP ; PC7为1,按键松开,向上流动
DOWN: ; 向下流动 MOV CX, 8 ; 循环8次DOWN_LOOP: MOV AL, 01H ; 初始值
MOV BX, 0DOWN_SHIFT: MOV DX, DATA_PORT OUT DX, AL CALL DELAY ; 延时
ROL AL, 1 ; 循环左移一位
INC BX CMP BX,8 JL DOWN_SHIFT LOOP DOWN_LOOP JMP LOOP
UP: ; 向上流动
MOV CX, 8 ; 循环8次
UP_LOOP: MOV AL, 80H ; 初始值
MOV BX, 0UP_SHIFT: MOV DX, DATA_PORT OUT DX, AL CALL DELAY ; 延时
ROR AL, 1 ; 循环右移一位
INC BX CMP BX, 8 JL UP_SHIFT
LOOP UP_LOOP JMP LOOP
; 延时子程序
DELAY PROC PUSH CX MOV CX, 0FFFFHDELAY_LOOP: LOOP DELAY_LOOP POP CX RETDELAY ENDP
CODE ENDS END START
仿真报错:
Invalid internal memory size "" NULL (Cheat mode)Real' Time Simulation failedto start.

2024年12月28日 16点12分
1
目标:以8086CPU和8255为核心设计一个流水灯,具体要求如下:
利用8255的PB口连接八个灯,另外PC7口的一位设置一个按键,如果键按下,流水灯由上而下;如果键打开,流水灯由下而上。要求画出电路原理图,说明工作原理,编写程序及程序流程图,并在protues软件上完成仿真,实现相关要求。下面是代码。
; 定义8255端口地址
DATA_PORT EQU 300H ; 数据端口
CTRL_PORT EQU 303H ; 控制端口
STACK SEGMENT STACK
DW 100H DUP(?)
STACK ENDS
DATA SEGMENT ; 声明数据段
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX, DATA ; 将 DATA 段的段地址加载到 AX MOV DS, AX ; 将 AX 的值移动到 DS
; 初始化8255 (PB口输出,PC7输入)
MOV DX, CTRL_PORT ; 将控制端口地址加载到 DX MOV AL, 80H ; 方式 0,PB输出,PC上部输入
OUT DX, AL ; 使用 DX 寄存器输出
LOOP: ; 读取PC7状态
MOV DX, CTRL_PORT ; 将控制端口地址加载到 DX IN AL, DX ; 使用 DX 寄存器输入
TEST AL, 80H ; 检测PC7 (第7位)
JZ DOWN ; PC7为0,按键按下,向下流动
JMP UP ; PC7为1,按键松开,向上流动
DOWN: ; 向下流动 MOV CX, 8 ; 循环8次DOWN_LOOP: MOV AL, 01H ; 初始值
MOV BX, 0DOWN_SHIFT: MOV DX, DATA_PORT OUT DX, AL CALL DELAY ; 延时
ROL AL, 1 ; 循环左移一位
INC BX CMP BX,8 JL DOWN_SHIFT LOOP DOWN_LOOP JMP LOOP
UP: ; 向上流动
MOV CX, 8 ; 循环8次
UP_LOOP: MOV AL, 80H ; 初始值
MOV BX, 0UP_SHIFT: MOV DX, DATA_PORT OUT DX, AL CALL DELAY ; 延时
ROR AL, 1 ; 循环右移一位
INC BX CMP BX, 8 JL UP_SHIFT
LOOP UP_LOOP JMP LOOP
; 延时子程序
DELAY PROC PUSH CX MOV CX, 0FFFFHDELAY_LOOP: LOOP DELAY_LOOP POP CX RETDELAY ENDP
CODE ENDS END START
仿真报错:
Invalid internal memory size "" NULL (Cheat mode)Real' Time Simulation failedto start.
