微机实验——十字路口交通灯控制器

问题描述:

使用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

 

  • 3
    点赞
  • 7
    评论
  • 36
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值