欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-15 14:04:25
...

一、实验目的

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

二、实验原理和内容

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

三、编程提示

十字路口交通灯的变化规律要求:
微机接口实验三:交通灯控制实验(C口置位/复位控制字的使用)

四、电路接线图

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

五、程序设计流程图

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

六、一些说明

这个实验主要用到了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