单片机原理与应用(C语言版)(微课版)课件 项目5 模拟交通灯系统设计_第1页
单片机原理与应用(C语言版)(微课版)课件 项目5 模拟交通灯系统设计_第2页
单片机原理与应用(C语言版)(微课版)课件 项目5 模拟交通灯系统设计_第3页
单片机原理与应用(C语言版)(微课版)课件 项目5 模拟交通灯系统设计_第4页
单片机原理与应用(C语言版)(微课版)课件 项目5 模拟交通灯系统设计_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目1

简易声光报警器设计目录任务5-1定时器控制LED闪烁5.1定时/计数器任务5-2中断流水灯的循环点亮5.2中断系统任务5-4模拟交通灯控制系统设计任务5-3

数码秒表设计任务拓展:智慧交通灯系统的设计项目导读本项目聚焦单片机定时器与中断应用,通过实践任务助读者掌握交通灯控制系统编程与硬件设计。内容从LED闪烁到交通灯逻辑切换、中断处理,配电路设计、源程序解析与调试建议。助读者构建交通灯系统,理解单片机时间控制与中断机制,提升综合应用能力,为后续开发奠基。思维导图任务5-1定时器控制LED闪烁1、目的与要求通过使用单片机定时器方式实现一个LED定时闪烁的控制系统,熟悉单片机定时器的编程控制方法,包括定时器工作方式设定、初始值设置等。用单片机控制一个LED,使其以1秒为周期闪烁(亮1秒、灭1秒)。通过定时器的轮询方式实现精准的时间控制。2、电路设计单片机与LED采用简单连接方式,LED的一端连接单片机的P1.0引脚,另一端通过限流电阻连接到电源。确保限流电阻的阻值适当,以保护LED和单片机端口,如图所示。3、源程序设计用单片机定时器T0的工作方式1编制1s延时程序,假定系统采用12MHz晶振,T0的工作方式1定时时间为500ms,再循环2次即可定时到1s。LED闪烁控制程序如下:说明:定时器配置:定时器T0工作在工作方式1(16位定时器),初值计算为产生500ms的定时时间。通过循环计数两次500ms,实现1秒的周期。轮询方式:通过while(TF0==0);语句轮询定时器溢出标志(TF0),当定时器溢出时,退出循环,完成一次500ms的延时。LED控制:通过P1.0引脚控制LED的亮灭。在主循环中,切换LED状态并调用延时函数,实现1秒的闪烁周期。4、任务总结本程序是一个简单的LED定时闪烁设计,实现了LED以1秒为周期的亮灭控制。程序使用了定时器T0的轮询方式来实现精准的定时,通过计数和状态切换的方式控制LED的闪烁。主要组成部分:全局变量:count用于记录500ms的计数,led_state用于记录LED状态(亮/灭)。延时函数:delay_1s()使用定时器T0的轮询方式实现1秒的延时。主函数:初始化LED状态,进入主循环,不断切换LED状态并调用延时函数。5.1定时/计数器5.1定时/计数器在测量控制系统中,通常需要定时钟来实现定时控制、测量或延时动作等功能,并要求具备计数功能以对外部事件进行计数,例如测量电动机转速、频率、工件数量等。单片机内部的定时/计数器是一个常用的功能部件。C51单片机有T0、T1两定时器,均由八位寄存器TH、TL组成。图示T0内部结构与控制信号,T1同。T0和T1有如下功能:

两个定时器都有定时或事件计数的功能,由软件选择是定时工作方式还是计数工作方式。

定时/计数器实际上是16位加1计数器。T0由两个八位特殊功能寄存器TH0和TL0构成,T1由两个八位特殊功能寄存器TH1和TL1构成。

T0和T1受特殊功能寄存器TMOD和TCON控制。5.1.1定时/计数器的结构1.定时方式

,开关S打向上,计数器TH0、TL0的计数脉冲来自振荡器的12分频后的脉冲(即fosc/12),即对系统的机器周期计数。当开关K合上,每周期计数器TH0、TL0加1;计到预设值回零,置中断标志TF0(或TF1),产生中断。例如,周期2μs,计3周期即6μs置中断标志。中断时,预定初值载入负值(补码)。最高脉冲频率fosc/12。2.计数方式

,开关S打向下,计数器T0、T1的计数脉冲分别来自于引脚T0(P3.4)或引脚TI(P3.5)上的外部脉冲。开关K合上,计数器对外部脉冲下降沿加1计数,至预定值回零并置位中断标志位TF0(或TF1),产生溢出中断。计数脉冲最高频率≤f_fosc/24。5.1.2定时/计数器的寄存器1.T/C0和T/C1的寄存器定时/计数器0和定时/计数器1是所有51系列单片机都具有的功能,对它们的控制是通过定时/计数器模式寄存器TMOD和定时/计数器控制寄存器TCON来实现的。(1)定时/计数器模式寄存器TMOD

定时/计数器模式寄存器TMOD

定时/计数器的工作模式设置(2)定时/计数器控制寄存器TCON2.T/C2的寄存器与T/C2相关的寄存器有控制寄存器T2CON和模式寄存器T2MOD(1)定时/计数器2控制寄存器T2CON(2)定时/计数器2模式寄存器T2MOD当定时器2工作于16位自动重载模式时,可对其编程实现向上计数或向下计数。定时/计数器控制寄存器TCON定时/计数器2控制寄存器T2CON的定义定时/计数器2的工作方式设置定时/计数器2模式寄存器T2MOD5.1.3定时/计数器的工作方式定时/计数器有四种工作方式,即方式0、方式1、方式2和方式3.它们通过设置相工应的寄存器来选择。对于增强型51单片机,定时/计数器2的使用略有不同,但它也有三种工作方式,即捕获方式、自动重装载方式和波特率发生器方式。1、方式0方式0是13位计数结构的工作方式,其计数器由TH0的全部8位和TL0的低5位构成。当TL0的低5位计数溢出时,向TH0进位,而13位计数全部溢出时,则向计数溢出标志位TF0进位。2、方式1方式1是16位计数结构的工作方式,计数器由TH0的全部8位和TL0的全部8位构成。与方式0基本相同,区别仅在于工作方式1的计数器TL0和TH0组成16位计数器,从而比工作方式0有更宽的定时/计数范围。3、方式2八位自动装入时间常数工作方式。由TL1构成八位计数器,TH1仅用来存放时间常数。4、方式3两个8位方式。方式3只适用于定时器0,如果设置定时器1为工作方式3,则定时器1将处于关闭状态。5、T/C2的工作方式定时/计数器2既可以用作定时器,又可以用作事件计数器。其工作方式由特殊寄存器T2CON中的C/T2位选择。定时器2有三种工作方式:捕获方式、自动重装载(向上或向下计数)方式和波特率发生器方式。(1)捕获方式在捕获方式下,通过T2CON控制位EXEN2来选择两种方式。(2)自动重装载方式当定时器2工作于16位自动重载方式时,可对其编程而实现向上计数或向下计数。(3)波特率发生器方式通过设置T2CON中的TCLK或RCLK可选择定时器2作为波特率发生器。任务5-2中断流水灯的循环点亮1、目的与要求通过使用单片机定时器中断与P1口控制,设计一个流水灯循环点亮的控制系统,熟悉单片机定时器中断控制与P1口输出控制方法,掌握流水灯控制逻辑。用单片机控制8个LED,利用P1口控制8个LED形成流水灯效果,按照从左到右依次点亮然后熄灭的循环方式。要求每个LED点亮时间间隔为0.5秒。2、电路设计单片机的P1口连接8个LED,每个LED通过一个限流电阻连接到电源。各LED及限流电阻应正确连接至P1口对应引脚(P1.0~P1.7),确保电路安全。3、源程序设计用单片机定时器T0的工作方式1编制0.5秒延时程序,假定系统采用12MHz晶振,通过定时器中断控制流水灯的循环点亮。说明:定时器配置:定时器T0工作在方式1,初值设定为定时500ms。通过中断处理,每500ms触发一次,用于更新流水灯状态。阵列控制:led_data数组定义了流水灯的点亮顺序,每个元素对应一种点亮模式(低位优先点亮P1.0)。中断逻辑:中断函数中通过递增index控制流水灯状态切换,从左到右依次点亮到全灭后重新循环。4、任务总结本程序通过定时器中断实现流水灯的循环点亮控制,利用P1口输出不同的字节值,实现了8个LED的流水灯效果。使用中断方式提高了程序的时间精度与稳定性,适合用于各类LED循环显示需求场景的开发与设计。5.2中断系统当CPU和外设交换信息时,存在着快速CPU和慢速外设间的矛盾,机器内部有时也可能出现突发事件,为此,计算机中通常采用中断技术。5.2.1什么是中断1.中断中断是CPU因内外部事件或预先安排事件而暂停当前程序,去服务该事件,服务完再返回原程序。2.中断源中断源即中断原因,可为I/O设备、故障、时钟及人为设置。3.中断优先级和嵌套多中断源同时申请时,CPU按优先级响应。高优先级中断能中断低优先级中断处理,称为中断嵌套。4.中断系统能实现中断功能并能对中断进行管理的硬件和软件称为中断系统。中断请求是在执行程序的过程中随机发生的,中断系统要解决的问题如下:

CPU在不断执行指令的过程中,是如何检测到随机发生的中断请求的?

如何使中断的双方(CPU方和中断源方)均能人为控制——允许中断或禁止中断?

由于中断的产生存在随机性,因此不可能在程序中使用调用子程序指令或转移指令,那么如何实现正确的转移,从而更好地为该中断源服务呢?

中断源有多个,而CPU只有一个,当有多个中断源同时有中断请求时,用户怎么控制CPU按照自己的需要安排响应次序?

中断服务完毕,如何正确地返回到原断点处?5.2.2中断系统的结构51单片机中断系统的结构如图所示,由5个中断请求源INT0、T0、INT1、T1、TI/RI;中断标志寄存器(TCON);中断允许寄存器(IE);全局中断允许;中断优先级寄存器(IP)和查询硬件等组成。通过对各种寄存器的读/写来控制单片机的中断类型、中断开/关和中断源的优先级。1、中断请求(1)外部中断请求源(2)内部中断请求源2、

中断允许寄存器IE在51单片机中断系统中,中断的允许或禁止是由片内可进行位寻址的8位中断允许寄存器IE来控制的,如表所列。要设置允许外部中断0、1允许,其他不允许,则IE的值如表所列,即IE=85H。

TCON寄存器结构

SCON寄存器3、中断源机入口地址C51单片机有6个中断源,5个在片内,1个在片外,它们在程序存储器中有固定的中断入口地址,当CPU响应中断时,硬件自动形成这些地址,由此进入中断服务程序;6个中断源有两级中断优先级,可形成中断嵌套。这6个中断源的符号、名称、产生条件及中断服务程序的入口地址如表所示。5.2.3中断控制相关的寄存器1、中断允许控制寄存器IE(地址OA8H)每个中断源都可以通过置位或清除中断允许控制寄存器IE中的相关中断允许控制位分别使得中断源有效或无效。IE还包括一个中断允许总控制位EA,它能一次禁止所有中断。中断允许寄存器如表

所示。2、定时/计数器控制寄存器(TCON)(地址88H)该寄存器用于保存外部中断请求以及定时器的计数溢出。寄存器的内容及位地址如表

所示。3,串行口控制寄存器(SCON)(98H)串行口控制寄存器与中断有关的控制位共两位,如表所示。4,中断优先级寄存器IP(地址8BH)单片机设自然和人工优先级。AT89S52设两优先级,有中断同级则依自然优先级。六中断源自然优先级:外中断0→定时0→外中断1→定时1→串口→定时2。优先级由IP寄存器设,IP某位为1则高优,否则低优。5.2.4中断响应过程单片机在机器周期S5P2期间采样中断源,S6期间查询中断标志。若标志为1,则在S1期间按优先级处理中断。中断响应后,标志自动清除,程序计数器PC内容压栈保护,中断矢量装入PC,执行中断服务程序。下列三种情况中的一种发生时,CPU将封锁对中断的响应。

CPU正在处理一个同级或更高级别的中断请求。

现行的机器周期不是当前正执行指令的最后一个周期。我们知道,单片机有单周期、双周期、三周期指令,当前执行的指令是单字节没有关系,如果是双字节或四字节的,就要等整条指令都执行完了,才能响应中断(因为中断查询是在每个机器周期都可能查到的)。

当前正执行的指令是返回指令(RETI)或访问IP、IE寄存器的指令时,则CPU至少再执行一条指令才应中断。CPU响应中断的过程分为以下几个步骤:(1)保存断点,即将下一个执行指令地址存入堆栈。(2)查找中断入口,根据6个中断源,找到对应的入口地址。这些地址和编号在表中列出,服务程序入口地址间隔8字节。(3)执行中断处理程序。(4)中断返回,完成中断指令后,返回主程序继续执行。5.2.5C51中断的程序设计C51使用户能编写高效的中断服务程序。编译器在规定的中断源的矢量地址中放入无条件转移指令,使CPU响应中断后自动地从矢量地址跳转到中断服务程序的实际地址,而无需用户去安排。中断服务程序被定义为函数,函数的完整定义如下:返回值

函数名([参数])[模式][再入]interruptn[usingm]下面分别介绍后面三个参数。1.再入通过属性关键字reentrant将函数定义为再入函数,这样函数才能被递归调用。这是因为在C51中,普通函数(非再入的)不能被递归调用,只有再入函数才可被递归调用。2.interruptninterruptn表示将函数声明为中断服务函数,n为中断源编号,它可以是0~31间的整数,不允许为带运算符的表达式。n通常取以下值:

0:外部中断0。

1:定时器/计数器0溢出中断。

2:外部中断1。

3:定时器/计数器1溢出中断。

4:串行口发送与接收中断。3.usingm定义函数所使用的工作寄存器组,m的取值范围为0~3,可缺省,它对目标代码有如下作用:函数入口处将当前寄存器保存,使用m指定的寄存器组,函数退出时原寄存器组恢复。选择不同的工作寄存器组,可方便实现寄存器组的现场保护。值得注意的是,中断服务函数不允许用于外部函数,因为它对目标代码有下面这些影响:

当调用函数时,SFR中的ACC、B、DPH、DPL和PSW在实际需要时应该入栈。

如果不使用寄存器组切换,中断函数所需的所有工作寄存器Rn都应该入栈。

函数退出前,所有工作寄存器应该出栈。

函数由RETI终止指令。【实例】中断的应用。要求:电路原理图如图所示。每按一次键,产生一次中断,P1口输出并取反,用C语言编程。【实例】利用中断来点亮灯用

引脚的按钮控制P1口的灯,要求每按一下按钮就申请一次中断,点亮一盏灯,依次点亮八盏灯中的一盏。要求采用边沿触发。程序如下:任务5-3数码秒表设计1、目的与要求通过由两个LED数码管显示的数码秒表控制系统的设计制作,熟悉单片机定时/计数器及中断的编程控制方法,包括定时器工作方式设定、初始值设置、中断编程、中断函数的应用等。用单片机控制两个LED数码管,采用静态连接方式,要求两个数码管显示00-99计数,时间间隔为1s。2、电路设计单片机与两个共阳极数码管采用静态连接方式,数码管的段码分别由P1口和P2口控制,公共端接高电平,数码秒表控制电路参考图进行设计。3、源程序设计用单片机定时器T1的工作方式1编制1s延时程序,假定系统采用12MHz晶振,T1的工工作方式1定时时间为50ms,再循环20次即可定时到1s。0~99秒秒表的控制程序如下。(1)全局变量是相对于局部变量而言的,凡是在函数外部定义的变量都是全局变量,可以默认有extern说明符,因此也称为外部变量。外部变量定义后,其后面的所有函数均可以使用。(2)对定时器编程需要的步骤:定时器初始化(设置工作方式)、初值计算和设置、启动定时器计数、计数溢出处理(程序中采用中断处理)。(3)对中断编程需要的步骤:开放中断源允许、开放总中断允许、中断函数编程。(4)只有当定时器T1定时50ms时间到时,T1申请中断,在中断允许的情况下,程序才自动跳转到T1中断函数timer_1()执行。4、任务总结本程序是一个数码秒表设计,实现了从00秒到99秒的计时功能,并使用两个静态数码管来显示当前的秒数。程序使用了定时器T1的中断功能来实现每50毫秒的定时,并通过计数和累加的方式达到每秒的更新。主要组成部分:(1)全局变量:(2)定时器T1中断函数timer_1():(3)显示函数disp(unsignedchari):(4)主函数main():任务5-4模拟交通灯控制系统设计1、目的与要求通过对模拟交通灯控制系统的制作,让读者掌握定时器和中断系统的综合应用,进一步熟练软、硬件联调方法。设计并实现单片机交通灯控制系统,实现以下三种情况下的交通灯控制。(1)正常情况下双方向轮流点亮交通灯,交通灯的状态如表所示。(2)特殊情况时,A方向放行。(3)有紧急车辆通过时,A、B方向均为红灯。紧急情况优先级高于特殊情况。2、电路设计本任务涉及定时控制东、南、西、北四个方向上的12盏交通信号灯,且出现特殊和紧急情况时,能及时调整交通灯的指示状态。采各控制端口线的分配及控制状态如表

所示。根据以上分析,我们采用如图所示的电路连接方法。3、源程序设计在正常情况下,交通灯控制程序的流程图如图所示。在中断情况下,中断服务程序的流程图如图所示。4、程序下载调试(1)首先观察正常情况下交通灯的状态,体会定时器的作用。(2)观察特殊情况时交通灯的状态,掌握中断程序的调试方法。(3)观察紧急情况下交通灯的状态,理解中断优先级的概念。5、任务小结该程序是一个交通灯控制系统实现,其核心功能是模拟现实中的交通信号灯切换逻辑,并能响应两种不同的中断情况以处理紧急或特殊状况。(1)延时函数实现(2)中断处理(3)主循环逻辑任务拓展:智慧交通灯系统的设计1、目的与要求通过设计一个基于单片机的智慧交通灯系统,深入了解单片机定时器、中断以及输入输出接口的应用。掌握如何利用单片机对交通灯系统进行定时控制,实现不同方向交通信号的有序切换,并能通过行人请求等外部输入动态调整信号灯状态。要求设计的智慧交通灯系统能够按如下时间规则运行:南北方向绿灯亮30秒后黄灯亮3秒,接着转为红灯亮;东西方向绿灯亮25秒后黄灯亮3秒,接着转为红灯亮。同时,系统应具备“车流量感知”功能,当检测到某方向车流量(模拟)增大时,能自动延长该方向绿灯时间5秒。此外,还要考虑行人过街请求,当行人按下按钮后,在不影响整体交通规则的前提下,尽快切换信号灯,为行人开放通行时间。2、电路设计交通灯硬件部分主要由红、黄、绿三色LED灯组成,分别代表不同方向的交通信号。以南北方向和东西方向为例,每个方向的红黄绿三色灯分别连接到单

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论