四川交通信号灯 c语言 技术支持,单片机应用技术C语言任务4 交通信号灯控制.PPT...

253b171540df25e1b84436cbe50dfc72.gif单片机应用技术C语言任务4 交通信号灯控制.PPT

任务4 交通信号灯控制,4.1 工作任务,4.1.1 硬件电路及任务要求,4.1.2 任务分析,4.1.3 控制程序,4.1.4 任务结论,4.2 相关知识链接,4.2.1 MCS-51单片机的中断系统,4.2.2 中断系统的编程与应用举例,4.2.3 MCS-51单片机的定时/计数器,4.2.4 定时/计数器应用举例,上午3时45分21秒,单片机应用技术课件制作组,4.1 工作任务,表4-1 交通信号灯控制的工作任务要点上午3时45分21秒,单片机应用技术课件制作组,4.1 工作任务,4.1.1硬件电路及任务要求,1.硬件电路上午3时45分21秒,单片机应用技术课件制作组,4.1 工作任务,4.1.1硬件电路及任务要求,2.任务要求,假设一个十字路口为东西南北走向,如图4-2所示。初始为状态0。 状态0东西红灯(D1),南北红灯(D4);延时1 s,然后转入状态1。 状态1南北绿灯(D6)通车55 s,东西红灯(D1);过55 s转入状态2。上午3时45分21秒,单片机应用技术课件制作组,4.1 工作任务,4.1.1硬件电路及任务要求,2.任务要求,状态2南北绿灯闪3s转黄灯(D5)亮2 s,东西仍然亮红灯(D1);再转入状态3。 状态3东西绿灯(D3)通车25 s,南北红灯(D4);过一段时间转入状态4。 状态4东西绿灯(D3)闪3 s转黄灯(D2)亮2 s,南北仍然亮红灯,最后循环至状态1。 有紧急车辆通过(用按键开关S1模拟)时,东西南北均为红灯。上午3时45分21秒,单片机应用技术课件制作组,4.1 工作任务,4.1.2任务分析,1.控制码确定用6只发光二极管模拟交通信号灯,以单片机的P0口控制6只发光二极管,口线输出高电平则“信号灯”灭,口线输出低电平则“信号灯”亮。上午3时45分21秒,单片机应用技术课件制作组,4.1 工作任务,4.1.2任务分析,2.紧急车辆的处理以按键开关S1模拟紧急车辆通过开关,当S1为高电平时属于正常现象,当S1为低电平时,属于紧急车辆通过的情况,直接将S1信号接至引脚P3.2可实现外部中断0中断。上午3时45分21秒,单片机应用技术课件制作组,4.1 工作任务,4.1.2任务分析,3.定时时间的控制由定时器来产生通车延时时间55s。因为系统的晶振是12MHz,本程序定时器工作于方式1(16位方式)时,最大定时时间为65.536ms,所以需要配合软件记数。上午3时45分21秒,单片机应用技术课件制作组根据任务要求和任务分析,编写控制程序如下 include unsigned char t0,t1; /*用T1的方式1编制0.5秒延时程序,假定系统采用12MHz晶振,定时器1、工作方式1定时50ms,再循环10次即可定时到0.5秒*/ void delay0_5s1 fort00;t00 x0a;t0 TH10 x3c; 设置定时器初值TL10 xb0;TR11; 启动T1whileTF1; 查询计数是否溢出,50ms时间到TF11TF10; 50ms时间到将标志位TF1清零 ,4.1.3 控制程序上午3时45分21秒,单片机应用技术课件制作组/*实现0.5秒128秒延时*/ void delay_t1unsigned char t fort10;t1t;t1 采用全局变量t0作为循环控制变量delay0_5s1; ,4.1.3 控制程序上午3时45分21秒,单片机应用技术课件制作组/*外部中断0中断函数,紧急情况处理,当CPU响应外部中断0的中断请求时,自动执行该函数,实现两个方向红灯同时亮10秒*/,4.1.3 控制程序,void int_0 interrupt 0 紧急情况中断 unsigned char i,j,k,l,m;iP0; 保护现场,暂存P0口、t0、t1、TH1、TH0jt0;kt1;lTH1;mTH0;P00 xde; 两个方向都是红灯delay_t120; 延时10秒P0i; 恢复现场,中断前P0口、t0、t1、TH1、TH0t0j;t1k;TH1l;TH0m; 上午3时45分21秒,单片机应用技术课件制作组/*定时器的初始化,中断管理设置,I/O控制、函数调用等功能。*/,4.1.3 控制程序,void main 主函数 unsigned char k;TMOD0 x10; T1工作在方式1EA1; 开放总中断允许位EX01; 开外部中断0中断允许位IT01; 设置外部中断0为下降沿触发EX11; 开外部中断1中断允许位IT11; 设置外部中断1为下降沿触发while1 P00 xdb; 东西绿灯,南北红灯,延时25秒delay_t150; fork0;k3;k 东西绿灯闪烁3次上午3时45分21秒,单片机应用技术课件制作组4.1.3 控制程序, P00 xdb;delay0_5s1; 延时0.5秒P00 xdf;delay0_5s1; 延时0.5秒P00 xdd; 东西黄灯,南北红灯,延时2秒delay_t14;P00 x7e; 东西红灯,南北绿灯,延时25秒delay_t150;fork0;k3;k 南北绿灯闪烁3次 P00 x7e;delay0_5s1; 延时0.5秒P00 xfe;delay0_5s1; 延时0.5秒P00 xbe; 东西红灯,南北黄灯,延时2秒delay_t14; 上午3时45分21秒,单片机应用技术课件制作组4.1.4 任务结论,将编写好的控制程序在单片机模拟仿真软件中进行编辑、编译和下载。 运行程序,交通信号灯按照设计要求进行点亮和闪烁; 按下开关S1,程序跳转到中断服务函数int_0去执行,东西南北均为红灯。,1.任务结果上午3时45分21秒,单片机应用技术课件制作组4.1.4 任务结论,(1)中断技术的使用,2.定时器和中断技术的使用,有紧急车辆(如执行任务的警车)通过时,采用了中断技术。,void int_0 interrupt 0 紧急情况中断 unsigned char i,j,k,l,m;iP0; jt0; kt1;lTH1;mTH0; 保护现场P00 xdb; 两个方向都是红灯delay_t120; 延时10秒P0i; t0j; t1k;TH1l;TH0m; 恢复现场 ,要使用中断技术,必须在主程序中对中断进行相应设置,如外中断的触发方式、外中断控制位等。上午3时45分21秒,单片机应用技术课件制作组4.1.4 任务结论,(2)定时器的使用,2.定时器和中断技术的使用,程序中采用定时器T1的方式1 实现定时50ms,并通过变量t0控制定时器溢出的次数,获得0.5s的定时,再通过变量t1控制0.5s定时的次数分别获取0.5s、25s、3s的定时。,主函数中定时器的初始化 TMOD0 x10; T1工作在方式1 EA1; 开放总中断允许位上午3时45分21秒,单片机应用技术课件制作组2.定时器和中断技术的使用,void delay0_5s1 fort00;t00 x0a;t0 TH10 x3c; 设置定时器初值TL10 xb0;TR11; 启动T1whileTF1; 查询计数是否溢出,50ms时间到TF11TF10; 50ms时间到将标志位TF1清零 ,0.5s定时的实现上午3时45分21秒,单片机应用技术课件制作组4.1.4 任务结论,3.任务结论,中断和定时/计数器是单片机提供给用户的比较重要的硬件资源; MCS-51单片机共有5个中断源和2个16位的定时/计数器。 用户只要通过编程对其对应的特殊功能寄存器进行管理,就可以很好地使用这些资源为用户服务。 MCS-51单片机与中断有关的寄存器有中断允许寄存器IE、中断优先级寄存器IP、 中断标志寄存器TCON和SCON;与定时/计数器有关的寄存器有方式寄存器TMOD和控制寄存器TCON。上午3时45分21秒,单片机应用技术课件制作组,4.2 相关知识链接,4.2.1 MCS-51的中断系统,1.中断的概念,看电视,中断处理,中断请求中断返回电话铃响接听电话看电视主程序事件发生事件处理主程序,实际生活,计算机上午3时45分21秒,单片机应用技术课件制作组,4.2.1 MCS-51的中断系统上午3时45分21秒,单片机应用技术课件制作组,中断的概念 在计算机执行程序的过程中,当外部设备发生某一事件去请求CPU处理时(中断发生);CPU暂时中断当前程序的执行,转去处理所发生的事件(中断响应和中断服务);待处理完毕后,再返回来执行原来被中断的程序中断返回),这一处理过程称之为中断。,中断要注意2点保护断点和保护现场4.2.1 MCS-51的中断系统上午3时45分21秒,单片机应用技术课件制作组,中断的功能,(1)提高CPU的工作效率,(2)实现信息实时处理,(3)实现实时控制,(4)实现人机交互4.2.1 MCS-51的中断系统上午3时45分21秒,单片机应用技术课件制作组,中断标志位,中断源允许,总允许EA,中断优先级,2. MCS-51中断系统的结构,4.2.1 MCS-51的中断系统上午3时45分21秒,单片机应用技术课件制作组,MCS-51系列单片机的中断系统有5个中断源分别是 , ,T0,T1和串行端口。,3. 中断源与中断请求,中断源5个,4.2.1 MCS-51的中断系统上午3时45分21秒,单片机应用技术课件制作组,TF0(TCON.5)片内定时/计数器T0溢出中断请求标志。当定时/计数器T0发生溢出时,置位TF0,向CPU申请断。,TF1(TCON.7)片内定时/计数器T1溢出中断请求标志。当定时/计数器T1发生溢出时,置位TF1,向CPU申请中断。,RI、TI 串行口中断请求标志。当串行口接收完一帧数据时置位RI或当串行口发送完一帧数据时置位TI,向CPU申请中断。,3. 中断源与中断请求,4.2.1 MCS-51的中断系统上午3时45分21秒,单片机应用技术课件制作组,(1)定时/计数器控制寄存器TCONTF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0,TCON 88H,IT0(TCON.0)外中断0触发方式控制位。IT00,电平触发方式。IT01,边沿触发方式(下降沿有效)。 IT1(TCON.2)选择外部中断1的中断触发方式同IT0 IE0(TCON.1) 外中断0中断请求标志位。 TF0,T0溢出中断请求标志位。,IT1 、IE1、 TF1类同,4.2.1 MCS-51的中断系统上午3时45分21秒,单片机应用技术课件制作组,(2)串行口控制寄存器SCONSCON 98HRI(SCON.0)串行口接收中断请求标志位。 TI(SCON.1)串行口发送中断请求标志位。 注意RI和TI由硬件置位、由软件清除。,4.2.1 MCS-51的中断系统上午3时45分21秒,单片机应用技术课件制作组,4.中断控制EA ES ET1 EX1 ET0 EX0,IE A8H,EX0 外中断0允许位; ET0 T0中断允许位; EX1 外中断0允许位; ET1 T1中断允许位; ES 串口中断允许位; EA CPU中断允许(总允许)位。,(1)中断允许寄存器IE,4.2.1 MCS-51的中断系统上午3时45分21秒,单片机应用技术课件制作组,(2)中断优先级控制寄存器IPPS PT1 PX1 PT0 PX0,IP B8H,IP寄存器各位的含义如下,PX0 外中断0优先级设定位; PT0 T0优先级设定位; PX1 外中断0优先级设定位; PT1 T1优先级设定位; PS 串口优先级设定位。,4.2.1 MCS-51的中断系统上午3时45分21秒,单片机应用技术课件制作组,(3)中断控制寄存器状态设置,IE寄存器和IP寄存器都是既可以字节寻址又可以位寻址,因此对位状态的设置既可以采用字节操作指令也可使用位操作指令。,以IE寄存器为例,假定要开放外部中断 0和定时/计数器0中断,定时/计数器0中断为高级中断,外部中断0为低级中断。,字节操作指令为 IE0 x83; IP0 x02;,位操作指令为 EA1; EX01; ET01; PT01;,4.2.1 MCS-51的中断系统上午3时45分21秒,单片机应用技术课件制作组,5.中断处理过程及中断请求的撤除,(1)中断请求与响应中断的条件 中断源发出中断请求; 中断总允许位EA1; 申请中断的中断源允许。,满足以上基本条件,CPU一般会响应中断,但若有下列任何一种情况存在,则中断响应会受到阻断。 CPU正在响应同级或高优先级的中断; 当前指令未执行完; 正在执行RETI中断返回指令或访问专用寄存器IE和IP的指令。,4.2.1 MCS-51的中断系统上午3时45分21秒,单片机应用技术课件制作组,5.中断处理过程及中断请求的撤除,(2)中断响应 中断响应过程包括保护断点和将程序转向中断服务程序的入口地址。 首先,中断系统通过硬件自动生成长调用指令(LACLL),该指令将自动把断点地址压入堆栈保护(不保护累加器A、状态寄存器PSW和其他寄存器的内容)。 然后,将对应的中断入口地址装入程序计数器PC(由硬件自动执行),使程序转向该中断入口地址,执行中断服务程序。,4.2.1 MCS-51的中断系统上午3时45分21秒,单片机应用技术课件制作组,5.中断处理过程及中断请求的撤除,4.2.1 MCS-51的中断系统,(3)中断服务 中断服务程序从中断入口地址开始执行,到返回指令RETI为止。 中断程序的组成 在进入中断服务程序后,一般要先保护现场; 执行中断处理子程序; 中断返回之前再恢复现场。上午3时45分21秒,单片机应用技术课件制作组,5.中断处理过程及中断请求的撤除4.2.1 MCS-51的中断系统,(4)中断返回 中断返回是指中断服务完后,计算机返回原来断开的位置(即断点),继续执行原来的程序。 中断返回由中断返回指令RETI来实现,指令功能是把断点地址从堆栈中弹出,送回到程序计数器PC,同时清除优先级状态触发器。 特别要注意不能用RET指令代替RETI指令。上午3时45分21秒,单片机应用技术课件制作组,5.中断处理过程及中断请求的撤除4.2.1 MCS-51的中断系统,(5)中断请求的撤除CPU响应中断请求后即进入中断服务程序,在中断返回前,应撤除该中断请求,否则,会重复引起中断而导致错误。MCS-51各中断源中断请求撤销的方法各不相同。 定时/计数器中断请求的撤除 CPU在响应中断后即由硬件自动清除其中断标志位TF0或TF1,无需采取其他措施。上午3时45分21秒,单片机应用技术课件制作组4.2.1 MCS-51的中断系统,(5)中断请求的撤除 串行口中断请求的撤除 CPU在响应中断后,硬件不能自动清除中断请求标志位TI、RI,必须在中断服务程序中用软件将其清除。 外部中断请求的撤除 边沿触发的外部中断0或1,CPU在响应中断后由硬件自动清除其中断标志位IE0或IE1,无需采取其他措施。 电平触发的外部中断,在CPU响应中断后,应立即撤除引脚上的低电平。上午3时45分21秒,单片机应用技术课件制作组,中断系统的程序设计主要包括中断控制程序的设计和中断服务程序的设计两部分。 中断控制程序用于实现中断的控制,常作为主程序的一部分和主程序运行。 中断服务程序用于完成中断源所要求的各种操作,常放在中断入口所对应的存储区,仅在发生中断时才会执行。4.2.2 中断系统的编程与应用上午3时45分21秒,单片机应用技术课件制作组,中断控制程序就是对中断的初始化操作,主要包括以下几点 主程序应在0000H处放置一条无条件跳转指令,跳过中断入口程序地址段。 设置堆栈指针SP,将SP值设置为用户存储区的高位地址段,一般要设为30H以上。 根据中断源的轻重次序,设置中断优先级控制,即设置IP的值。 定义外触发中断的触发方式,选择是低电平还是下降沿触发。 开放中断。要同时置位EA和需要开放中断的中断允许控制位。,4.2.2 中断系统的编程与应用上午3时45分21秒,单片机应用技术课件制作组,应从对应的中断入口地址开始放置中断服务程序,而各中断入口地址间只有8个字节,一般中断服务程序都会超过8个字节,因此常在中断入口地址处加一条跳转指令,将程序指向实际中断服务程序存储区。 如果中断服务程序中使用与主程序有关的寄存器,则必须要进行保护现场,用PUSH指令完成。在中断返回到主程序前,应恢复这些寄存器的值,即恢复现场,用POP完成。需要注意的是保护现场数据越少越好,数据保护越多,堆栈负担越重,堆栈深度设置越深。,4.2.2 中断系统的编程与应用,中断控制程序就是对中断的初始化操作,主要包括以下几点上午3时45分21秒,单片机应用技术课件制作组,如果需要进行中断屏蔽操作,可在中断服务程序中关中断,以禁止其他中断源的请求;同时也要考虑何时再打开相关中断。 中断服务程序的主体,也即中断服务的要求。 对不能实现硬件清零操作的中断标志位清零,主要指外部中断电平触发方式和串行口中断的中断标志位。 在中断返回时,最后一条指令必须是RETI。,4.2.2 中断系统的编程与应用,中断控制程序就是对中断的初始化操作,主要包括以下几点上午3时45分21秒,单片机应用技术课件制作组4.2.2 中断系统的编程与应用,【例4-1】在8051单片机的 引脚外接脉冲信号,试利用中断结构,编制一个脉冲计数程序。,解 程序如下 include “REG51.h“unsigned int count;void int0_isr interrupt 0 INT0中断count;void main 主程序Count0;IT0 1;EX0 1; EA 1;while1;上午3时45分21秒,单片机应用技术课件制作组,【例4-2】利用单片机的外部中断0,要求每中断一次,P1口所接8只发光二极管循环点亮。试设计相关电路并编制程序实现该功能。,根据题意,所设计的硬件电路图如图4-4所示,通过一个开关连接外部中断0引脚,以此作为外部输入信号来控制P1口所接8只发光二极管的亮灭。4.2.2 中断系统的编程与应用上午3时45分21秒,单片机应用技术课件制作组,include “REG51.h“include “Intrins.h“void delayvoidunsigned int x;forx0; x0 xFFFF; x;void int0_isr interrupt 0 INT0中断unsigned char i0 xfe, j;forj0; j8; jP1i; 使LED流水显示i_crol_i, 1;delay;P10 xff;4.2.2 中断系统的编程与应用上午3时45分21秒,单片机应用技术课件制作组,void mainP1 0 xff;IT0 1;EX0 1; EA 1;while1;4.2.2 中断系统的编程与应用上午3时45分21秒,单片机应用技术课件制作组4.2.2 中断系统的编程与应用,【例4-3】如图4-5所示为多个故障显示电路图。当系统无故障时,4个故障源输入端A、B、C、D全为低电平,显示灯全灭。当某部分出现故障,其对应的输入由低电平变为高电平,从而引起中断。中断服务程序主要任务是判定故障源,并将对应的发光二极管点亮。上午3时45分21秒,单片机应用技术课件制作组4.2.2 中断系统的编程与应用,include “REG51.h“sbit A_guP10;sbit B_guP11;sbit C_guP12;sbit D_guP13;sbit A-ledP14 ;sbit B-ledP15 ;sbit C-ledP16 ;sbit D-ledP17;void delayvoidunsigned int x;forx0; x0 xFFFF; x;上午3时45分21秒,单片机应用技术课件制作组4.2.2 中断系统的编程与应用,void int0_isr interrupt 0 INT0中断 IfA_gu1 A-led0;IfB_gu1 B-led0;IfC_gu1 C-led0;IfD_gu1 D-led0;void main P1 0 xff;IT0 1;EX0 1; EA 1;while1;上午3时45分21秒,单片机应用技术课件制作组4.2.3 MCS-51单片机的定时/计数器,1.定时/计数器的结构及工作原理,(1) 定时/计数器组成框图,上午3时45分21秒,单片机应用技术课件制作组4.2.3 MCS-51单片机的定时/计数器,1.定时/计数器的结构及工作原理,(1) 定时/计数器组成框图,高8位,低8位,工作方式设置,启停及设置溢出标志,加1计数器,上午3时45分21秒,单片机应用技术课件制作组,(2)定时/计数器工作原理,计数器脉冲来源 振荡器脉冲经过12分频;T0或T1引脚的外部脉冲。 计数器全1时,再输入1个脉冲就回零,并发生溢出(TCON中TF0或TF1置1), 发中断请求。 计数值溢出时计数器值计数初值。 定时模式,对内部机器周期计数定时时间 t 计数值N x Tcy,4.2.3 MCS-51单片机的定时/计数器上午3时45分21秒,单片机应用技术课件制作组,2.定时器的控制及初始化GATE C / T M1 M0 GATE C / T M1 M0,TMOD 89H,T0,T1,M1、M2控制的四种工作方式,0 013位计数器0 116位计数器1 0可自动重装的8位计数器1 1T0分为2个8位计数器;T1此时停止工作,4.2.3 MCS-51单片机的定时/计数器上午3时45分21秒,单片机应用技术课件制作组,2.定时器的控制及初始化GATE C / T M1 M0 GATE C / T M1 M0,TMOD 89H,T0,T1,GATE 门控位,为“0”,允许软件控制位TR0或TR1启动定时器。为“1”,允许外部中断0或1引脚为高电平,且由软件使TR0(或TR1)置1时,才能启动定时器工作。,4.2.3 MCS-51单片机的定时/计数器上午3时45分21秒,单片机应用技术课件制作组,(2)控制寄存器TCON,4.2.3 MCS-51单片机的定时/计数器上午3时45分21秒,单片机应用技术课件制作组,初始化步骤如下,(1)确定工作方式,对TMOD赋值。 (2)预置定时或计数的初值,直接将初值写入TH0、TL0或TH1、TL1 。 (3)根据需要开启定时/计数器中断,直接对IE寄存器赋值。 (4)启动定时/计数器工作,将TR0或TR1置“1”。 (5)当GATE0时,直接由软件置位启动;当GATE 1时,除软件置位外,还必须在外中断引脚处加上相应的电平值才能启动。,4.2.3 MCS-51单片机的定时/计数器上午3时45分21秒,单片机应用技术课件制作组,3.定时器工作方式 定时/计数器T0有4种工作方式(方式0、1、2、3) T1有3种工作方式(方式0、1、2)。,(1)工作方式0,13位计数。由TL0的低5位和TH0的8位组成。TH0溢出时,置位TF0标志,向CPU发出中断请求。(如下图),4.2.3 MCS-51单片机的定时/计数器上午3时45分21秒,单片机应用技术课件制作组,(1)工作方式0上午3时45分21秒,单片机应用技术课件制作组0或1(1)工作方式0上午3时45分21秒,单片机应用技术课件制作组0或1,(1)工作方式0上午3时45分21秒,单片机应用技术课件制作组,(2) 工作方式1,当M1M0为01时,定时/计数器工作在方式1,其逻辑电路结构和操作方法与方式0基本相同,它们的差别仅在于计数的位数不同(16位),如图所示上午3时45分21秒,单片机应用技术课件制作组,当TMOD的M1M0为10时,定时/计数器工作在方式2,其逻辑电路结构图如图所示。,(3)工作方式2上午3时45分21秒,单片机应用技术课件制作组,方式2为自动重装初值的8位计数方式,仅用TL0计数,最大计数值为256。 计满溢出后一方面进位TF0,使溢出标志TF01;另一方面,使原来装在TH0中的初值装入TL0。 优点定时初值可自动恢复,TH0中存放初值; 缺点计数范围小,只适用于需要重复定时,而定时范围不大的应用场合。,(3) 工作方式2上午3时45分21秒,单片机应用技术课件制作组,(4)工作方式3,T0分成为两个独立的8位计数器TL0和TH0 ,T1处于方式3时停止计数。上午3时45分21秒,单片机应用技术课件制作组,4.2.4 定时计数器应用举例,初始化应完成的工作如下,(1)对TMOD赋值,以确定T0和T1的工作方式; (2)计算初值,并将其写入TH0、TL0或TH1、TL1; (3)中断方式时,则对IE赋值,开放中断; (4)使TR0或TR1置位,启动定时/计数器开始定时或计数。上午3时45分21秒,单片机应用技术课件制作组,1 方式0的应用,【例4-4】选用T1工作方式0,采用查询方式编程实现由P1.2输出周期为1 ms的方波,设单片机晶振频率为 12 MHz。,初值的计算P1.2输出周期为1 ms宽的方波,只要每隔500s取反一次即可得到1 ms宽的方波。选用T1定时500s。设X0时间经初值,其值为 X0213-fosct/128192-12500/121E0CH,初值的装入13位计数器低8位TL1只使用了5位,其余码均计入高8位TH1 的初值,则 T1 的初值调整为TH10F0H,TL10CH。,初始化TMOD初始化TMOD00000000B00H。TCON初始化启动TR11。上午3时45分21秒,单片机应用技术课件制作组,1 方式0的应用,include sbit P1_2 P12; void mainTMOD 0 x00;TR1 1;for ; ; TH1 0 xF0;TL1 0 x0C;dowhileTF1 0;P1_2 P1_2;TF1 0;上午3时45分21秒,单片机应用技术课件制作组,2 方式1应用,【例4-5】用定时器1产生一个50 Hz的方波,由P1.2输出,仍用程序查询方式, 12 MHz。,解 方波周期 T 1/500.02 s20 ms,用T1定10 ms,计数初值X1为 X1216-12101000/1265536-1000055536D8F0H上午3时45分21秒,单片机应用技术课件制作组,2 方式1应用,include sbit P1_2 P12;void mainTMOD 0 x10;TR1 1;for ; ; TH1 0 xD8;TL1 0 xF0;dowhileTF1 0;P1_2 P1_2;TF1 0;上午3时45分21秒,单片机应用技术课件制作组,2 方式1应用,【例4-6】请采用中断方式利用定时/计数器0在P1.0引脚上产生周期为2s、占空比为50的方波信号程序,fosc 6MHz。,解P1.0输出占空比为50的方波信号,只要每隔1 s取反一次即可得到,但采用方式1,最大定时131 ms,无法满足要求。 解决办法先定时100 ms,采用变量记录定时中断的次数,次数每变化10次对P1.0取反一次也可实现上述要求。上午3时45分21秒,单片机应用技术课件制作组,2 方式1应用,(1)主程序主要包括以下内容 T0工作方式的设置; 定时器初值的设置; 中断管理,开总中断和开定时器0中断; 启动定时器0; 设置软件计数器初值。 判断软件计数器是否为0,为0对P1.0取反,并恢复其初值,不为0中断返回。 (2)中断服务程序包括以下内容 恢复T0初值; 软件计数器减1。上午3时45分21秒,单片机应用技术课件制作组,2 方式1应用,include define T_value unsigned char0 x14 T周期值define T1_value unsigned char0 x0A T周期中高电平周期T1define TH0_value unsigned char0 x3C 定时器T0计数值(高)define TL0_value unsigned char0 xB0 定时器T0计数值(低)sbit P1_0 P10;unsigned char T_Count; 延时次数void int_tim0 interrupt 1TH0 TH0_value;TL0 TL0_value;T_Count;上午3时45分21秒,单片机应用技术课件制作组,2 方式1应用,void main unsigned char Tx;P1_0 0;TMOD 0 x01;TH0 TH0_value;TL0 TL0_value;TR0 1;ET0 1;EA 1;T_Count T1_value;Tx T1_value;while1 ifT_Count 0 P1_0 P1_0;Tx T_value - Tx;T_Count Tx; 上午3时45分21秒,单片机应用技术课件制作组,2 方式1应用,【例4 -7】利用门控位GATE进行脉冲宽度测量。 解 当GATE1时,定时器的运行同时受到TR0(TR1)和( )端控制,当二者同时为 1时,T0(T1)启动;TR0(TR1) 0时,T0(T1)停止计数。这样可利用 ( )端检测脉冲信号的上升、下降沿,通过启停定时器,达到测量脉冲宽度的目的,测量方法示意图如图4 -11所示。T0对脉冲高电平计时,T1对低电平计时。T0、T1设为门控,定时器采用工作方式1。T0计数值存30H及31H单元,T1计数值存32H及33H单元。上午3时45分21秒,单片机应用技术课件制作组,2 方式1应用,include sbit WAI1P32; sbit WAI2P33; void main TMOD 0 x99;TH1 0 x00;TL1 0 x00;TH0 0 x00;TL0 0 x00;While1 ifWAI11; TR01; TR10;else TR00;ifWAI21; TR11; TR00;else TR10; 上午3时45分21秒,单片机应用技术课件制作组,3 方式2 应用,当方式0、方式1用于循环重复定时、计数时,每次计数满溢出,寄存器全部为0,第二次计数还得重新装入计数初值。这样编程麻烦,而且影响定时时间精度,而方式2解决了这种缺陷。方式2是能自动重装计数初值的8位计数器。方式2中把16位的计数器拆成两个8位计数器,低8位作计数器用,高8位用以保存计数初值。当低8位计数产生溢出时,将TF0或TF1位置1,同时又将保存在高8位的计数初值重新自动装入低8位计数器中,又继续计数,循环往复不止。上午3时45分21秒,单片机应用技术课件制作组,3 方式2 应用,【例4-8】用定时器1,方式2计数,要求每计满100次,将P1.2端取反。,解 T1工作于计数方式,外部计数脉冲由T1(P3.5)引脚引入,每来一个由1至0的跳变,计数器加1,由程序查询TF1的状态。计数初值X1为 TH1TL19CH,TMOD60H。,上午3时45分21秒,单片机应用技术课件制作组,3 方式2 应用,include sbit P1_2 P12; void main TMOD 0 x60; T1方式2,计数方式TH1 0 x9C; T1计数初值TL1 0 x9C;TR1 1; 启动T1 while1 whileTF1 0; TF1 1转P1_2 P1_2; P1.2取反输出 TF1 0;,上午3时45分21秒,单片机应用技术课件制作组【例4-9】某用户系统中已使用了两个外部中断,并置定时器1工作于方式2,作串行口波特率发生器用。现要求再增加一个外部中断源并由P1.2输出一个5 kHz的方波。 12 MHz。,4 方式3 应用,解 为了不增加其他硬件开销,可设置T0工作于方式3计数方式,把T0的引脚作附加的外部中断输入端,TL0的计数初值为FFH,当检测到T0引脚由1至0的负跳变时,TL0立即产生溢出,申请中断,相当于边沿触发的外部中断源。上午3时45分21秒,单片机应用技术课件制作组T0在方式3下 TL0作计数器用,TL0的计数初值为FFH; TH0可用作8位的定时器,定时控制P1.0输出的5kHz方波信号。 TH0的计数初值为X0,因为P1.0的方波频率为5 kHz,故周期 T 1/5 kHz0.2 ms200s 用TH0定时100sX0256-10012/12156,4 方式3 应用上午3时45分21秒,单片机应用技术课件制作组include sbit P1_2 P12; void main TMOD 0 x27; T0方式3,计数;T1方式2,定时TH0 0 x9C; TL0计数初值, TH0定时初值 TL0 0 xFF;TH1data1; data是根据波特率要求设置的常数TH1data2;TCON0 x55; 外部中断0、1边沿触发,启动T0、T1IE0 x9f; 开放全部中断 void int_tim0 interrupt 1 TH0 0 x9C; P1_2 P1_2;,

你可能感兴趣的:(四川交通信号灯,c语言,技术支持)