一 实验目的
1)掌握8255方式0的工作原理、初始化设置方法。
2)掌握I/O接口地址译码电路的工作原理及端口地址的计算方法。
3)掌握I/O端口的读写操作及编程方法。
4)通过并行接口8255实现十字路口交通灯的模拟控制,掌握对并行口的使用。
5)掌握微机接口集成开发环境HQFC软件的使用方法。
二 实验原理图
三 代码实现
该程序是先设置好端口地址,工作模式,然后显示第一种预设好的交通灯状态南北绿灯亮,东西红灯亮,判断是否结束,判断是否到达下一状态来决定长延时与短延时,延时结束,继续执行下一数据实现南北黄灯闪,东西红灯亮,然后转到南北红灯亮,东西绿灯亮,经长延时,南北红灯亮,东西黄灯闪,判断有没有键入,没有继续循环执行上述的交通灯状态,直到有键入则结束程序。
;参考代码
;交通灯控制实验
;***********************************;
;* 十字路口红绿灯模拟演示程序 *;
;* 端口各灯的设置: *;
;* 1红 1黄 1绿 0 0 2红 2黄 2绿 *;
;***********************************;
data segment
io8255a equ 28ah
io8255b equ 28bh
portc1 db 24h,44h,04h,44h,04h,44h,04h ;六个灯可能
db 81h,82h,80h,82h,80h,82h,80h ;的状态数据
db 0ffh ;结束标志
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data ;设置数据段基址
mov ds,ax
mov dx,io8255b ;设控制寄存器端口地址Y1
mov al,90h ;设方式选择控制字
out dx, al ;设置8255为C口输出
mov dx,io8255a
re_on: mov bx,0 ;bx清零
on: mov al,portc1[bx] ;把控制红灯亮的数据传给al
cmp al,0ffh ;判断是否结束
jz re_on ;结束,跳转到re on
out dx, al ;点亮相应的灯
inc bx ;bx自增1,下一状态
mov cx,200 ;参数赋初值
test al,21h ;是否有绿灯亮
jz de1 ;没有, 短延时
mov cx,2000 ;有,长延时
de1: mov di,9000 ;di赋初值9000
de0: dec di ;减1计数
jnz de0 ;di不为0,继续减1计数
loop de1 ;di为0,cx不为0执行循环de1
push dx ;dx进栈
mov ah,06h ;直接控制台IO,判断是否有键入
mov dl,0ffh
int 21h
pop dx ;dx出栈
jz on ;没有,转到on
exit: mov ah,4ch ;返回
int 21h
code ends
end start
四 流程图