模拟交通灯的设计.docx
《模拟交通灯的设计.docx》由会员分享,可在线阅读,更多相关《模拟交通灯的设计.docx(23页珍藏版)》请在冰豆网上搜索。
![模拟交通灯的设计.docx](https://file1.bdocx.com/fileroot1/2023-2/24/7eb9efc3-6789-4417-ae05-f5cd1c7559c2/7eb9efc3-6789-4417-ae05-f5cd1c7559c21.gif)
模拟交通灯的设计
南华大学电气工程学院
《单片机课程设计》
设计题目:
模拟交通灯
专业:
自动化083班
学生姓名:
周渲涵聂立
学号:
2008446032920084460345
起迄日期:
2011年6月13日~2011年6月24日
指导教师:
李兰君
目录
引言………………………………………………………………………………3
1设计任务和性能指标……………………………………………………4
1.1设计任务……………………………………………………………………4
1.2性能指标……………………………………………………………………4
2设计方案……………………………………………………………………4
2.1任务分析……………………………………………………………………4
2.2方案设计……………………………………………………………………4
3AT89S52芯片………………………………………………………………4
3.1特性…………………………………………………………………………5
3.2引脚功能与封装……………………………………………………………6
3.3存储器组织………………………………………………………………9
4晶振电路作用……………………………………………………………12
5复位电路的作用…………………………………………………………13
5.1基本的复位方式…………………………………………………………13
5.1.1手动按钮复位…………………………………………………………13
5.1.2上电复位………………………………………………………………14
6模拟交通灯……………………………………………………………14
6.1程序设计………………………………………………………………15
6.1.1程序流程………………………………………………………………15
6.1.2汇编源程序……………………………………………………………15
6.1.3C语言源程序………………………………………………………17
7调试与仿真…………………………………………………………18
总结…………………………………………………………………………20
参考文献……………………………………………………………………20
附图…………………………………………………………………………21
引言
当前,大量的信号灯电路正向着数字化、小功率、多样化、方便人、车、路三者关系的协调,多值化方向发展随着社会经济的发展,城市交通问题越来越引起人们的关注。
,这些城市纷纷修建城市高速道路,在高速道路建设完成的初期,它们也曾有效地改善了交通状况。
然而,随着交通量的快速增长和缺乏对高速道路的系统研究和控制,高速道路没有充分发挥出预期的作用。
而城市高速道路在构造上的特点,也决定了城市高速道路的交通状况必然受高速道路与普通道路耦合处交通状况的制约。
人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。
城市智能交通系统中,路口信号灯控制子系统是现代城市交通监控指挥系统中重要的组成部分,在各种交通监控体系中都是一个必不可少的单元。
如果能研制一种稳定、高效的灯控系统模块,能够挂接于各种智能交通控制系统下作为下位机,根据上位机的控制要求或命令,方便灵活地控制交通灯,无疑是很有意义的。
传统的交通信号控制系统电路复杂、体积大、成本高。
采用模块化的单片机系统控制交通信号,不仅可以简化电路结构、减低成本、减小体积,而且,控制能力强,配置灵活,易于扩展,能够根据上位机对交通灯运行监测而得出的控制命令,方便高效地进行路口交通灯运行模式的设定。
城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。
本文采用51系列单片机AT89S52为中心器件设计交通灯控制系统。
1设计任务和性能指标
1.1设计任务
利用单片机完成交通信号灯控制器的设计,该交通信号灯控制器由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。
用红、绿、黄发光二极管作信号灯。
设东西向为主干道,南北为支干道。
1.2性能指标
1.2.1处于常允许通行的状态,支干道有车来时才允许通行。
主干道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。
1.2.2干道均有车时,两者交替允许通行,主干道每次放行60秒,支干道每次放行40秒,设立60秒、40秒计时、显示电路。
1.2.3绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡。
黄灯亮时,原红灯按1Hz的频率闪烁。
2设计方案
2.1任务分析
模拟交通灯控制器就是使用单片机来控制一些LED,模拟真实交通灯的功能。
红、黄、绿交替闪亮,用于管理十字路口的车辆及行人交通。
2.2方案设计
单片机可选用AT89S52,它与8051系列单片机全兼容,但其内部带有4KB的FLASHROM,设计时无需外接程序存储器,为设计和调试带来极大的方便。
对该方向的指示灯的点亮时间进行倒计时。
键盘系统可以根据系统的需要设置不同的键的个数,可以选择线式键盘或矩阵式键盘,若单片机的IO口不够用时,可以考虑扩展8255或8155满足系统的要求。
3AT89S52芯片
上集成了中央处理单元CPU、随机存储器RAM、只读存储器ROM、定时器/计数器和多种输入/输出(I/O),如并行I/O、串行I/O和A/D转换器等。
就其组成而言一块单片机就是一台计算机。
典型的结构如图1-1所示。
由于它具有许多适用于控制的指令和硬件支持而广泛应用于工业控制、仪器仪表、外设控制、顺序控制器中,所以又称为微控制单元(MCU)。
MCS-51系列单片机,是Intel公司继MCS-48系列单片机之后,在1980年推出的高档8位单片机。
当时MCS-51系列产品有8051、8031、8751、80C51、80C31等型号。
它们的结构基本相同,其主要差别反映在寄存器的配置上有所不同。
8051内部没有4K字节的掩膜ROM程序存储器,8031片内没有程序存储器,而8751是将8051片内的ROM换成EPROM。
ATMEL89系列单片机是ATMEL公司的以8031核构成的8位Flash单片机系列。
这个系列单片机的最大特点就是在片内含有Flash存储器,
AT89S52单片机是一种低功耗高性能的CMOS8位微控制器,内置8KB可在线编程闪存。
该器件采用Atmel公司的高密度非易失性存储技术生产,其指令与工业标准的80C51指令集兼容。
片内程序存储器允许重复在线编程,允许程序存储器在系统内通过SPI串行口改写或用同用的非易失性存储器改写。
通过把通用的8位CPU与可在线下载的Flash集成在一个芯片上,AT89S52便成为一个高效的微型计算机。
它的应用范围广,可用于解决复杂的控制问题,且成本较低。
其结构框图如图2-1所示。
图3-1AT89S52引脚的结构框图
3.1特性
AT89S52的主要特性如下:
兼容MCS51产品
8K字节可擦写1000次的在线可编程ISP闪存
4.0V到5.5V的工作电源范围
全静态工作:
0Hz~24MHz
3级程序存储器加密
256字节内部RAM
32条可编程I/O线
3个16位定时器/计数器
8个中断源
UART串行通道
低功耗空闲方式和掉电方式
通过中断终止掉电方式
看门狗定时器
双数据指针
灵活的在线编程
3.2引脚功能与封装
按照功能,AT89S52的引脚可分为主电源、外接晶体振荡或振荡器、多功能I/O口、控制和复位等。
3.2.1多功能I/O口
AT89S52共有四个8位的并行I/O口:
P0、P1、P2、P3端口,对应的引脚分别是P0.0~P0.7,P1.0~P1.7,P2.0~P2.7,P3.0~P3.7,共32根I/O线。
每根线可以单独用作输入或输出。
P0端口,该口是一个8位漏极开路的双向I/O口。
在作为输出口时,每根引脚可以带动8个TTL输入负载。
当把“1”写入P0时,则它的引脚可用作高阻抗输入。
当对外部程序或数据存储器进行存取时,P0可用作多路复用的低字节地址/数据总线,在该模式,P0口拥有内部上拉电阻。
在对Flash存储器进行编程时,P0用于接收代码字节;在校验时,则输出代码字节;此时需要外加上拉电阻。
P1端口,该口是带有内部上拉电阻的8位双向I/O端口,P1口的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。
对端口写“1”时,通过内部的上拉电阻把端口拉到高电位,此时可用作输入口。
P1口作输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。
在对Flash编程和程序校验时,P1口接收低8位地址。
另外,P1.0与P1.1可以配置成定时/计数器2的外部计数输入端(P1.0/T2)与定时/计数器2的触发输入端(P1.0/T2EX),如表2-1所示。
表3-1P1口管脚复用功能
端口引脚
复用功能
P1.0
T2(定时器/计算器2的外部输入端)
P1.1
T2EX(定时器/计算器2的外部触发端和双向控制)
P1.5
MOSI(用于在线编程)
P1.6
MISO(用于在线编程)
P1.7
SCK(用于在线编程)
P2端口,该口是带有内部上拉电阻的8位双向I/O端口,P2口的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。
对端口写“1”时,通过内部的上拉电阻把端口拉到高电位,此时可用作输入口。
P2口作输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。
在访问外部程序存储器或16位的外部数据存储器(如执行MOVX @DPTR指令)时,P2口送出高8位地址,在访问8位地址的外部数据存储器(如执行MOVX @RI指令)时,P2口引脚上的内容(就是专用寄存器(SFR)区中P2寄存器的内容),在整个访问期间不会改变。
在对Flash编程和程序校验期间,P2口也接收高位地址或一些控制信号。
P3端口,该口是带有内部上拉电阻的8位双向I/O端口,P3口的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。
对端口写“1”时,通过内部的上拉电阻把端口拉到高电位,此时可用作输入口。
P3口作输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。
在AT89S52中,同样P3口还用于一些复用功能,如表1-2所列。
在对Flash编程和程序校验期间,P3口还接收一些控制信号。
表3-2P3端口引脚与复用功能表
端口引脚
复用功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
INT0(外部中断0)
P3.3
INT1(外部中断1)
P3.4
T0(定时器0的外部输入)
P3.5
T1(定时器1的外部输入)
P3.6
WR(外部数据存储器写选通)
P3.7
RD(外部数据存储器读选通)
3.2.2RST复位输入端。
在振荡器运行时,在此脚上出现两个机器周期的高电平将使其单片机复位。
看门狗定时器(Watchdog)溢出后,该引脚会保持98个振荡周期的高电平。
在SFRAUXR(地址8EH)寄存器中的DISRTO位可以用于屏蔽这种功能。
DISRTO位的默认状态,是复位高电平输出功能使能。
3.2.3ALE/PROG地址锁存允许信号。
在存取外部存储器时,这个输出信号用于锁存低字节地址。
在对Flash存储器编程时,这条引脚用于输入编程脉冲PROG。
一般情况下,ALE是振荡器频率的6分频信号,可用于外部定时或时钟。
但是,在对外部数据存储器每次存取中,会跳过一个ALE脉冲。
在需要时,可以把地址8EH中的SFR寄存器的0位置为“1”,从而屏蔽ALE的工作;而只有在MOVX或MOVC指令执行时ALE才被激活。
在单片机处于外部执行方式时,对ALE屏蔽位置“1”并不起作用。
3.2.4PSEN程序存储器允许信号。
它用于读外部程序存储器。
当AT89S52在执行来自外部存储器的指令时,每一个机器周期PSEN被激活2次。
在对外部数据存储器的每次存取中,PSEN的2次激活会被跳过。
3.2.5EA/Vpp外部存取允许信号。
为了确保单片机从地址为0000H~FFFFH的外部程序存储器中读取代码,故要把EA接到GND端,即地端。
但是,如果锁定位1被编程,则EA在复位时被锁存。
当执行内部程序时,EA应接到Vcc。
在对Flash存储器编程时,这条引脚接收12V编程电压Vpp。
3.2.6XTAL1 振荡器的反相放大器输入,内部时钟工作电路的输入。
3.2.7XTAL2 振荡器的反相放大器输出。
3.3存储器组织
所有的ATMELFlash单片机都将程序存储器和数据存储器分为不同的存储空间。
89系列单片机的典型存储器的结构如图1-4所示。
程序和数据存储器分为不同的逻辑空间,使得可用8位地址来访问数据存储器。
这样可提高8位CPU的存储和处理速度。
尽管如此,也可通过数据指针(DPTR)寄存器来产生16位的数据存储器地址。
程序存储器只可读不可写,用于存放编好的程序和表格常数。
89系列单片机可寻址的程序存储器总空间为64KB。
外部程序存储器的读选通脉冲为PSEN(程序存储允许信号)。
数据存储器在物理上和逻辑上都分为两个地址空间:
一个内部和一个外部数据存储器空间。
外部数据存储器的寻址空间可达64KB。
访问外部数据存储器时,CPU发出读和写的信号--RD和WR。
将RD和PSEN两个信号加到一个与门的输入端,然后用与门的输出作为外部程序/数据存储器的读选通脉冲。
这样就可将外部程序存储器空间和外部数据存储器空间合并在一起。
3.3.1程序存储器
89系列单片机可寻址的内部和外部程序存储器总空间为64KB。
每个外部程序和数据存储器的可寻址范围高达64KB。
它没有采用程序存储器分区的方法,64KB的地址空间是统一的。
EA引脚接低电平时,单片机就从外部程序存储器中取指。
对于AT89S52,EA引脚接高电平时,程序直接从单片机内部存储器中的0000H到1FFFH单元执行,2000H到FFFFH单元到外部存储器中执行。
程序存储器中有几个单元专门用来存放特定的程序。
0000H~0002H单元用于初始化程序。
单片机复位后,CPU总是从0000H单元开始执行程序。
另外,每个中断在程序存储器中都分配有一个固定的入口地址。
中断响应后,CPU便跳到该单元,在这里开始执行中断服务子程序。
例如,外部中断0的入口地址被放在0003H单元,如果使用外部中断0,则它的中断服务子程序必须从0003H单元开始。
如果中断没有使用,那么它的服务单元也可作一般用途的程序存储器用。
每个中断入口地址的间隔为8个单元;外部中断0的入口地址为0003H;定时器0的入口地址为000BH;外部中断1的入口地址为0013H;定时器1的入口地址为001BH;以此类推。
如果一个中断服务子程序足够短的话,则可全部存放在这8个单元中。
对较长的服务子程序,则可利用一条跳转指令跳过后续的中断入口地址。
程序存储器最低端的地址可以在片内Flash中,或在外部存储器中。
将外部存取(EA)引脚接Vcc或接地,就可进行这种选择。
例如,在带有4KB片内Flash的AT89C51中,如果把EA引脚连到Vcc,当地址为0000H~0FFFH时,则访问内部Flash;当地址为1000H~FFFFH时,则访问外部程序存储器。
在AT89C52(8KBFlash)中,当EA端保持高电平时,如果地址不超过1FFFH,则访问内部Flash;地址超过1FFFH(即为2000H~FFFFH)时,将自动转向外部程序存储器。
如果EA端接地,则只访问外部程序存储器,不管是否有内部Flash存储器。
外部程序存储器读选通信号PSEN用于读取所以的外部程序;读取内部程序时,不产生PSEN信号。
注意,在访问外部程序存储器时,16条I/O线(P0和P2)作为总线使用。
P0端口作为地址/数据总线使用。
它先输出16位地址的低8位PCL,然后进入悬浮状态,等待程序存储器送出的指令字节。
当有效地址PCL出现在P0总线上时,ALE(允许地址锁存)把这个地址锁存到地址锁存器中。
同时,P2端口输出地址的高8外PCH。
然后PSEN选通外部程序存储器,使指令送到P0总线上,由CPU取入。
即使所用的程序存储器的实际空间可能小于64KB,程序存储器的地址总是为16位的。
在访问外部程序存储器时,要用到两个8位端口--P0和P2来产生程序存储器的地址。
3.3.2数据存储器
数据存储器在物理上逻辑上都分为两个地址空间:
一个为内部数据存储器空间;一个为外部数据存储器空间。
P0端口作用RAM的地址/数据总线,P2端口中的3位也作为RAM的页地址。
访问外部RAM期间,CPU根据需要发送RD和WR信号。
外部数据存储器的寻址空间可达64KB。
外部数据存储器的地址可以是8位或16位的。
使用8位地址时,要连同另外一条或几条I/O线作为RAM的页地址。
这时P2的部分引线可作为为通用的I/O线。
若采用16位地址,则由P2端口传送高8位地址。
内部数据存储器的地址是8位的,也就是说其地址空间只有256字节,但内部RAM的寻址方式实际上可提供384字节。
高于7FH的直接地址访问同一个存储空间,高于7FH的间接地址访问另一个存储空间。
虽然高128字节区与专用寄存器,即特殊功能寄存器(SFR)区的地址是重合的(80H~FFH),但实际上它们是分开的。
究竟访问哪一区,是通过不同的寻址方式加以区分的。
访问高128字节区时,采用间接寻址方式;访问SFR区时,采用直接寻址方式;访问低128字节区时,两种寻址方式都可采用。
低128字节区的分配情况,最低32个单元(00H~1FH)是4个通用工作寄存器组。
每个寄存器组含有8个8为寄存器,编号为R0~R7。
专用寄存器PSW(程序状态字)中有2位(PS0,RS1)用来确定采用哪一个工作寄存器组。
这种结构能够更有效地使用指令空间,因为寄存器指令比直接寻址指令更短。
工作寄存器组上面的16个单元(20H~2FH)构成了布尔处理机的存储器空间。
这16个单元的128位各自都有专门的位地址,它们可以被直接寻址,这些位地址是00H~7FH。
在89系列单片机的指令系统中,还包括了许多位操作指令,这些位操作指令可直接对这128位寻址。
低128字节区中的所以单元都既可通过直接寻址方式访问,又可通过间接寻址方式访问,又可通过间接寻址方式访问。
而高128字节区则只能通过间接寻址方式来访问。
仅在带有256字节RAM的单片机中才有高128字节区。
专用寄存器即特殊功能寄存器(SFR)区,这些专用寄存器包括端口锁存器(P0/P1/P2/P3)、程序状态字(PSW)、定时/计数器方式控制(TMOD)、定时/计数器控制(TCON)、定时/计数器(THx/TLx)、累加器(ACC/B)、栈指针(SP),以及其他控制寄存器等等。
专用寄存器只能通过直接寻址方式来访问。
通常,在所有ATMEL单片机的专用寄存器(SFR)区中,寄存器的分配情况是相同的。
专用寄存器区中有一些单元是即可字节寻址又可位寻址的。
凡是地址以“0”和“8”结尾(能被8整除)的单元都是可位寻地址的,地址的范围是80H~FFH。
4晶振电路作用
单片机系统里都有晶振,在单片机里晶振作用非常大,全程晶体振荡器,他结合单片机内部电路产生单片机所需的时钟0频率,单片机晶振提供的时钟频率越高,那么单片机运行速度就越快,单片机接的一切指令的执行都是建立在单片机晶振提供的时钟频率。
在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十。
高级的精度更高。
有些晶振还可以由外加电压在一定范围内调整频率,称为压控振荡器。
晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。
单片机晶振的作用是为系统提供基本的时钟信号。
通常一个系统共用一个晶振,便于各部分保持同步。
有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。
晶振通常与锁相环电路配合使用,以提供系统所需的时钟频率。
如果不同子系统需要不同频率的时钟信号,可以用与同一个晶振相连的不同镜相环来提供。
在电气上它可以等效成一个电容和一个电阻并联再串联一个电容的二端网络,电工学上这个网络有两个谐振点,以频率的高低分其中较低的频率是串联谐振,较高的频率是并联谐振。
由于晶体自身的特性致使这两个频率的距离相当的接近,在这个极窄的频率范围内,晶振等效为一个电感,所以只要晶振的两端并联上合适的电容它就会组成并联谐振电路。
这个并联谐振电路加到一个负反馈电路中就可以构成正弦波振荡电路,也就是晶振电路。
电容大小没有固定值。
一般二三十p。
晶振是给单片机提供工作信号脉冲的。
这个脉冲就是单片机的工作速度。
比如12M晶振。
单片机工作速度就是每秒12M。
和电脑的CPU概念一样。
当然。
单片机的工作频率是有范围的。
不能太大。
一般24M就不上去了。
不然不稳定。
接地的话数字电路弄的来乱一点也无所谓。
看板子上有没有模拟电路。
接地方式也是不固定的。
一般串联式接地。
从小信号到大信号依次接。
然后小信号连到电源处。
有变压器就连到变压器旁。
数模地分开,分别拉到电源处,并不可形成回路。
这个是因为晶振与单片机的脚XTAL0和脚XTAL1构成的振荡电路中会产生偕波(也就是不希望存在的其他频率的波),这个波对电路的影响不大,但会降低电路的时钟振荡器的稳定性。
5复位电路的作用
在上电或复位过程中,控制CPU的复位状态:
这段时间内让CPU保持复位状态,而不是一上电或刚复位完毕就工作,防止CPU发出错误的指令、执行错误操作,也可以提高电磁兼容性能。
无论用户使用哪种类型的单片机,总要涉及到单片机复位电路的设计。
而单片机复位电路设计的好坏,直接影响到整个系统工作的可靠性。
许多用户在设计完单片机系统,并在实验室调试成功后,在现场却出现了“死机”、“程序走飞”等现象,这主要是单片机的复位电路设计不可靠引起的。
5.1基本的复位方式
单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。
89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。
当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。
单片机系统的复位方式有:
手动按钮复位和上电复位
5.1.1手动按钮复位
手动按钮复位需要人为在复位输入端RST上加入高电平。
一般采用的办法是在RST端和正电源Vcc之间接一个按钮。
当人为按下按钮时,则Vcc的+5V电平就会直接加到RST端。
由于人动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求。
单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。
89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。
当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。
5.1.2上电复位
AT89S52的上电复位电路如图2所示,只要在RST复位输入引脚上接一电容至Vcc端,下接一个电阻到地即可。
对于CMOS型单片机,由于在RST端内部有一个下拉电阻,故可将外部电阻去掉,而将外接电容减至1µF。
上电复位的工作过程是在加电时,复位电路通过电 容加给RST端一个短暂的高电平信号,此高电平信号随着Vcc对电容的充电过程而逐