实验二 交通灯控制实验(8255A)
一.实验目的
通过并行接口8255实现十字路口交通灯的模拟控制,进一步掌握对并行口的使用。 二.实验内容
红 黄 绿 红 黄 绿
按图中虚线连接电路,L7、L6、L5路口的交通灯与PC7、PC6、PC5相连,L0作为东西路口的交通灯与PC2、PC1、编程使六个灯按交通灯变化规律亮三.编程提示: 十字路口交通灯的变求:
(1) 南北路口的绿灯、东西路口的亮30秒左右。
(2) 南北路口的黄灯闪烁若干次,路口的红灯继续亮。
(3) 南北路口的红灯、东西路口的亮30秒左右。
(4) 南北路口的红灯继续亮、同时的黄灯亮闪烁若干次。 (5) 转(1)重复。 四、参考流程图
返回DOS 是否有键按下 Y 开始 设置8255A口输出C口输出 南北路口绿灯亮,东西路口红灯亮 作为南北L2、L1、PC0相连。灭。 化规律要红灯同时同时东西绿灯同时东西路口
长延时 南北路口黄灯闪,东西路口红灯亮 南北路口红灯亮,东西路口绿灯亮 长延时 南北路口红灯亮,东西路口黄灯闪 N 四、程序清单 Jtd.asm
;***********************************; ;* 十字路口红绿灯模拟演示程序 *; ;* 端口各灯的设置: *; ;* 1红 1黄 1绿 0 0 2红 2黄 2绿 *; ;***********************************;
data segment
ioport equ 0d400h-0280h io8255a equ ioport+28ah io8255b equ ioport+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 mov al,90h
out dx,al ;设置8255为C口输出 mov dx,io8255a re_on: mov bx,0
on: mov al,portc1[bx] cmp al,0ffh jz re_on
out dx,al ;点亮相应的灯 inc bx
mov cx,20 ;参数赋初值 test al,21h ;是否有绿灯亮 jz de1 ;没有,短延时 mov cx,2000 ;有,长延时
de1: mov di,9000 ;di赋初值5000 de0: dec di ;减1计数 jnz de0 ;di不为0 loop de1 push dx mov ah,06h mov dl,0ffh int 21h pop dx
jz on ;没有,转到on exit: mov ah,4ch ;返回 int 21h code ends end start