实验目的与任务
1、理解可编程并行接口8255的基本工作原理;
2、熟悉8255的初始化编程方法;
3、掌握8255方式0的工作原理及使用。
基本原理
8255A端口A通过20芯偏平线连接J5、J6已与8个LED灯连接。8255A端口A工作在方式0,输出。通过端口A控制LED发光。
实验内容
编写程序,要求利用8255的A口控制8个发光二极管的发光,并产生一定的艺术效果,验证实验的正确性。
可编程并行接口8255的地址分配:
A口 300H
B口 301H
C口 302H
控制寄存器端口 303H
控制字为:10000000B
线路连接:模块电源跳JP8。20线扁平线J5,J6连接。
程序详单:
CODE SEGMENT
ASSUME CS:CODE
START:
MOV DX,303H;初始化
MOV AL,80H;方式0
OUT DX,AL
P0:
MOV CX,1
P1:
MOV DX,300H;A口
MOV AL,00000001B
OUT DX,AL
INC CX
CMP CX,20000;其实就是延时,不然一闪而过
JNZ P1
MOV CX,1
P2:
MOV DX,300H
MOV AL,00000010B
OUT DX,AL
INC CX
CMP CX,20000
JNZ P2
MOV CX,1
P3:
MOV DX,300H
MOV AL,00000100B
OUT DX,AL
INC CX
CMP CX,20000
JNZ P3
MOV CX,1
P4:
MOV DX,300H
MOV AL,00001000B
OUT DX,AL
INC CX
CMP CX,20000
JNZ P4
MOV CX,1
P5:
MOV DX,300H
MOV AL,00010000B
OUT DX,AL
INC CX
CMP CX,20000
JNZ P5
MOV CX,1
P6:
MOV DX,300H
MOV AL,00100000B
OUT DX,AL
INC CX
CMP CX,20000
JNZ P6
MOV CX,1
P7:
MOV DX,300H
MOV AL,01000000B
OUT DX,AL
INC CX
CMP CX,20000
JNZ P7
MOV CX,1
P8:
MOV DX,300H
MOV AL,10000000B
OUT DX,AL
INC CX
CMP CX,20000
JNZ P8
JMP P0
MOV AH,4CH
INT 21H
CODE ENDS
END START
咋运行呢?
masm.exe和link.exe必不可少!
来吧!一大波资源
windows下快捷键win+R输入cmd进入你写的文件名.asm目录下:
(忘了win10要dosbox)
然后masm 文件名.asm
然后enter
然后link 文件名.obj
生成文件名.exe则完成了
运行情况:
差点忘了基础不好的同学请再记一遍:
数据从低位到高位是从右往左。
10000000
高-----低
但地址是左低右高
例如:
1000 低
1001
1002
1003 高
对应数据:12345678
78 低
56
34
12 高
如果这样存进去就是小端模式啦。
1000 低 78 低
1001 56
1002 34
1003 高 12 高
小端模式:低低高高
低地址对应低字节
高地址对应高字节
则相应的大端模式:低高高低
低地址对应高字节
高地址对应低字节
再来虚拟仿真机上来个不同的:(其实啥也没变,就由8位变成了24位,0就灭,1就亮)
端口地址变了:
8255四个端口 400H ~ 403H
data segment
portA equ 400H ; PA口地址
s db "twenty four LEDs flicker crosswise. Press any key to exit ...",0dh,0ah,"$" ;程序功能提示
data ends
code segment
assume cs:code,ds:data
go: mov ax,data
mov ds,ax
mov dx,offset s ;显示提示
mov ah,9
int 21h
mov dx,porta+3;控制字端口初始化
mov al,80h
out dx,al ; 三端口均初始化为方式0输出
mov bx,5555H ;5H转换为0101B
mov cl,55H
L0: mov ah,0bH
Int 21h ; 有无按键,按了就退出
Cmp al,0ffH
Jz exit
mov dx,portA
mov al,bl
out dx,al ; 输出01010101B到A口
Inc dx
mov al,bh
out dx,al ; 输出01010101B到B口
Inc dx
mov al,cl
Out dx,al ; 输出01010101B到C口
Call delay05 ; 延时
Xor bx,0ffffH ; 异或 各位取反
xor cl,0ffH
Jmp L0
Exit: mov ah,4ch
Int 21h
delay05 proc near ; 循环延时子程序
push cx
push bx
mov cx,300H
d1: mov bx,1200
d2: dec bx
jnz d2
loop d1
pop bx
pop cx
ret
delay05 endp
Code ends
End go
一词:redeem 补救,弥补