问题描述:
使用8255,发光二极管等器件搭建交通灯控制器。 模拟十字路口的红绿灯,求显示状态分别为
南北绿东西红,持续时间为4s;
南北黄东西红,闪2次,每次闪为1s;
南北红东西绿,持续时间为4s;
南北红东西黄,闪2次,每次闪为1s。
采用一个按键的形式模拟急救车出现,采用中断形式通知CPU,要求使东南西北四个方向都为红灯1s。
问题分析及连线 :
基本问题流程图:
当按下空格键时,东西、南北都亮起红灯,时间为1秒。
8255连线图如下所示:
汇编代码:
data segment io8255a equ 28ah io8255b equ 28bh io8255c equ 28ch portc1 db 24h,44h,04h,44h,04h ;六个灯可能的状态,2表示南北,4表示东西 db 81h,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,1000 ;参数赋初值 test al,21h ;是否有绿灯亮 jz de1 ;没有,则短延时 mov cx,4000 ;有,长延时 de1:mov di,36000 ;di赋初值36000 push dx mov ah,06h mov dl,0ffh int 21h pop dx jnz cmp0 de0: dec di ;减1技术 jnz de0 ;di不为0掉跳到de0 loop de1 jz on exit: mov ah,4ch int 21h cmp0: cmp al,20h ;比较al和20h(空格键) jz SOS ;是空格键则转到SOS jmp de0 SOS: mov al,84h ;救护车模式下的灯 out dx,al mov cx,1000 jmp de1 code ends end start