一、实验目的
熟悉使用8255并行口扩展芯片
熟悉使用发光二极管及数码管等常见的外围设备
理解静态显示的方法
二、实验内容
使用数码管静态显示的方法,使最右边的数码管循环显示0-9的数值。
硬件连接:
选通端:PC0-S0
段码端:PA0-a、PA1-b、PA2-c、PA3-d、PA4-e、PA5-f、PA6-g、PA7-dp
8255的CS:接288H
已知:
1、8255的端口地址:
A口为 288H、C口为28AH、控制口为28BH,
放在数据段定义
C8255 equ 28ah
K8255 equ 28bh
A8255 equ 288h
2、实验台上的七段数码管为共阴型,本应在公共端S0加低电平点亮,但是内部做了反向处理,所以输入端S0为1才选中最右边的数码管显示,位码输入端(段码端)高电平点亮。所以,可以求得0-9的段码可如下定义为(段码也应写在数据段的定义中):
LED db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
3、8255的设置:注意设置A、C口都为输出。
4、延时程序:
mov cx,60000
delay: loop delay ;延时
如果延时时间不够,可以多次使用。
三、实验报告
①写出该程序中8255的控制字中每一位设置的意义。
D6、D5基本输入输出方式 (方式0)
D4:A口是输出的,所以是0
D3:C口也是输出的,所以是0
D2、D1:B口没有用,都是0
D0:C口的第四位也是输出的,所以是0
D7 D6 D5 D4 D3 D2 D1 D0
1 0 0 0 0 0 0 0
即(80H)
②写出程序代码并加上注释。
data segment
C8255 equ 28ah
K8255 equ 28bh
A8255 equ 288h
LED db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
ends
stacks segment
dw 128 dup(0)
ends
code segment
ASSUME CS:CODE,DS:DATA,SS:stacks
start:
mov ax, data
mov ds, ax
MOV DX,K8255 ;控制口的端口地址
MOV AL,80H ;AL是命令字
OUT DX,AL ;把80H控制字送入8255的控制口,让它的A口和C口都属于输出形式
MOV AL,0FH;低四位都是1,高四位都是0----那些数码管会点亮?
MOV DX,C8255
OUT DX,AL;把AL中的内容out到DX端口去
;取段码
N1:MOV BX,OFFSET LED
MOV SI,10
loop delay
N2:MOV AL,[BX]
MOV DX,A8255;通过A口送出去
OUT DX,AL;这样我们就可以在整个LED上显示0这个数字
INC BX
SUB SI,1
CMP SI,0
JE N1
mov cx,0
delay: loop delay ;延时
mov di,0
delays: loop delays ;延时
JMP N2
ends
end start
最右边单个数码管显示
只需要将上述的0FH改为01H
并在此基础上连接上PC2—S2,PC3—S3
另一份代码,此代码正确,已经验证
data segment
C8255 equ 28ah
K8255 equ 28bh
A8255 equ 288h
LED db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
ends
stack segment
dw 128 dup(0)
ends
code segment
ASSUME CS:CODE,DS:DATA,SS:stack
start:
mov al,80H
mov dx,K8255
out dx,al
n2:
mov bx,offset LED
mov si,10
mov ax,data
mov ds,ax
n1:
mov al,[bx]
mov dx,A8255
out dx,al
mov cx,60000
delay: loop delay
mov al,01h
mov dx,C8255
out dx,al
inc bx
dec si
jz n2
jmp n1
ends
end start
四、程序流程图
五、实验结果显示