赞
踩
通过课程设计使学生更进一步掌握微机原理及应用课程的有关知识,提高应用微机解决问题的能力,加深对微机应用的理解。通过查阅资料,结合所学知识进行软、硬件的设计,使学生初步掌握应用微机解决问题的步骤及方法。为以后学生结合专业从事微机应用设计奠定基础。
控制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.1 8255的引线图
图4.1 8255引脚图
其中主要引脚介绍如下:
图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。
8255有三种工作方式:方式0、方式1、方式2。可以通过在控制端口中设置控制字来决定它的工作方式。8255有两个控制字分别控制分别是:方式选择控制字和端口C按位置置位/复位控制字。方式选择控制字的第7位总是1,而端口C按位置位/复位控制字的第7位总是0。所以第7位称为区分两个控制字的标志位。
1)方式选择控制字
图4.3 方式选择控制字
2)端口C按位置置位/复位控制字
图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下的控制线。
- 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 ;程序结束
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。