项目四交通灯控制器的设计与制作单片机原理与应用(C语言版)嵌入式开发初级目录4.1项目要求与分析4.4项目详细设计4.6项目小结4.7项目拓展4.2项目理论知识4.3项目概要设计4.5项目实施4.1项目要求与分析4.1.1项目要求需要设计交通灯控制器,项目要求具体内容如下:(1)采用单片机的I/O端口连接红色、绿色和黄色LED灯,模拟实际交通灯;(2)采用单片机的I/O端口连接按键,当按键按下的时候,交通灯发生变换。(3)按键没有按下之前,交通灯的状态是:红灯亮、绿灯灭、黄灯灭,行人禁止通过;当按键按下时,红灯灭、绿灯亮、黄灯灭,行人通过。当按键再次抬起时,交通灯保持行人通过状态一段时间后,又恢复到行人禁止通过。4.1项目要求与分析根据项目要求的内容,需要满足以下要求,才可以完成项目的设计。(1)硬件功能要求:系统由单片机、3个LED灯和1个按键组成,需要完成单片机和LED灯的连接,单片机和按键的连接;(2)软件功能要求:完成根据按键的状态控制交通灯LED灯的软件功能。其中,重要的是,软件要实时响应按键的状态。(3)环境要求:由Proteus软件和Keil软件构建。4.1项目要求与分析为了实现上述功能要求,重点需要掌握如何实时响应按键状态的方法。其中,实时响应按键状态的过程具体说明如下:(1)按键按下,当前程序中断(2)单片机CPU知道按键按下(3)单片机CPU调用按键按下处理函数(4)执行按键按下的处理(5)处理完按键按下,继续中断的程序4.1项目要求与分析单片机内部的中断结构可以完成实时响应按键状态。为了实现项目要求的内容,应该掌握以下知识:(1)中断的硬件结构;(2)中断硬件结构的控制;(3)中断的响应过程;4.1项目要求与分析为了实现上述功能要求,应该具备以下能力:(1)能够使用Proteus软件的实现硬件功能要求;(2)能够使用Keil软件,实现实时响应按键状态的软件功能要求;1)能够控制中断硬件结构中的相关寄存器2)能够说明中断响应的过程(3)能够使用Keil软件和Proteus软件的联调开发环境完成整个项目设计,实现要求。4.2项目理论知识4.2.1单片机中断的定义CPU在执行主程序时,发生了中断,请求CPU迅速去处理(中断发生);CPU暂时中断当前主程序的工作,转去处理中断服务子程序(中断响应和中断服务);待CPU将中断服务子程序处理完毕后,再回到原来主程序被中断的地方继续执行主程序(中断返回),这一过程称为中断。4.2项目理论知识4.2项目理论知识根据图中所示的中断处理过程,需要明确的有关中断的一些概念如下:(1)中断源产生:产生引起中断的来源;(2)中断请求:中断源要求CPU处理的请求;(3)中断调用:CPU转去执行相应的中断服务子程序;(4)中断响应:CPU执行中断服务子程序;(5)中断返回:CPU执行完中断服务子程序,返回到主程序。4.2项目理论知识4.2.2单片机中断的硬件结构AT89C51单片机中断系统结构图4-2所示。4.2项目理论知识1.外部中断源外部中断0():来自P3.2引脚,采集到低电平或者下降沿时,产生中断请求。外部中断1():来自P3.3引脚,采集到低电平或者下降沿时,产生中断请求。2.内部中断源定时器∕计数器0(T0):发生溢出时,产生中断请求定时器∕计数器1(T1):发生溢出时,产生中断请求串行口:单片机完成接受或发送一组数据时,产生中断请求。4.2项目理论知识4.2.3单片机中断的寄存器根据单片机的中断结构,可以看出,单片机设置了4个专用寄存器用于中断控制,用户通过设置其状态来管理中断系统。1.定时器控制寄存器(TCON)寄存器的作用:用于反应中断请求,启动定时/计数器,设置外部中断请求方式。TCOND7D6D5D4D3D2D1D0(88H)TF1TR1TF0TR0IE1IT1IE0IT04.2项目理论知识位号位名称说明D7TF1定时/计数器1溢出中断请求标志位:1-有中断请求;0-无中断请求D6TR1定时/计数器1启动标志位:1-启动;0-关闭D5TF0定时/计数器0溢出中断请求标志位:1-有中断请求;0-无中断请求D4TR0定时/计数器0启动标志位:1-启动;0-关闭D3IE1外部中断1请求标志位:1-有中断请求;0-无中断请求D2IT1外中断0请求信号方式控制位:IT0=1为脉冲触发方式(负跳变有效),IT0=0为电平方式(低电平有效)D1IE0外部中断0请求标志位:1-有中断请求;0-无中断请求D0IT0外中断0请求信号方式控制位:同IT14.2项目理论知识2.串行口控制寄存器(SCON)(1)寄存器的作用:用于设置串口控制方式,反应串口中断请求。(2)寄存器的内容:(此处只介绍和中断相关的内容)SCOND7D6D5D4D3D2D1D0(88H)SM0SM1SM2RENTB8RB8TIRI位号位名称说明D1TI串行口发送中断请求标志位,发送完一帧串行数据后,由硬件置1D0RI串行口接收中断请求标志位,接收完一帧串行数据后,由硬件置14.2项目理论知识3.中断允许控制寄存器(IE)(1)寄存器的作用:用于控制中断的总允许开关和源允许开关。(2)寄存器的内容:(单片机系统复位后,IE各位均清零,即禁止所有中断)IED7D6D5D4D3D2D1D0(A8H)EA--------ESET1EX1ET0EX0位号位名称说明D7EA中断总允许开关位:1-允许中断;0-禁止中断D4ES串口源允许开关位:1-允许中断;0-禁止中断D3ET1定时/计数器1源允许开关位:1-允许中断;0-禁止中断D2EX1外部中断1源允许开关位:1-允许中断;0-禁止中断D1ET0定时/计数器0源允许开关位:1-允许中断;0-禁止中断D0EX0外部中断0源允许开关位:1-允许中断;0-禁止中断4.2项目理论知识4.中断优先级控制寄存器(IP)(1)寄存器的作用:用于控制单片机的中断优先级。(2)寄存器的内容:(单片机系统复位后,IP各位均清零,即所有中断为低优先级)IPD7D6D5D4D3D2D1D0(B8H)------------PSPT1PX1PT0PX0位号位名称说明D4PS串口中断优先级设置位:1-高级;0-低级D3PT1定时/计数器1中断优先级设置位:1-高级;0-低级D2PX1外部中断1中断优先级设置位:1-高级;0-低级D1PT0定时/计数器0中断优先级设置位:1-高级;0-低级D0PX0外部中断0中断优先级设置位:1-高级;0-低级4.2项目理论知识其中,有关中断的优先级有以下4点说明:(1)CPU同时接收到几个中断请求时,首先响应优先级别最高的中断请求;(2)正在进行的中断响应处理不能被新的同优先级或低优先级的中断请求中断;(3)正在进行的低优先级中断响应处理能被高优先级的中断请求中断;(4)多个同一优先级的中断响应顺序:由中断的硬件结构来决定。具体如表4-5所示。表4-5同级中断优先级别中断源入口地址同级内中断优先级别外部中断00003H最高定时/计数器中断0000BH外部中断10013H定时/计数器中断1001BH串行中断0023H最低4.2项目理论知识4.2.4单片机中断的处理过程中断处理过程具体为以下5步:1.中断源产生:2.中断请求:硬件将TCON和SCON寄存器中的中断标志位的状态置为1,CPU查询TCON和SCON寄存器中的中断标志位,确定有那个中断源发生请求,查询时按优先级顺序进行查询。如果同级,按以下顺序查询:外部中断0→定时中断0→外部中断1→定时中断1→串行中断如果查询到有标志位为“1”,表明有中断请求发生,接着就从相邻的下一机器周期开始进行中断调用。4.2项目理论知识3.中断调用CPU查询到中断请求,经过源允许开关、总允许开关和优先级选择开关,由硬件自动产生一条LCALL指令,LCALL指令执行时,首先将PC内容压入堆栈进行断点保护,再把中断入口地址装入PC,使程序转向相应的中断区入口地址,再跳转到中断服务子程序入口。4.中断响应:执行中断服务子程序,其中子程序中主要包括以下2个内容:(1)清除中断请求:(2)中断服务:5.中断返回:执行完中断服务子程序,返回到主程序断点的程序地址,继续执行主程序。4.2项目理论知识4.2.5单片机中断的初始化设置在进行中断处理之前,还需要初始化设置中断,具体步骤如下所示:1.设置中断的允许(相关寄存器:IE)(1)设置中断源允许:将对应的源允许位设置为1;(2)设置中断总允许:将EA位设置为1;2.设置中断的优先级(相关寄存器:IP):将高优先级设置为1;3.若为外部中断,设置中断触发方式:低电平触发IT0/1=0,下降沿触发IT0/1=1。4.2项目理论知识4.2.6单片机中断的程序编制为了能在C语言源程序中直接编写中断服务函数,增加了一个扩展关键字interrupt。定义中断服务函数的一般形式为:函数返回值类型函数名(形式参数表)interruptn[usingm]interrupt后面的n是中断号,外部中断0中断、定时器/计数器0溢出中断、外部中断1中断、定时器/计数器1溢出中断、串行口发送/接收中断对应的中断号分别为0、1、2、3、4。using后面的m是选择哪个工作寄存器区,分别为0、1、2、3。4.3项目概要设计4.3.1交通灯控制器的概要设计交通灯控制器项目的设计要使用中断来完成。除了单片机的最小系统之外,需要外接交通灯控制部分,这部分是需要和单片机的I/O端口进行连接的。项目的主要设计内容是:(1)进行硬件电路设计时,需要考虑所使用的中断源,以及和单片机连接的I/O端口。(2)进行软件设计时,需要考虑如何响应中断请求,以及中断服务程序的处理。3.3项目概要设计4.3.2硬件电路的概要设计有关交通灯控制器项目的硬件电路的概要设计主要集中在:由中断控制的交通灯控制部分。(1)交通灯控制输入部分使用按键的方式作为交通灯控制输入部分。按键的按下应该引起单片机中断,根据单片机的5个中断源的类型,选择外部中断0。外部中断0请求端口是P3.2端口的第二功能。(2)交通灯控制输出部分根据4个I/O端口的用途,选择P0端口连接红、绿、黄三色LED灯。3.3项目概要设计4.3.3软件程序的概要设计有关交通灯控制项目的软件设计的核心:如何响应中断源的请求。4.4项目详细设计4.4.1硬件电路的详细设计(1)交通灯控制输入部分:有按键和电阻R4组成。如果按键按下,P3.2端口的电平状态为低电平,如果按键抬起,P3.2端口的电平状态为高电平。P3.2端口电平状态为低电平时,产生外部中断0。(2)交通灯控制输出部分:由LED灯D1、D2、D3和电阻R1、R2、R3组成,红、黄、绿三色LED灯连接到单片机的P1.0、P1.1、P1.2端口。根据电路设计和LED灯的发光原理,如果P1.0、P1.1、P1.2端口的电平状态为低电平,连接的LED灯单向导通,LED灯亮,如果P1.0、P1.1、P1.2端口的电平状态为高电平,连接的LED灯截止,LED灯灭。4.4项目详细设计4.4.2软件程序的详细设计根据交通灯控制器项目的软件概要设计,软件部分的设计主要是:中断函数的处理。具体的交通灯控制器项目的处理流程图见图4-8所示。4.5项目实施根据上述有关项目的详细设计,现在使用Proteus软件实现可控流水灯系统的设计。设计步骤如下:1.新建可控流水灯系统设计;2.选择可控流水灯系统所需的元器件;3.放置对象(包括元器件和电源终端)并布局原理图;4.编辑修改元器件参数;5.放置连线,连接对象,建立原理图。4.5项目实施序号库参考名称库描述1AT89C51MCS80518051Microcontroller2RESDEVICEGenericresistorsymbol3BUTTONACTIVESPSTPushButton4LED-GREENACTIVEAnimatedLEDModel(Green)5LED-REDACTIVEAnimatedLEDModel(RED)6LED-YELLOWACTIVEAnimatedLEDModel(Y