交通灯亮灯的实现Word格式文档下载.docx
《交通灯亮灯的实现Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《交通灯亮灯的实现Word格式文档下载.docx(22页珍藏版)》请在冰豆网上搜索。
3.1器件选择
元件名
数目
备注
MSC-51(8051)
1个
单片机
8255A
1个
可编程外设接口芯片
LED-RED、GREEN、YELLOW
各3个
红绿黄LED
74LS373
1个
地址锁存器芯片
3.2MSC-51芯片简介
MCS-51单片机内部结构
8051是MCS-51系列单片机的典型产品。
8051单片机包含中央处理器(CPU)、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线。
图1
下图是MCS-51系列单片机的内部结构示意图2。
图2
MCS-51的引脚说明:
MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,下图是它们的引脚配置,40个引脚中,正电源VCC和地线VSS,外置石英振荡器的时钟线XTAL1、XTAL2,4组8位共32个I/O口,中断口线与P3口线复用。
图3
图3
40只引脚按其功能可分为:
(1)电源及时钟引脚—VccVss;
XTAL1XTAL2;
(2)控制引脚—PSEN(低电平有效)ALE、EA(低电平有效)RESET
(3)I/O引脚—P0、P1、P2、P3,为4个8位I/O口的外部引脚
3.38255可编程并行接口芯片简介:
8255可编程并行接口芯片有三个输入输出端口,即A口、B口和C口,对应于引脚PA7~PA0、PB7~PB0和PC7~PC0。
其内部还有一个控制寄存器,即控制口。
通常A口、B口作为输入输出的数据端口。
C口作为控制或状态信息的端口,它在方式字的控制下,可以分成4位的端口,每个端口包含一个4位锁存器。
它们分别与端口A/B配合使用,可以用作控制信号输出或作为状态信号输入。
方式控制字格式说明如表1:
D7
D6
D5
D4
D3
D2
D1
D0
D7=1设定工作方式标志。
(D7=0为置位复位控制字标志位)
D6、D5、D4、D3为A组工作方式选择:
D6、D5:
A口方式选择
00—方式0
01—方式1
1×
—方式2
D4:
A口功能(1=输入,0=输出)
D3:
C口高4位功能(1=输入,0=输出)
D2、D1、D0为B组工作方式选择:
D2:
B口方式选择(0=方式0,1=方式1)
D1:
B口功能(1=输入,0=输出)
D0:
C口低4位功能(1=输入,0=输出)
本次课程设计8255A各口的应用:
仿真电路图中用到8255的PA口与PB口,它们分别与12个发光二极管相连,来控制发光二极管的熄灭。
其方位为东(PA0、PA1、PA2),南(PA3、PA4、PA5),西(PA6、PA7、PB0),北(PB1、PB2、PB3)。
控制寄存器控制8255A的工作方式,控制字为88H即10001000B,A口方式0输出,B口方式0输出,C口没有用到。
即无条件传输方式。
3.474LS373简介
74LS373是一种带三态门的8D锁存器,其管脚示意图如下示:
其中:
1D-8D为8个输入端。
1Q-8Q为8个输出端。
LE为数据打入端:
当LE为“1”时,锁存器输出
状态同输入状态;
当LE由“1”变“0”时,数据
打入锁存器;
OE为输出允许端:
当OE=0时,三态门打开;
当OE=1时,三态门关闭,输出高阻。
因为P0口为数据线、地址线复用,所以用一个锁存器将8255a的地址所存;
4系统硬件设计
4.1交通管理的方案论证
东西、南北两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人安全通行。
红灯亮禁止通行,绿灯亮允许通行。
黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为东西、南北两干道的公共停车时间。
设计一个十字路口的交通灯控制系统。
南北东西四个方向:
东西口绿灯亮,南北红灯亮,东西方向通车,时间为60秒;
东西口绿灯灭,黄灯闪烁3次亮灭共6秒,红灯亮;
南北口红灯灭,绿灯亮,南北口方向通车,时间为60秒;
南北口绿灯灭,黄灯闪烁3次,红灯亮;
东西口红灯灭,绿灯亮,东西口通车,以此类推循环运行。
东
北南
西
4.2设计其目的:
应用、掌握单片机与各芯片,学习应用仿真软件,会分析硬件电路的组成及学习简单汇编程序的编写方法。
4.3设计与步骤
4.31用12个发光二级管模拟十字路口交通灯信号。
用AT89C51、可编程并行接口芯片8255A及地址锁存器芯片74LS373来实现。
连接仿真图。
单片机写入程序,先写入8255的工作方式控制字(方式0输出),再对8255各端口进行置位复位操作,由8255的PA口与PB口输出的高低电平(“0”亮灯或“1”灭灯)决定发光二极管的熄灭,实现交通灯的功能。
(1)方式控制字:
88H,即10001000,其中1(1设定工作方式字标志)00(A口方式选择方式0)0(A口输出)10(B口方式选择方式0)0(B口输出)0,其余位没有用到可任意设为0或1。
(2)8255A的端口地址:
A口地址为0FF28H,即111111110(置位复位控制字标志位)0101000(00选中PA口)B,其余为无用位可任意设为0或1;
B口地址为0FF29H,即1111111100101001(01为PB口地址)B,其余为无用位可任意设为0或1;
控制端口地址为0FF2B,即1111111100101011(11控制口地址)B,其余为无用位可任意设为0或1。
8255输出信号与发光二极管的连接:
发光二极管为共阳极接法,输出端口为低电平,对应的二极管发光,所以用置位方法点亮红,绿,黄发光二极管。
4.32交通灯亮灯的实现
硬件方框图:
程序流程图:
4.33交通灯亮灯的实现电路proteus仿真图
4.3.4系统工作原理
单片机写入程序,规定8255工作方式,再对8255各端口进行置位复位操作,由8255的PA口与PB口输出的高低电平(“0”亮灯或“1”灭灯)决定发光二极管的熄灭,实现交通灯的亮灯。
5.程序运行后状态表:
其中0代表灯灭,1代表灯亮。
状态
北
西
南
东
黄
绿
红
PB3
PB2
PB1
PB0
PA7
PA6
PA5
PA4
PA3
PA2
PA1
PA0
开始4个红灯亮
1
该四
个工
作状
态按
此次
序将
重复
出现
南北红灯亮,东西绿灯亮
南北红灯亮
,东西黄灯亮
南北绿灯亮,东西红灯亮
南北黄灯亮,东西红灯亮
5.程序设计(汇编语言版本)
编程提示:
(1)通过8255控制发光二极管PB3PB0PA5PA2对应黄灯,PB1PA6PA3PA0对应红灯,PB2PA7PA4PA1对应绿灯,以模拟交通灯的亮灯.
(2)程序中设定好8255A的工作方式,三个端口均工作在方式0且输出状态。
(3)各发光二极管共阳极,使其点亮应使对应的端口输出低电平
ORG0BB0H;
主程序起始地址
JOD0:
MOVSP,#60H;
设置堆栈
MOVDPTR,#0FF2BH;
指向8255控制寄存器地址
MOVA,#88H;
设定A值为88H,即设置控制字(方式字送A、B、C口)
MOVX@DPTR,A;
将A中数据送入8255控制口,即8255初始化,写入控制字
;
-----------------------------------------------------
MOVDPTR,#0FF28H;
指向PA口地址
MOVA,#0B6H;
设定A值为10110110
MOVX@DPTR,A;
将A中数据送入8255的PA口输出,即从PA口输出,即PA6、PA3、PA0分别为0,表明与这些端口相联的(发光二极管)红灯点亮
INCDPTR;
指向PB口地址
MOVA,#0DH;
A的内容为00001101
将A中数据送入8255的PB口输出,即从PB口输出,即PB1为0,表明与该端口相联的(发光二极管)红灯点亮,因此4个红灯
MOVR2,#1;
延时,将延时计数器R2赋值1
LCALLDELAY;
调用延时子程序延时1S
-----------以上4个红灯亮-----------------------------------------
JOD3:
MOVDPTR,#0FF28H
MOVA,#75H
MOVX@DPTR,A;
将A中数据送入8255的PA口输出,PA口为01110101,即与PA7西绿、PA3南红、PA1东绿相联的灯
INCDPTR
MOVA,#0DH;
A为00001101
MOVX@DPTR,A;
将A中数据送入8255的PB口输出,PB口的PB1北红灯亮
MOVR2,#60;
延时60秒
LCALLDELAY
--------------以上东西绿灯亮,南北红灯亮--------------
MOVR0,#03H
;
设置黄灯(一亮一灭)闪烁3次
JOD1:
MOVDPTR,#0FF28H
MOVA,#0F3H
MOVX@DPTR,A;
将A中数据送入8255的PA口输出,PA为11110011,即PA3南红、PA2东黄灯亮
MOVA,#0CH
MOVX@DPTR,A;
将A中数据送入8255的PB口输出,PB为00001100,即PB1北红、PB0西黄亮,因此东西黄灯亮,南北红灯亮
MOVR2,#1
黄灯亮短延时1秒
MOVA,#0F7H
PA为11110111,即PA3南红亮
MOVA,#0DH
PB为00001101,即PB1北红亮,因此南北红灯亮,此时黄灯灭了
MOVR2,#1
LCALLDELAY;
黄灯灭短延时1秒
DJNZR0,JOD1;
若闪烁次数未到则循环
-------以上实现南北红灯亮东西黄灯烁----------
MOVA,#0AEH
MOVX@DPTR,A
MOVA,#0BH
东西红灯亮,南北绿灯亮
MOVR2,#60
LCALLDELAY;
延时
------------以上东西红灯亮,南北绿灯亮----------
MOVR0,#03H;
黄灯闪烁次数
JOD2:
MOVA,#9EH
MOVA,#07H
东西红灯亮,南北黄灯亮
MOVR2,#2H
LCALLDELAY
短延时1秒
MOVA,#0BEH
MOVA,#0FH
东西红灯亮,南北黄灯灭
DJNZR0,JOD2;
判断移动次数,若R0不为0时程序跳转到标号JOD2
-------------以上东西红灯亮,南北黄灯闪烁--------
LJMPJOD3;
主程序循环执行
-----------------------------------------
ORG0C30H;
延时子程序.起始地址
DELAY:
MOVR5,#50;
延时1秒子程序
DELY1:
MOVR6,#100
DELY2:
MOVR7,#100
DJNZR7,$;
若R7还未减到0则跳转到目前的地址,即该语句被执行100次
DJNZR6,DELY2
DJNZR5,DELY1
DJNZR2,DELAY
RET;
子程序返回
--------------以上延时1秒子程序-------------------------
END;
程序结束
⒉软件调试:
软件调试是通过对拥护程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。
程序后,编辑,查看程序是否有逻辑的错误。
1、1秒延时程序的分析。
、上述程序中用的1秒延时程序:
---------------1个机器周期
MOVR6,#100;
--------------1
MOVR7,#100;
---------------2
DJNZR6,DELY2;
------------2
DJNZR5,DELY1;
DJNZR2,DELAY;
-----------2多重循环
时钟周期:
单片机的基本时间单位,为时钟晶体的周期。
机器周期:
CPU完成一个基本操作用的时间,包含几个时钟周期。
89C51的机器周期包括12个时钟周期,选石英晶体为f=12MHZ,则机器周期为:
12÷
f=1μs.
指令周期:
执行一条指令用的时间.包含几个机器周期。
上述程序中用的1秒延时程序循环过程:
R2×
(R5×
(R6×
(R7×
$×
2μs+1μs)+1μs)+1μs)=R2×
[50×
(100×
(100+1)+1)]=R2×
(50+5000×
(200+1))=R2×
[50μs+1S+5000μs]=R2×
[1S+5050μs≈R2×
1S
即该1S延时程序用时要比1S多出5050μs。
、1秒的延时子程序还可以是定时器加软件延时(经调试成功):
MOVR1,#20;
1设置软件计数初值,每次调用延时子程序时,定时器在子程序里将重复定时20次
-----------定时器计数器初始化------------------
MOVTMOD,#00000001B;
1设T0工作在模式1定时方式
SETBTR0;
将TR0置1,即启动T0开始工作
AGAIN:
MOVTL0,#LOW(65536-50000);
1设置计数初值,装入低位
MOVTH0,#HIGH(65536-50000);
1设置计数初值,装入高位
---------------------------------------------------------
LOOP11:
JBCTF0,LOOP22;
等待益出,TF0为T0溢出标志位,TE0=1则执行跳转到LOOP22并清0
JMPLOOP11;
2
LOOP22:
DJNZR1,AGAIN;
2R1不是0则跳转至AGAIN,每执行一次该语句R1值减一
2R2不是0则跳转至AGAIN
CLRTR0;
是则停止T0计时,即将TR0置0
RET
模式1下(采用12MHZ的晶体)最大定时时间:
TMAX=65536μs,计数器从计数初值65536-50000=15536开始计数,当计到65536时,计数器计满溢出TF0=1,输出跳转信号,再由软件计数器将定时器重复20次,此时用时20×
50MS=1S.
2、这个方案只能实现交通灯亮灯的基本功能。
且实际中仅一个单片机接发光二极管通过编程就可以实现交通灯的亮灯,这是方案二。
方案二
硬件选择:
单片机一片发光二极管12个。
单片机的P端口接12发光二级管负极,二极管正极接电源,其中东西的二极管串联、南北的二极管串联。
对单片机编程,由A寄存器传送入单片机P口的数据,‘0’代表亮‘1’代表灭,实现交通灯的亮灯即可。
硬件方框图
方案二仿真图:
方案二汇编程序:
ORG0BB0H
JODO:
MOVSP,#60H
MOVA,#11000110
MOVP2,A
MOVA,#00000110
MOVP3,A
MOVR0,#1
LCALLDELAY
;
-----------四个红灯亮------------------
MOVA,#11000101
MOVR0,#60
MOVR7,#03H
-------------东西绿灯亮南北红灯亮------------
MOVA,#11000011
MOVR0,#1
---------东西黄灯亮南北红灯亮-----------
MOVA,#11000111
--------------东西黄灯灭南北红灯亮--------------
DJNZR7,JOD1
---------东西黄灯共闪烁三次南北不变------------------
jod2:
movA,#10100110
MOVA,#00000101
---------------东西红灯亮南北绿灯亮----------
JOD4:
MOVA,#01100110
MOVA,#00000011
------------东西红灯亮南北黄灯亮-----------
MOVA,#11100110
MOVA,#00000111
---------东西红灯亮南北黄灯灭-------------
DJNZR7,JOD4
----------东西不变南北黄灯闪烁三次--------------
LJMPJOD3
----------返回JOD3重新开始----------
MOVR1,#20
MOVTMOD,#00000001B
SETBTR0
AGAIN:
MOVTL0,#LOW(65536-50000)
MOVTH0,#HIGH(65536-50000)
JBCTF0,LOOP22
JMPLOOP11
DJNZR1,AGAIN
DJNZR0,DELAY
CLRTR0
RET
---------1S延时子程序---------------------
END
通过方案一和方案二的比较可以知道,8255只是接口芯片单片机可以规定8255的工作办法对8255赋值;
对单片机写入程序单片机就可以对8255控制;
单片机是核心,围绕它可以组成有其他功能的产品。
这里把需要交换的物品,需要物品的地方的信息集合在一起,由单片机接收发放分配管理。
学习微机课程也是学习组织管理分配。
通过此设计,我们对AT89C51单片机及8255的结构功能和工作办法有了更深的理解。
通过对硬件的编程,微型计算机技术可以在很多工业生产和日常生活中得以应用,在计算机领域中更有举足轻重的作用,这使我们更有兴趣学习这门课程。
这