微机原理课程设计-模拟十字路口交通信号灯

一、设计任务描述

1.1设计目的

通过课程设计使学生更进一步掌握微机原理及应用课程的有关知识,提高应用微机解决问题的能力,加深对微机应用的理解。通过查阅资料,结合所学知识进行软、硬件的设计,使学生初步掌握应用微机解决问题的步骤及方法。为以后学生结合专业从事微机应用设计奠定基础。

1.2 设计要求

     控制LED灯,按照十字路口红绿灯的原理亮灭显示:

  (1) 东西方向车辆放行x秒钟。即东西方向的绿灯和南北方向的红灯同时点亮x秒钟。

 ( 2) x秒钟后,东西方向的绿灯熄灭,黄灯闪烁4次,以警示车辆将切换红绿灯。此时南北方向仍维持红灯点亮。

 (3) 东西方向的黄灯闪烁4次后,转为南北方向放行x秒钟。即东西方向的红灯和南北方向的绿灯同时点亮x秒钟;      

    (4) 南北方向放行x秒钟后,转为南北方向的绿灯熄灭,黄灯闪烁4次,以警示将切换红绿灯。此时东西方向维持红灯点亮。      

  (5)南北方向的黄灯闪烁4次后,再转为东西方向车辆放行秒。如此循环重复。

  (6)当出现紧急情况时将红灯设置为全亮,以限制路况,及时解决交通事故。

 

二、设计思路

本次微机原理设计的题目是交通信号灯,它是通过对8255芯片和LED发光二极管的连接设置来模拟交通信号灯的控制,使红黄绿三色灯按照正常交通规则规律地亮灭。交通信号灯由8255芯片控制的,用发光二极管来模拟实际生活中的交通灯,当出现紧急情况时将红灯设置为全亮,以限制路况,及时解决交通事故;当出现交通高峰期时还可以延长信号灯控制的时间。

8255芯片包括四个口,即A口、B口、C口和一个控制口。通过对其控制端口赋予一定的控制字,来设定8255的工作方式,在本设计中,使8255工作于方式0,即基本输入输出方式,并将A口和B口都设置为输入,C口设置成输出。其中,A口与模拟紧急情况的开关连接,当发生紧急情况时将开关关合,红灯全亮,处理事故;当事故解除后,将开关断开,又恢复正常交通情况。B口控制黄灯的亮灭,黄灯闪烁时,红灯亮,绿灯全灭,闪烁的黄灯的位置与绿灯保持一致。C口控制红绿灯,红绿灯分东西南北四个方向,通过将控制字写入到控制口中,强制使与C口相连的LED显示管亮或灭,也就是模拟了实际情况中交通信号灯的控制。

三:流程图:略

四、主要器件及其简介

4.1 可编程的并行接口8255

  4.1.1  8255的引线图

微机原理课程设计-模拟十字路口交通信号灯_第1张图片

                                   图4.1 8255引脚图

其中主要引脚介绍如下:

  1. 与外部设备端相连的引脚
  1. PA0~PA7:为A端口的8条输入/输出引脚。
  2. PB0~PB7:为B端口的8条输入/输出引脚。
  3. PC0~PC7:为C端口的8条输入/输出引脚。
  1. 与CPU相连的引脚
    1. RESET:复位信号,高电平有效。当RESET信号来到时,所有内部寄存器都被清零,同时3个数据端口被自动设为输入端口。
    2. D7~D0:双向数据信号线,用来传送数据和控制字
    3. :为片选信号线,当CS有效时,信号RD与信号WR对8255有效。
    4. :为写信号线,CPU通过OUT指令使其有效,与其他信号线一起实现对8255接口的写操作,将数据或状态信息从CPU中写入8255。
    5. :为读出信号线,CPU通过IN指令使其有效,与其他信号线一起实现对8255接口的读操作,将数据或状态信息从8255中读到CPU。
    6. A0、A1:端口选择信号线,8255内部有3个数据端口和1个控制端口,共4个。

 

4.1.2 8255内部结构

微机原理课程设计-模拟十字路口交通信号灯_第2张图片

图4.2  8255A的内部结构

1)数据总线缓冲器:这是一个双向三态的8位数据缓冲器,它是8255与微机系统数据总线的接口。输入输出的数据、CPU输出的控制字以及CPU输入的状态信息都是通过这个缓冲器传送的。

2)三个端口A,B和C:A端口包含一个8位数据输出锁存器和缓冲器,一个8位数据输入锁存器。B端口包含一个8位数据输入/输出锁存器和缓冲器,一个8位数据输入缓冲器。C端口包含一个8位数据输出锁存器和缓冲器,一个8位数据输入缓冲器(输入没有锁存器)。

3)A组和B组控制电路:这是两组根据CPU输出的控制字控制8255工作方式的电路,它们对于CPU而言,共用一个端口地址相同的控制字寄存器,接收CPU输出的一字节方式控制字或对C口按位复位字命令。方式控制字的高5位决定A组的工作方式,低3位决定B组的工作方式。对C口按位复位命令字可对C口的每一位实现置位或复位。A组控制电路控制A口和C口上半部,B组控制电路控制B口和C口下半部。

4)读写控制逻辑:用来控制把CPU输出的控制字或数据送至相应端口,也由它来控制把状态信息或输入数据通过相应的端口送到CPU。

4.1.3  8255的控制字

8255有三种工作方式:方式0、方式1、方式2。可以通过在控制端口中设置控制字来决定它的工作方式。8255有两个控制字分别控制分别是:方式选择控制字和端口C按位置置位/复位控制字。方式选择控制字的第7位总是1,而端口C按位置位/复位控制字的第7位总是0。所以第7位称为区分两个控制字的标志位。

1)方式选择控制字

微机原理课程设计-模拟十字路口交通信号灯_第3张图片

图4.3 方式选择控制字

2)端口C按位置置位/复位控制字

微机原理课程设计-模拟十字路口交通信号灯_第4张图片

图4.4 端口C按位置置位/复位控制字

8255的工作方式

8255的工作方式主要有工作方式0、工作方式1和工作方式2。其中端口A可以工作在三种方式中的任一种;端口B只能工作在方式0和方式1;端口C通常作为控制信号使用,配合端口A和端口B的工作。在模拟流水线控制的设计中只用到了工作方式0,如表4.1所示。

 

序号

控制字

A口

C口上半部

B口

C口下半部

1

80H

2

81H

3

82H

4

83H

5

88H

6

89H

7

8AH

8

8BH

9

90H

10

91H

11

92H

12

93H

13

98H

14

99H

15

9AH

16

9BH

表4.1 8255在方式0下的输入输出组合

工作方式0,又称为基本工作方式。在此方式下,可分别将A口的8条线,B口的8条线,C口高4位对应的4条线和C口的低四位对应的四条线定义为输入或输出。故它们的输入输出共有16种不同的组合。

工作方式1,既选通输入输出方式。在这种方式下,A口和B口仍作为数据的输出口和输入口,同时还要利用C口的某些位作为控制和状态信号。

工作方式2,又称双向输入输出方式。这种方式只有8255的口A才有。在A口工作于双向输入输出方式时,要利用C口的5条线才能实现。因此,B口只能工作在工作方式0或工作方式1,而C口剩下的3条线可以作为输入输出线使用或B口方式1下的控制线。

五:实际硬件接线图

微机原理课程设计-模拟十字路口交通信号灯_第5张图片

六:程序

DATA SEGMENT                ;数据段定义
        XX DB 0
DATA ENDS                    ;数据段定义结束
SSTACK SEGMENT STACK       ;堆栈段定义
        DW 50 DUP(?)
SSTACK ENDS                  ;堆栈段定义结束
CODE SEGMENT                ;代码段定义
        ASSUME CS:CODE,DS:DATA,SS:SSTACK 
START:  MOV AX,DATA
        MOV DS,AX
        MOV DX,06C6H        ;8255初始化:控制口地址送DX
        MOV AL,90H           ;工作方式选择,A入B出
        OUT DX,AL            ;控制字送入控制口
L1:     MOV DX,06C4H         ;C口地址送入DX
        MOV AL,10100101B
        OUT DX,AL            ;24红灯亮,13绿灯亮
        CALL DELAY2         ;红绿灯延时时间
        CMP XX,1
        JZ PAUSE              ;检查是否有紧急情况
        AND AL,10100000B
        OUT DX,AL            ;24红灯亮,熄灭绿灯
        MOV CX,0004H         ;设置循环次数,即黄灯闪的次数
L2:	    MOV DX,06C2H        ;B口地址送入DX,控制黄灯
        MOV AL,00000101B
        OUT DX,AL           ;13黄灯亮
        CALL DELAY1         ;调用DELAY1
        AND AL,00000000B
        OUT DX,AL            ;熄灭黄灯
        CALL DELAY1         ;调用DELAY1
        CMP XX,1
        JZ PAUSE             ;检查是否有紧急情况
        LOOP L2
        MOV DX,06C4H        ;C口地址送入DX
        MOV AL,01011010B    ;13红灯亮,24绿灯亮
        OUT DX,AL          
  		CALL DELAY2
	    MOV CX,0004H        ;设置循环次数,即黄灯闪的次数
L3:     MOV DX,06C2H        ;B口地址送入DX
        MOV AL,00001010B
        OUT DX,AL            ;24黄灯亮
        CALL DELAY1         ;调用DELAY1
        AND AL,00000000B
        OUT DX,AL            ;熄灭黄灯
        CALL DELAY1         ;调用DELAY1
        CMP XX,1
        JZ PAUSE              ;检查是否有紧急情况
        LOOP L3 
PAUSE:  MOV DX,06C0H        ;A口地址送入DX
        IN AL,DX              ;读A口数据
        TEST AL,80H         ;测试最高位是否为1,最高位模拟紧急情况
                             ;1为紧急情况,0为一般情况
        JZ L1                ;为0紧急情况结束,红绿灯重新正常工作
        MOV DX,06C4H        ;C口地址送入DX
        MOV AL,11110000B
        OUT DX,AL            ;紧急情况,红灯全亮
        JMP PAUSE            ;紧急情况时,红灯一直保持全亮 
DELAY1 PROC NEAR           ;DELAY1定义
        PUSH CX
        PUSH DX
        PUSH AX              ;压入堆栈,保存数据
        MOV XX,0           ;为XX赋值0,只有在非紧急情况需要延时
        MOV CX,8000H         ;设置循环次数,控制延时时间
L4:     MOV DX,06C0H         ;A口地址送人DX
        IN AL,DX              ;读A口数据
        TEST AL,80H           ;测试最高位,检查是否有紧急情况 
        JZ L5                  ;为0循环执行L4,有非0跳出程序返回,
                               ;之后进入PAUSE检查是否有紧急情况
        MOV XX,1             ;为XX赋值1,出现紧急情况
        JMP L6                ;无条件转移到L6
L5:     LOOP L4               ;循环执行L4
L6:     POP AX
        POP DX
        POP CX                ;弹出保存的数据
        RET                   ;返回
DELAY1  ENDP                ;DELAY1定义结束

DELAY2  PROC NEAR          ;DELAY2定义
        PUSH CX
        PUSH DX
        PUSH AX               ;压入堆栈,保存数据
        MOV CX,0010H      
L7:     CALL DELAY1         ;调用DELAY1
        LOOP L7              ;循环执行L8
        POP AX
        POP DX
        POP CX               ;弹出保存的数据
        RET                  ;返回
DELAY2  ENDP               ;DELAY2定义结束
        CODE ENDS           ;代码段定义结束
        END START           ;程序结束

 

你可能感兴趣的:(课程设计与上机实验)