汇编语言实现交通灯控制实验

一 实验目的
1)掌握8255方式0的工作原理、初始化设置方法。
2)掌握I/O接口地址译码电路的工作原理及端口地址的计算方法。
3)掌握I/O端口的读写操作及编程方法。
4)通过并行接口8255实现十字路口交通灯的模拟控制,掌握对并行口的使用。
5)掌握微机接口集成开发环境HQFC软件的使用方法。

二 实验原理图
在这里插入图片描述
在这里插入图片描述
三 代码实现
该程序是先设置好端口地址,工作模式,然后显示第一种预设好的交通灯状态南北绿灯亮,东西红灯亮,判断是否结束,判断是否到达下一状态来决定长延时与短延时,延时结束,继续执行下一数据实现南北黄灯闪,东西红灯亮,然后转到南北红灯亮,东西绿灯亮,经长延时,南北红灯亮,东西黄灯闪,判断有没有键入,没有继续循环执行上述的交通灯状态,直到有键入则结束程序。

;参考代码
;交通灯控制实验
;***********************************;
;*    十字路口红绿灯模拟演示程序   *;
;* 端口各灯的设置:                 *;
;*   111绿 0 0 222绿   *;
;***********************************;
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


四 流程图
在这里插入图片描述

  • 9
    点赞
  • 131
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值