微机接口实验三:交通灯控制实验(C口置位/复位控制字的使用)

一、实验目的

通过并行接口8255实现十字路口交通灯的模拟控制,进一步掌握对并行口的使用。

二、实验原理和内容

在这里插入图片描述

三、编程提示

十字路口交通灯的变化规律要求:
在这里插入图片描述

四、电路接线图

在这里插入图片描述

五、程序设计流程图

在这里插入图片描述

六、一些说明

这个实验主要用到了8255中的C口置位/复位控制字,实现一个灯变化而另外几个灯不变化的效果。

七、程序源代码

stack segment stack
    db 200 dup(0)
stack ends

data segment
      APORT equ 288h
      CPORT equ 28ah
      CTRL equ 28bh
data ends

code segment
      assume cs:code,ds:data,ss:stack

      delay MACRO x  ;延时
        local loop_delay
        local flag
        push cx
        push bx
        xor bx, bx
        flag:mov cx, 0ffffh
        loop_delay:loop loop_delay
        inc bx
        cmp bx, x
        jnz flag
        pop bx
        pop cx
      ENDM

      put_data MACRO x, y  ;x为端口 y为数据
        push ax
        push dx
        mov al, y
        mov dx, x
        out dx, al
        pop dx
        pop ax
      ENDM

   main:mov ax,data
        mov ds,ax
        mov ax, stack
        mov ss, ax
        put_data CTRL, 10000000b  ;C口输出
  again:put_data CPORT, 00100100b  ;南北绿灯(PC5)东西红灯(PC2)同时亮30秒
        delay 3000  ;延时30秒
        put_data CTRL, 00001010b ;先让南北绿灯熄灭
        mov cx, 5  ;东西黄灯闪五次
  loop1:put_data CTRL, 00001101b  ;南北黄灯(PC6)亮同时东西红灯保持不变
        delay 100   ;延时制造闪烁
        put_data CTRL, 00001100b  ;南北黄灯熄灭同时东西红灯保持不变
        delay 100
        loop loop1
        put_data CPORT, 10000001b   ;南北红灯(PC7)东西绿灯(PC0)同时亮30秒
        delay 3000
        put_data CTRL, 00000000b   ;先让东西绿灯(PC0)熄灭
        mov cx, 5   ;南北黄灯闪烁5次
  loop2:put_data CTRL, 00000011b   ;东西黄灯(PC1)亮同时南北红灯保持不变
        delay 100   ;延时制造闪烁
        put_data CTRL, 00000010b   ;东西黄灯熄灭同时南北红灯保持不变
        delay 100
        loop loop2
        jmp again   ;循环往复
        mov ah,4ch
        int 21h
code ends
     end main

猜你喜欢

转载自blog.csdn.net/Cyril_KI/article/details/110677914