《单片机应用技术(第2版)》课件 项目5 单片机定时与中断系统_第1页
《单片机应用技术(第2版)》课件 项目5 单片机定时与中断系统_第2页
《单片机应用技术(第2版)》课件 项目5 单片机定时与中断系统_第3页
《单片机应用技术(第2版)》课件 项目5 单片机定时与中断系统_第4页
《单片机应用技术(第2版)》课件 项目5 单片机定时与中断系统_第5页
已阅读5页,还剩109页未读 继续免费阅读

下载本文档

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

文档简介

延时符项目5单片机定时与中断系统单片机应用技术目录项目任务5.1MCS-51的中断系统5.3中断的概述5.2MCS-51的定时/计数器5.4§5.1

项目任务【任务要求】单片机上电后,8个霓虹灯依次顺序点亮,循环显示,时间间隔1s。当按键按下后8个霓虹灯同时亮灭三次,时间间隔0.5s。中断概述延时符CPU与外部设备交换信息有:无条件传送方式;查询传送方式;中断传送方式。§5.2

中断概述CPU和外部设备是如何进行信息交换的呢?5.2中断的概述中断是指CPU在运行过程中,外部突然发生某一事件(如一个电平的变化、脉冲的发生、定时器溢出等),请求CPU迅速去处理。于是,CPU暂时终止当前的工作,去处理突然发生的事件,事件处理完成后,再回到原来被终止的地方,继续原来的工作。看书看书电话铃声接听电话CPU执行主程序A

CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);

中断请求断点中断源CPU继续执行主程序ACPU执行中断处理程序B中断响应中断返回1.中断的定义

CPU暂时中断当前的工作,去处理事件B(中断响应和中断服务);

待CPU将事件B处理完后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断。CPU执行主程序A中断请求断点中断响应中断源CPU继续执行主程序A中断返回CPU执行中断处理程序B中断源:可以引起中断的事件称为中断源(如定时器溢出等)。中断请求:由中断源向CPU发出请求中断的信号称中断请求。中断响应:CPU在满足条件下接受中断申请,终止现行程序执行转而为申请中断的对象服务称中断响应。中断服务程序:处理中断事件的程序称为中断服务程序。断点:现行程序被中断的地址称为断点。中断返回:中断服务程序结束后返回到原程序称中断返回。2.中断的组成3.MCS-51的中断源和中断标志

MCS-51单片机的中断系统由与中断有关的特殊功能寄存器、中断入口、顺序查询逻辑电路组成。MCS-51中断系统提供了5个中断源,、为外中断,T0、T1、串行口中断(RXD、TXD)为内中断。2个优先级,可实现二级中断嵌套。3.1中断源Note:全局中断允许位(EA)必须置1才能响应中断外部中断源详解External

Interrupt

Sources:

INT0

&

INT1MCUArchitecture0

外部中断0(INT0)HighPriority物理引脚P3.2中断矢量0003H控制位(TCON)IT0

/

IE0允许位(IE)EX0常用于最高优先级的紧急处理,如系统掉电检测、急停按钮或高频脉冲计数输入。1

外部中断1(INT1)Normal

Priority物理引脚P3.3中断矢量0013H控制位(TCON)IT1

/

IE1允许位(IE)EX1优先级低于外部中断0和定时器0,适用于键盘扫描、通信接口同步或辅助传感器信号采集。P3.2(INT0)P3.3(INT1)PinoutDiagram触发方式配置(TCON寄存器)低电平触发ITx

=

0CPU在每个机器周期采样,低电平保持直到中断响下降沿触发ITx

=

1检测到从高到低的跳变时置位IEx标志,响应后硬件自内部中断源

内部中断源及其向量地址分布MCS-51架构中断系统定时器/计数器中断溢出标志位TFx

触发T0:000BH T1:001BH硬件自动清除标志当定时器/计数器计满溢出时产生请求。常用于时间基准生成、脉冲宽度测量及外部事件计数。串行通信中断(UART)发送TI

或接收RI触发Vector:

0023H需软件清除标志发送完成或接收到一帧数据时产生。TI与RI共用一个中断向量,必须在中断服务程序(ISR)中查询标志位以判断是发送还是接收中断。扩展内部资源中断增强型51单片机特有包括ADC转换结束、SPI传输完成、PCA模块等。这些中断源极大地扩展了单片机的片上外设处理能力。关键考点内部中断通常由硬件自动撤销中断请求(串口除外),而电平触发的外部中断需要硬件电路配合撤销。内部结构透视Timer

&

Serial

Port

Block

Diagram中断响应机制/INTERRUPT

RESPONSE

FLOW中断请求FlagSet查询与判优Priority

Check执行ISRVectorJump中断返回RETIInstruction13MCS-51单片机中断源的中断服务程序入口地址是固定的,它们与中断源的对应关系如表所示。中断源入口地址外部中断源O0003H定时/计数器TO000BH外部中断源10013H定时/计数器T1001BH串行口中断0023HP3口的第二功能:

P3.2——INT0:外部中断0中断请求信号输入端;

P3.3——INT1:外部中断1中断请求信号输入端;

P3.4——T0:定时/计数器0外部信号输入端;

P3.5——T1:定时/计数器1外部信号输入端。

实时性与优先级控制高实时性响应51单片机中断系统具有极高的实时性,典型响应时间小于10个机器周期。这使得CPU能够迅速暂停当前任务,对突发的外部或内部事件做出即时处理,满足工业控制等场景的需求。固定优先级规则系统内部硬件查询次序决定了固定的优先级顺序:INT0>

TF0>INT1>TF1>RI/TI。该顺序确保关键事件(如外部紧急信号)优先得到服务。中断嵌套机制支持中断嵌套功能,允许高优先级中断打断正在执行的低优先级中断服务程序。处理完毕后,自动返回低优先级中断继续执行,极大地提升了系统处理复杂任务的灵活性。中断源优先级阶梯(由高到低)注:同级中断不能相互打断,高优可打断低优外部中断0(INT0)

定时器0

(TF0)

外部中断1(INT1)定时器1

(TF1)

串行口(RI/TI)可控性、灵活性与资源高效多级可控性中断系统具备精细的控制机制。通过全局中断允许位(EA)可一键控制系统总开关,同时各中断源拥有独立允许位(如EX0、ET0),允许开发者根据需求单独启用或禁用特定功能。编程灵活性尽管硬件层面的中断向量表入口地址是固定的(如INT0固定为

0003H),但软件层面的中断服务程序(ISR)内容完全可自定义编程,能够灵活适应各种复杂的业务逻辑需求。资源高效利用中断机制避免了传统轮询方式中CPU反复查询状态造成的算力浪费。它允许CPU在无事件时处理其他后台任务,仅在事件发生时响应,显著减少空闲等待,提升系统吞吐量。16单片机的中断源外部中断请求0外部中断请求1定时器/计数器0溢出中断请求定时器/计数器1溢出中断请求串行口发送/接收中断请求17中断输入管脚外部中断请求0P3.2(12脚)外部中断请求1P3.3(13脚)T/C0脉冲输入P3.4(14脚)T/C1脉冲输入P3.5(15脚)串行口发送/接收中断请求(内部)51单片机中断系统延时符19195.351单片机中断系统结构

204.中断编程1、初始化2、写中断服务子函数21定时器/计数器控制寄存器TCON

(88H,可位操作)TF1TF0IE1IT1IE0IT0D7D6D5D4D3D2D1D0触发方式选择位中断请求标志位定时计数溢出标志位22定时器/计数器控制寄存器TCONTF1TF0IE1IT1IE0IT0D7D6D5D4D3D2D1D01:有中断0:清中断中断请求标志位IE0;IE11:有中断0:清中断定时/计数溢出标志位TF0;TF1硬件自动处理IE0、IE1,置位表示有外部中断请求,中断响应后自动清零。TF0、TF1,置位表示计数溢出中断请求,中断响应后自动清零。23定时器/计数器控制寄存器TCONTF1TF0IE1IT1IE0IT0D7D6D5D4D3D2D1D0触发方式选择位IT0;IT11:下降沿0:低电平软件编程中断0低电平触发:IT0=0;中断1下降沿触发:IT1=1;TCON=0x04;while(!TF1);2424IT1=0时,INT1为低电平触发方式。当CPU检测到INT1为低电平时,置位IE1;INT1为高电平时,将IE1清0。必须注意:在电平触发方式下,CPU响应中断时,不能自动清除IE1标志。也就是说,IE1状态完全由INT1状态决定,所以,在中断返回前必须撤除INT1引脚的低电平。

IT1=1时,INT1为边沿触发方式(下降沿有效)。当连续的两个机器周期先检测到高电平后检测到低电平时,则IE1置1。在边沿触发方式下,CPU响应中断时,能由硬件自动清除IE1标志。

注意,为保证检测到负跳变,INT1的高、低电平至少应各自保持1个机器周期。252551单片机中断系统结构IE寄存器:结构与位功能IE:中断允许寄存器Interrupt

Enable

Register地址与特性地址:0xA8特性:可位寻址,方便对单个中断源进行控制。核心功能IE寄存器用于控制5个中断源和全局中断的开启或关闭。只有当全局中断使能位(EA)和相应的中断源使能位同时为1时,该中断才会被CPU响应。关键位:EAEA位是所有中断的总开关。当EA=0时,所有中断请求都被屏蔽。位号位名作用7(IE.7)EA全局中断使能位(总开关)6(IE.6)-保留位5(IE.5)ET2定时器2中断使能(仅8052)4(IE.4)ES串口中断使能3(IE.3)ET1定时器1中断使能2(IE.2)EX1外部中断1使能1(IE.1)ET0定时器0中断使能0(IE.0)EX0外部中断0使能IE寄存器:工作原理基本原理通过对IE寄存器进行位操作,可以精确控制各个中断源的使能或禁止状态。EA位:总开关EA位是全局中断使能位。当EA=1时,才允许所有中断;当EA=0时,将屏蔽所有中断请求。响应条件只有当总开关EA=1,并且对应中断源的使能位也为1时,该中断才能被CPU响应。应用举例要开启外部中断0,必须同时设置 EA=1

和 EX0=1

。中断允许逻辑示意图CPUEAEX0外部中断0ET0定时器0中断EX1外部中断1ET1定时器1中断ES串口中断28中断允许寄存器IE,用于中断的开放与禁止。

EAET2ESET1EX1ET0EX0D7D6D5D4D3D2D1D0外部中断定时器/计数器溢出中断总中断串口中断1:开中断0:关中断

编程29中断允许寄存器IEEAET2ESET1EX1ET0EX0D7D6D5D4D3D2D1D0开外部中断0EA=1;EX0=1;开外部中断1EA=1;EX1=1;IE=0x85;IP寄存器:结构与位功能IP中断优先级寄存器地址:0xB8(可位寻址)优先级规则1

=高优先级,0

=低优先级。默认所有中断均为低优先级。工作原理高优先级的中断可以打断正在执行的低优先级中断服务程序。位号76543210位名-PT2PSPT1PX1PT0PX0-作用保留定时器2优先级串口优先级定时器1优先级外中断1优先级定时器0优先级外中断0优先级保留31中断优先级寄存器IPPSPT1PX1PT0PX0D7D6D5D4D3D2D1D0外部中断优先级定时器/计数器中断优先级串口1:高0:低

编程一共有高低两个优先级MCS-51单片机有两个中断优先级,即可实现二级中断服务程序嵌套。每个中断源的中断优先级都是由中断优先级寄存器IP中的相应位的状态来控制的。IP寄存器:工作原理中断嵌套原则高优先级中断可以打断正在执行的低优先级中断服务程序。CPU会先处理高优先级中断,完成后再返回继续执行被中断的低优先级服务程序。同级中断处理同优先级请求按“自然优先级”顺序响应:外部中断0(INT0)定时器0(TF0)外部中断1(INT1)定时器1(TF1)串口中断(RI/TI)中断嵌套过程示意图高优先级低优先级低优先级中断高优先级返回主程序执行低优先级中断服务高优先级中断(打断)中断服务2.中断的嵌套中断开放优先级高34

串行口控制寄存器SCON(98H,可位操作)TIRI串行发送/接收完一帧后自动置位,请求中断,需通过指令清零。3535实战内容题目1:

分析CPU执行下列程序后,若各个中断源同时发出中断申请,是否都能得到响应?如果得到响应,其响应顺序如何?IE=0x1FIP=0x05答案:题目中,ES,ET1,EX1,ET0,EX0均为“1”,说明5个中断源都允许申请中断,但EA=0,CPU是关中断的,任何一个中断也不会响应。IE=0x8FIP=0x06

答案:题目中,EA=1,ET1,EX1,ETO,EXO均为“1”,说明4个中断源都允许申请中断,且CPU开放中断。在IP中,TO及外部中断1属于高优先级,T1及外部中断0属于低优先级。若同时发出中断申请,CPU响应顺序为:T0、外部中断1、外部中断0和T1。36中断服务子函数

标准形式void函数名(void)interruptn中断号0~3没有返回值没有参数传递进入中断函数时,ACC,B,DPH,DPL,PSW自动入栈中断函数由89s51单片机指令RETI结束中断函数返回前,所有寄存器内容出栈。任何情况下不能直接调用中断函数!37中断编程一。初始化

1.开中断(写IE)

EA=1;EX0=1;EX1=1;2.中断触发方式选择(写TCON)IT0=1;IT1=0;(1:下降沿;0:低电平)3.中断优先权选择(写IP)PX0=1;PX1=0;(0:低;1:高)38二、写中断服务子函数void函数名(void)interruptn

{

中断服务内容执行语句

}实战案例一:按键控制数码管加减-电路连接电路原理示意组件名称连接引脚对应功能独立按键K1P3.2触发外部中断0(下降沿/低电平)独立按键K2P3.3触发外部中断1(下降沿/低电平)外部中断输入(Independent

Keys)功能:数值增加按键K1P3.2(INT0)功能:数值减少按键K2P3.3(INT1)数码管显示接口(7-Segment

Display)段选信号(a-dp)连接P0端口位选信号(COM)连接P2端口INT0中断服务(加计数)P3.2下降沿INT0_ISRinterrupt

0void

INT0_ISR()

interrupt

0

{//1.软件消抖(10ms)delay_ms(10);//2.再次检测低电平if(K1

==

0)

{//3.核心业务:自增count++;//4.溢出回绕处理if(count

>

9)

count

=

0;Display(count);}}1234567891011P3.3下降沿INT1中断服务(减计数)INT1_ISRinterrupt

2void

INT1_ISR()

interrupt

2

{//1.软件消抖delay_ms(10);//2.确认按键按下if(K2

==

0)

{//3.下溢处理:0->9if(count

==

0)count

=

9;elsecount--;Display(count);}}1516171819202122232425SHARED

MEMORYaddr:

0x30volatile

unsigned

char

count;使用volatile关键字防止编译器优化,确保每次读取都访问内存。8countPROJECT

01

isr_handler.c按键控制数码管加减

|

中断服务函数编写MCU

MODELAT89C52CLOCK11.0592

MHzINTERRUPTSEnabled实战案例02MCU-51-PROJECT按键触发LED闪烁

|

功能逻辑描述INT0中断系统应用01TRIGGER中断触发外部中断0

(INT0/P3.2)检测到下降沿信号,CPU暂停主程序。02RESPONSE执行动作进入中断服务程序,控制P1端口8个LED灯同步翻转状态。03TIMING循环控制执行3次亮灭循环,每次亮/灭各维持300ms。LED输出时序波形(P1.x)高电平(亮)低电平(灭)单周期:600ms循环次数:3次总耗时:~1.8s01300ms(亮)300ms(灭)Cycle

1Cycle

2关键引脚配置引脚功能定义I/OP3.2INT0中断输入INOUTP1.0-7

LED驱动端口注:P3.2需外接上拉电阻以确保电平稳定硬件连接示意实战案例二:按键触发LED闪烁-代码实现led_control.cvoid

LED_Blink()

{for(char

i=0;

i<3;

i++)

{P1=0x00;

//LED全亮(低电平)

delay_ms(300);P1=0xFF;

//LED全灭(高电平)

delay_ms(300);}}//外部中断0服务程序void

INT0_ISR()interrupt

0

{LED_Blink();//调用闪烁逻辑}12345678910111213循环控制逻辑使用for(i=0;

i<3;

i++)

结构,精准控制LED闪烁次数为3次。这是实现“特定次数动作”的标准写法。电平翻转与延时通过P1=0x00/0xFF切换全亮/全灭状态,配合

delay_ms(300),产生人眼清晰可辨的300ms亮灭周期。中断响应机制interrupt

0绑定外部中断0。当按键按下触发中断时,CPU自动跳转执行此函数,调用封装好的闪烁逻辑。常见问题解决方案针对单片机开发中高频出现的硬件与软件故障分析按键抖动误触发输入异常现象与原因现象:按下一次响应多次。原因:机械按键闭合瞬间存在5-10ms的弹性接触抖动,导致中断信号多次跳变。解决方法在中断服务程序中添加软件消抖逻辑。例如使用

delay_ms(10)

延时,之后再次判断按键状态是否稳定。中断程序未响应逻辑错误现象与原因现象:按键按下无任何反应。原因:中断使能寄存器配置遗漏,或中断服务函数的中断号定义错误。解决方法检查寄存器:确保EA=1

(总开关)且EX0=1

(源开关);核对INT0对应interrupt

0

。数码管显示异常显示故障现象与原因现象:乱码、残影或完全不亮。原因:位选信号与段选信号冲突,或者中断处理时间过长影响了动态扫描时序。解决方法确保位选正确使能;中断代码务必精简,严禁在中断内执行长延时循环,以免阻塞显示扫描。调试技巧:若无法确定是软件逻辑还是硬件故障,建议先编写最简单的“点灯程序”测试按键电路的物理连通性。开发注意事项嵌入式系统中断服务程序(ISR)编写规范与最佳实践ISR简短高效中断服务函数应尽可能短小精悍。只处理最紧急的标志位设置或数据读取,将耗时的逻辑处理留给主循环(MainLoop)执行,以维持系统的实时响应能力。避免复杂调用严禁在中断中调用printf

、malloc

等不可重入或耗时长的函数。这些操作可能导致堆栈溢出或系统崩溃,是开发大忌。全局变量volatile共享变量(如count

)必须声明为

volatile。这能防止编译器过度优化,确保每次读取都直接访问内存,保证数据一致性。Page

0551单片机定时计数器延时符4646任务

可控霓虹灯控制【任务目的】

通过采用1个按键输入的可控霓虹灯系统,了解单片机中断系统的结构及与中断有关的寄存器、中断开放与禁止,以及中断程序的编写技巧。【任务要求】通过按键改变霓虹灯的显示方式。要求正常情况下8个霓虹灯依次顺序点亮,循环显示,时间间隔1s。按键按下后8个霓虹灯同时亮灭三次,时间间隔0.5s。用T1的工作方式1编制1s延时程序,按键动作采用外部中断INT0实现。4747图3-1简单流水灯控制电路原理图第一部分项目成果展示48任务分析

近年来,随着社会经济的发展,人们的生活也越来越丰富多彩,变化众多的彩灯也被大量应用在广告工程、花车、彩车、花灯、花船制作、亮化工程、大型装饰、装修工程等领域。但如何设计,怎样更为方便、实用,怎样才会具有更强移植性一直是众多设计者追求的目标。

电路中增加了一个按键,该键与单片机的外部中断INT0的中断输入引脚连接,当按键按下时,在INT0引脚产生一个下降沿,向单片机CPU申请中断。

用T1的工作方式1编制1s延时程序,假定系统采用12MHz晶振,T1的工作方式1定时时间为50ms,再循环20次即可定时到1s。

495.4定时/计数概述89C51单片机中有两个计数器,分别称之为T0和T1,这两个计数器分别是由两个8位的RAM单元组成的,即每个计数器最多是16位的计数器,最大的计数量是65536。1.定时计数的次数和时间之间十分相关。

计数次数*额定时间=定时时间可见,单片机中的定时器和计数器是同一事物,只不过计数器是记录的外界的事情,而定时器则是由单片机提供一个非常稳定的计数源。

502定时/计数器的实质定时/计数器的实质是一个X位的寄存器。完成定时或者计数功能时都必须向其中输入计数脉冲。如果一个12MHz的晶振,它提供给计数器的脉冲时间间隔是多少呢?——1us。可见,计数脉冲的间隔与晶振有关,6MHz的晶振,计数脉冲的间隔是2微秒。3定时/计数器的溢出让我们再来看水滴的例子,当水不断落下,盆中的水不断变满,最终有一滴水使得盆中的水满了。这时如果再有一滴水落下,就会发生什么现象?——水会漫出来,用个术语来讲就是“溢出”。一旦TF0由0变成1,就是产生了变化,产生了变化就会引发事件,就象定时的时间一到,闹钟就会响一样。514定时/计数器的计算如果计数器的容量为:16位,则最大的计数值到65535。因此计数计到65536就会产生溢出。但现实生活中,经常会要求不到65536时就要发生溢出,如何解决?比如:一个空的盆要1万滴水滴进去才会满,我在开始滴水之前就先放入一勺水,还需要1万滴嘛?——采用预置数的方法,若要计数100,那我就先放进65436,再来100个脉冲,不就到了65536了吗?定时也是如此,每个脉冲是1微秒,则计满65536个脉冲需时65.536毫秒,但现在我只要10毫秒就可以了,怎么办?——10个毫秒为10000个微秒,所以,只要在计数器里面放进55536就可以了。51系列单片机定时/计数器概述

89C51单片机中有2个16位的定时器/计数器,一般用TO表示定时器/计数器0,T1表示定时器/计数器1。定时器/计数器有定时和计数两种功能,其内部实质上是加法计数器。它们都有定时和事件计数的功能,可用于定时控制、延时、对外部事件计数和检测等场合。振荡器12分频TL1T1引脚控制TH1TF15351单片机TC的结构单片机中与定时器有关的特殊功能寄存器有:TMOD、TCON、TH0、TL0、TH1和TL1。

TMOD是方式控制寄存器,其中两位控制两个定时器/计数器的工作方式。TH0、TL0、TH1、TL1是时间常数寄存器,用来存放定时或计数的初值。TCON是控制寄存器,它控制定时器/计数器的启动和关闭。定时器结构如图所示。541.51单片机TC工作原理

1.1定时器原理

当定时器/计数器设置为定时工作方式时,该加法计数器对片内机器周期脉冲计数,计数的输入信号是内部时钟脉冲,即每过一个机器周期,计数器加1,直到溢出。因每个机器周期等于12个振荡周期,所以计数速率为振荡频率的1/12。由于定时器从初值开始加l计数直到溢出所需的时间是固定的,所以称为定时方式。显然定时器的定时时间与系统的振荡频率有关。

1.2计数器原理

定时器/计数器设置为计数工作方式时,通过引脚TO(P3.4)和T1(P3.5)对外部信号脉冲计数,在每个机器周期的S5P2期间采样引脚的输入电平。若前一个机器周期采样值为“1”,下一个机器周期采样值为“0”,内部加法计数器的值加1。T/C0脉冲输入--P3.4(14脚)T/C1脉冲输入--P3.5(15脚)551.3定时器的优点

不论是定时工作方式还是计数工作方式,定时器在对内部时钟或外部脉冲计数时,都不占用CPU时间,启动定时器/计数器后,它们就自动工作,除非定时器/计数器定时时间到或计数次数到,才可能中断CPU的当前操作,请求CPU处理,处理完成后马上回到断点处继续原来的程序,而不是像软件延时那样,始终占用CPU的时间,不能做其他处理。1.4[TMOD]—工作模式寄存器

TMOD寄存器用来设置TO和T1的工作模式、定时/计数方式以及其他引脚信号对定时器/计数器的影响等,其字节地址为89H,格式如图所示。●GATE——门控位。GATE=0,允许软件控制位TR0或TR1启动定时/计数器工作;GATE=1,允许外部中断引脚INT0或INT1启动定时/计数器工作。

C/T——定时/计数器方式选择。C/T=0为定时器方式;

C/T=1为计数器方式。5858●

M1M0:工作方式选择位。定时/计数器四种工作方式的选择由M1M0的值决定,见表所示:M1M0工作方式功能00方式013位定时/计数器01方式116位定时/计数器10方式28位自动重装载定时/计数器11方式3TO:分成两个8位定时/计数器T1:停止计数

注意:TMOD不能位寻址,只能用字节指令设置定时/计数器的工作方式。CPU复位时,TMOD所有位清0。59Gate位控制方法GATE=0TR1=1,开始计数TR1=0,停止计数。GATE=1TR1=1,INT1=1,开始计数INT1=0

,停止计数。60TF1TR1TF0TR0D7D6D5D4D3D2D1D01.5

控制寄存器TCON(88H,可位寻址)只占用88H中的高4位用于控制定时器计数器的启、停和设置溢出。计数0溢出标志位启动计数0启动计数1计数1溢出标志位61TCON的低4位用于控制外部中断,在中断方面作介绍,不再重述。TCON的高4位用于控制定时/计数器TO、T1的运行。其格式如下:●

TF1(TCON.7)——定时/计数器T1溢出中断请求标志位。定时/计数器T1计数溢出时由硬件自动置TF1=1。若中断开放,CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,采用查询方式时,TF1可用作查询测试标志。TF1也可用程序置位或清0。这就是说,定时/计数器T1的中断请求还能用程序产生,这称为软件中断。

62●

TR1(TCON.6)——定时/计数器T1运行控制位。

TR1置l时,定时/计数器T1开始工作;TR1置0时,定时/计数器T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的起停。●

TFO(TCON.5)——定时/计数器TO溢出中断请求标志位,其功能与TF1相同。●

TR0(TCON.4)——定时/计数器T0运行控制位,其功能与TR1相同启动T/C0计数:TR0=1;停止T/C0计数:TR0=0;启动T/C1计数:TR1=1;停止T/C1计数:TR1=0;632.

TC工作模式(方式)概述定时器/计数器的工作模式及应用通过没置TMOD中的C/T位,可以选择定时器/计数器工作在定时方式或计数方式。

设置M1和MO,可以选择4种工作模式:方式0、方式1、方式2和方式3。

TO与T1的方式0、方式1和方式2相同;在方式3时,两个定时器的工作模式不同。64模式0(方式0)与应用1说明

若把M1,M0设置为00,则定时器工作于方式0。方式0为13位的计器,由TL0的低5位和TH0的8位组成。TL0低5位计数溢出时向TH0进位,TH0计数溢出时,置标志位TF0为“1”,同时申请定时器T0中断。进人中断后该位自动被硬件清0,也可用软件查询TF0。方式0初值计算麻烦,较少采用。2初值计算

当C/T=0时,多路开关连接振荡器的12分频器输出,T0对机器周期脉冲计数,这是定时工作方式。其定时时间为:定时时间t=(213-T0的初值)×机器周期=(213-T0的初值)×时钟周期×1265

当C/T=1时,多路开关与引脚TO(P3.4)相连,外部计数脉冲由引脚TO(P3.4)输入,当外部信号电平发生“1”到“0”的跳变时,计数器加1,这时,T0成为外部计数器。其计数值为:计数次数=213-T0的初值3门控位的影响

当GATE=0时,允许软件控制位TR0或TR1启动定时器。GATE信号经过“非”门后,输出变为“1”。由于该信号和引脚INT0输入信号同为“或”门输入,所以“或”门的输出也变为“l”。作为计数开关的“与”门只由TR0来控制。若TR0置1,接通控制开关,启动定时器T0工作,允许TO在初值上加法计数,直到溢出。溢出时,TH0、TL0寄存器复位,TF0置1,并可申请中断。若不重装T0的初值,则T0的初值以0开始计数。若TRO=0,则关断控制开关,停止计数。6666当GATE=1,且TR0=1时,或门、与门全部打开,定时器/计数器打开或关断受外部INT0脚信号的影响,INT0引脚输入高电平时,允许计数,否则停止计数。常用这种操作方式来测量外部INT0引脚信号的脉冲宽度。4应用实例

设f=12MHz,定时时间t=2ms,求定时器TO的初值及THO、TL0的值。

●方法1:

TO的初值=213-定时时间t×时钟频率/12=213-2×10-3×12×106/12=8192-2000=6192=1830H=1100000110000B

将TO的初值低5位送TLO,高8位送THO,则THO=OC1H,TL0=10H。

●方法2:

TL0=(8192-2000)%32取余数=16=10H。

TH0=(8192-2000)/32取商=193=OC1H。67定时器编程查询工作方式中断工作方式定时器编程随时查看定时时间到否定时时间到就执行…68定时器编程(查询方式)一。初始化1.设定T/C工作方式(写TMOD,不可位操作)

TMOD=0x01;2.装载预置数(写THx,TLx)

TH0=;TL0=;TH1=;TL1=;3.启动定时器

TR0=1;TR1=1;

69定时器编程(查询方式)二。应用

1.查询TCON的TF1,TF0→1

是1则表示定时时间到

2.处理

3.清溢出标志TF1,TF0→0

TF0=0;TF1=0;4.重新预置数

70用T1、工作方式0实现1秒延时函数,晶振频率为12MHz。方式0采用13位计数器,其最大定时时间为:8192×1

s=8.192ms,因此,定时时间不可能象任务7中一样选择50ms,可选择定时时间为5ms,再循环200次。定时时间为5ms,则计数值为5ms/1

s=5000,T1的初值为:

X=M

计数值=8192

5000=3192=C78H=0110001111000B13位计数器中TL1的高3位未用,填写0,TH1占高8位,所以,X的实际填写值应为:X=0110001100011000B=6318H定时器编程例(查询方式)71用T1方式0实现任务7中1秒延时函数如下:voiddelay1s(){unsignedchari;00010000

TMOD=0x00; //置T1为工作方式1

for(i=0;i<200;i++){ //设置200次循环次数

TH1=(8192-5000)/32; //设置定时器初值

TL1=(8192-5000)%32;

TR1=1; //启动T1

while(!TF1);//查询计数是否溢出,//即定时5ms时间到,TF1=1

TF1=0; //5ms定时时间到,将定时器溢出//标志位TF1清零

}}72一、初始化

1.设定T/C工作方式(写TMOD,不可位操作)

TMOD=0x;2.装载预置数(写THx,TLx)TH0=;TL0=;TH1=;TL1=;3.开中断(写IE)

EA=1;ET0=1;ET1=1;4.设置中断优先级(只有一个中断可以省略此步骤)5.启动定时器

TR0=1;TR1=1;定时器编程(中断方式)73二、写中断服务子函数Void函数名(void)interruptn{

关定时器

定时处理内容

重新预置计数初值启动定时器

}中断号1;374定时器编程实例程序功能:在P1.0脚上输出周期为2ms的方波每定时1ms进入中断子程序在中断子程序中对P1.0取反fosc=12MHz计数值=100075#include<reg51.h>sbitP1_0=P1^0;voidmain(void){TMOD=0x00;P1_0=1;TH0=(8192-1000)/32;TL0=(8192-1000)%32;EA=1;ET0=1;TR0=1;do{;}while(1);}主程序76voidt0(void)interrupt1{TR0=0;P0_1=~P0_1;TL0=(8192-1000)/32;TH0=(8192-1000)%32;TR0=1;}中断子程序77模式1(方式1)与应用1结构框图TL0(8)TH0(8)M1=0M0=1由TL0的低8位和TH0的高8位组成16位计数器最大计数值216=65536方式1与方式0的差异仅在于方式1的计数器是16位的,方式0的计数器是13位的782说明

若M1、M0设置为01,定时器工作于方式1。方式1为16位定时器/计数器。由TL0的低8位和THO的8位组成;TL0低8位计数溢出时向TH0进位,TH0计数溢出时,置标志位TF0为“1”,同时申请定时器T0中断。3初值计算

当C/T=0时,工作于定时工作方式。其定时时间为:定时时间t=(216-T0的初值)×机器周期=(216-TO的初值)×时钟周期×12

当C/T=1时,工作于计数方式。其计数值为:计数次数=216-T0的初值794应用实例

题目1:利用定时器T1计数1000次,求T1的初值及TH1和TL1。

T1的初值=65536-1000=64536=FC18H则:THl1=0FCH。TL1=18H

题目2:晶振频率为12MHz,利用定时器T1在方式1下,由P1.0产生50Hz的方波。●

分析:当方波频率为50Hz时,周期为20ms,因为要输出的是方波,所以高、低电平定时时间均为10ms;P1.0定时输出10ms的高电平,转换输出电平再定时10ms,循环不止。●

TL1=(65536-10000)%256取余数=0F0H●

TH1=(65536-10000)/256取余数=0D8H80实战演练程序功能:在P1.0脚上输出周期为2ms的方波每定时1msP1.0取反查询定时时间到(TF0=1)P1.0取反软件清除TF0Fosc=12MHz计数值=100081#include<reg51.h>sbitP1_0=P1^0;voidmain(void){TMOD=0x01;TR0=1;for(;;){TH0=(65536-1000)/256;TL0=(65536-1000)%256;do{;}while(!TF0);P1_0=~P1_0;TF0=0;}}程序这种方法有什么缺点呢?82程序功能:P0_1输出周期为8秒的方波难点:16位12M最大定时65536*12/(12*106)=65.5ms实现方法:每40ms中断一次,每次n++当n=100时,得到4秒的定时,此时改变P0_1的输出状态清n=0,开始新的定时定时常数定时t=40ms;fosc=12M;预置数=40000实战演练83

voidmain(){P0_1=1;TMOD=0x01;TL0=(65536-40000)/256;TH0=(65536-40000)%256;PT0=1;EA=1;ET0=1;TR0=1;for(;;){}}跟前面一个程序比较有什么优点呢84voidt_1(void)interrupt1using1{TR0=0;n++;

if(n==100){P0_1=~P0_1;n=0;}TL0=(65536-40000)/256;TH0=(65536-40000)%256;TR0=1;}中断子程序85模式2(方式2)与应用1结构框图工作状态:自动重装计数初值的8位计数方式。TL(8)TH(8)M1=1M0=0最大计数值:28=256TL1为8位计数器,TH1为8位计数初值寄存器862说明

若M1、M0设置为10,定时器工作于方式2。方式2能自动重装初值的8位定时/计数器,这种方式可以避免在程序中重装时间常数,选用于精确定时场合。16位计数器被拆分成两个,TLx用作8位计数器,THx用来保存初值。在程序初始化时,THx,TLx由软件赋相同的初值,一旦TLx计数溢出,便置位TFx,并将THx中的初值自动装入TLx,继续计数时,初值不变。这种工作方式省去软件中重装初值的指令,并可产生相当精确的定时时间,特别适合作为串行口波特率发生器。3初值计算

当C/T=0时,工作于定时工作方式。其定时时间为:定时时间t=(28-T1的初值)×机器周期=(28-T1的初值)×时钟周期×12

当C/T=1时,工作于计数方式。其计数值为:计数次数=28-T1的初值87用T1、工作方式2实现1秒延时,晶振频率为12MHz。因工作方式2是8位计数器,其最大定时时间为:256×1

s=256

s,为实现1秒延时,可选择定时时间为250

s,再循环4000次。定时时间选定后,可确定计数值为250,则T1的初值为:X=M

计数值=256

250=6=6H。采用T1方式2工作,因此,TMOD=0x20。定时器编程例(查询方式)88用定时器工作方式2实现的1秒延时函数如下:voiddelay1s(){unsignedinti; //i取值范围为0~4000,//因此不能定义成unsignedcharTMOD=0x20; //设置T1为方式2TH1=6; //设置定时器初值,放在for循环之外

TL1=6;for(i=0;i<4000;i++){ //设置4000次循环次数

TR1=1; //启动T1

while(!TF1);//查询计数是否溢出,//即定时250

s时间到,TF1=1

TF1=0; //250

s定时时间到,//将定时器溢出标志位TF1清零

}}89模式3(方式3)与应用1结构框图902说明

方式3只适用于TO,若设置T0为方式3时,则T1仍可被设置为0、1和2,但T1一般作为计数器计满数后溢出信息送到串口,即作为串口的波特率发生器。

当M1MO设置为11时,TO工作在方式3。TL0和TH0被分成为两个相互独立的8位计数器。

TL0使用原T0的控制位、引脚和中断源,即C/T、GATE、TR0、TFO、T0(P3.4)引脚和INT0(P3.2)引脚。TL0可以作为8位定时器或计数器使用,TL0计数溢出时置位TF0=1,每次溢出后TL0计数初值须重装。

TH0只能作为一个8位内部定时器使用,并使用T1的状态控制位TR1和TF1。其关闭、启动受TR1控制。当TR1为“1”时,允许THO计数;当THO计数溢出时,置溢出标志TF1为“1”。方式3为定时器T0增加了一个8位定时器。91913最大定时时间的计算

晶体为6MHz时,则机器周期=2us;而定时时间t=(2n-初值)×机器周期,若求最大值,则初值该为:0。

方式0时,n=13,最长定时时间为8192×2us=16ms;

方式1时,n=16,最长定时时间为65536×2us=131ms;

方式2时,n=8,最长定时时19为256×2us=512us。

如果为24MHz时,情况又如何?92预置数总结预置数=满计数值-所需计数值方式0:预置数=8192-计数值方式1:预置数=65536-计数值方式2:预置数=256-计数值方式3:预置数=256-计数值93分类实战演练

情况1:按5次键LED闪烁一次(亮50ms)按键的下跳变由T/C0输入计数工作在查询方式①查TL0计数值是否为594voidmain(){TMOD=0x06;TH0=0;TL0=0;TR0=1;while(1){if(TL0==5){TR0=0;TL0=0;TH0=0;P1_0=1;delay(50);P1_0=0;delay(50);TR0=1;}}}主程序95程序功能按5次键LED闪烁一次按键的下跳变由TC0输入计数工作在查询方式②预置计数值596

voidmain(){TMOD=0x06;TH0=251;TL0=251;TR0=1;while(1){if(TF0==1){TR0=0;P1_0=1;delay(50);P1_0=0;delay(50);TR0=1;TF0=0}}}主程序97程序功能按5次键LED闪烁一次按键的下跳变由T/C0输入计数工作在中断方式98voidmain(){TMOD=0x06;TH0=0xFB;TL0=0xFB;EA=1;ET0=1;PT0=1;TR0=1;while(1){;}}主程序99voidat_1(void)interrupt1

{TR0=0;P1_0=1;delay(50);P1_0=0;delay(50);TR0=1;}中断子程序与方式0、方式1的区别是什么100voidmain(){TMOD=0x05;TH0=(65536-5)/256;TL0=(65536-5)%256;EA=1;ET0=1;

温馨提示

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

评论

0/150

提交评论