程序修改
要求:开关闭合时,LED0~7依次循环点亮;开关打开,所有LED同时亮灭闪烁。
在原有的代码基础上,做出上述现象
修改代码如下
.MODEL SMALL
.8086
.code
.startup
mov bl,0ffh
l: mov dx,030h
in al,dx
test al,1
jz N
jnz N1
N: mov al,bl
out dx,al
call delay10
not bl ;LED同时亮灭的代码
jmp l
;LED循环亮灭的分支结构程序
N1:
xor bl,00000001b ;LED循环点亮的代码
rol bl,1
mov al,bl
out dx,al
call delay10
jmp l
delay10 proc
mov cx,40000
loop $
ret
delay10 endp
.data
.stack
END
修改建议:在对原有代码的基础上做出修改,首先的原则便是尽量少更改原有的代码。这里需要同时亮灭首先mov bl,0ffh和代码not bl便可以实现。LED代码循环点亮要修改或添加的代码过多,这里建议使用分支结构程序进行设计。这样既可以减少对原有代码的影响,又可以保持思路清晰
实验现象
io - Proteus 8 Professional
端口地址更改
完成上述内容后,修改电路,将端口地址改成24H,并修改相应代码,重新仿真,搞清楚I/O端口译码电路和端口地址之间得对应关系。
A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 | |
30H | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
24H | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
68H | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 |