第三次微机实验报告
题目:8255 芯片的编程
8255 芯片的编程
姓
学
名
号
专 业 班 级
提 交 日 期
赖 慧 谋
201230281232
信 息 工 程 5 班
2014-6-16
一、实验目的
1、自学 TPC-ZK 通用 32 位微机接口实验系统的组成。
2、掌握实验系统中接口地址译码电路的工作原理及计算方法。
3、掌握简单 I/O 端口的读写操作。
4、掌握 8255 的工作原理及编程方法。
二、开发环境
运行于 XP 操作系统下 TPC-ZK 集成开发环境
参见附录:在 XP 操作系统下汇编程序实现直接进行 I/O 读写的使用说明
三、实验系统的介绍
实验系统相关资料请查考 TPC-ZK USB 接口学生实验指导书
四、实验题目:8255 的综合编程
(1)实验电路如图20,8255C口接逻辑电平开关K0~K7,A口接LED显示电路
L0~L7。 编程从8255C口输入数据,再从A口输出。
实验要求参考实验指导书上实验三 可编程并行接口8255
(2)通过并行接口8255实现十字路口交通灯的模拟控制,如图29,L7、L6、L5
作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交
通灯与PC2、PC1、PC0相连。编程使六个灯按交通灯变化规律亮灭。 十字路口
交通灯的变化规律要求:
实验要求参考实验指导书上实验七 交通灯控制实验
(1) 南北路口的绿灯、东西路口的红灯同时亮一定时间。
(2) 南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮。
(3) 南北路口的红灯、东西路口的绿灯同时亮一定时间。
(4) 南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁若干次。
(5) 转(1)重复。
附加功能:
1)PC3键作为右侧那组信号等的优先控制信号,如果PC3键为高,右侧信号灯立
即转换成绿灯亮(PC0=1),左侧信号灯红灯亮(PC7=1),其它信号灯为0
2)PC4键作为左侧那组信号等的优先控制信号,如果PC4键为高,左侧信号灯立
即转换成绿灯亮(PC5=1),右侧信号灯红灯亮(PC2=1),其它信号灯为0
3)PC3=0,PC4=0,依照正常信号灯控制方式。
五.程序流程图
开始
设置 8255A 口输出 C 口输出
南北路口绿灯亮,东西路口红灯亮
长延时
南北路口黄灯闪,东西路口红灯亮
南北路口红灯亮,东西路口绿灯亮
长延时
南北路口红灯亮,东西路口黄灯闪
是否有按
键按下
Y
六.源程序清单
DATAS SEGMENT
io8255a
io8255b
io8255c
io8255d
light
equ 288h
equ 289h
equ 28ah
equ 28bh
db 24h,44h,04h,44h,04h,44h,04h,44h,04h;六个灯可能
db 81h,82h,80h,82h,80h,82h,80h,82h,80h ;的状态数据
db 0ffh;结束标志
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
DB 100 DUP(?) ;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
re_on:mov bx,0
on:
;设置 8255 为 C 口输入
;将 dx 设置到 C 口
;检查输入
;
;如果相等就跳
;
;如果相等就跳
mov dx,io8255d
mov al,99h
out dx,al
mov dx,io8255c
in al,dx
mov dl,al
cmp dl,10h
jz set1
cmp dl,8h
jz set2
mov dx,io8255d
mov al,90h
out dx,al
mov dx,io8255c
mov al,light[bx];取得状态值
cmp al,0ffh
jz re_on
out dx,al
inc bx
;设置 8255 为 C 口输出
;将 dx 设置到 C 口
;判断是否到状态表的最后一个值
;是的时候跳
;点亮相应的灯
;使 bx 指向状态表的下一个状态值(jz 是不相等就跳,jnz 是相等
就跳(如果按老师的代码的话))
;参数赋初值(短延时)
;是否有绿灯亮
;没有,短延时
;有,长延时
;di 赋初值 9000
;减一计数
;di 不为零
mov cx,200
test al,21h
jz dea
mov cx,2000
dea:mov di,9000
deb:dec di
jnz deb
loop dea
;正常时候 跳过下面代码
jmp q
set1: mov bx,0
jmp if
set2: mov bx,9
if: mov dx,io8255d
q:
;设置 8255 为 C 口输出
;将 dx 设置到 C 口
mov al,90h
out dx,al
mov dx,io8255c
mov al,light[bx];取得状态值
out dx,al
push dx
mov ah,06h
mov dl,0ffh
int 21h
pop dx
jz on
;没有,转到 on
;此处输入代码段代码
exit:
MOV AH,4CH
INT 21H
CODES ENDS
END START
;返回