AT89S51单片机的定时器_第1页
AT89S51单片机的定时器_第2页
AT89S51单片机的定时器_第3页
AT89S51单片机的定时器_第4页
AT89S51单片机的定时器_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

AT89S51单片机的定时器从硬件结构到编程实战·嵌入式系统核心外设深度解析Contents课程目录AT89S51单片机的定时器——从硬件原理到C语言实战的完整学习路径。01定时器基础概念与系统定位02定时器硬件结构与引脚资源03定时器与计数器工作原理04核心寄存器配置详解05C语言编程实战与典型应用CHAPTER01定时器基础概念与系统定位理解定时/计数器的本质、分类及其在单片机系统中的核心地位AT89S51Timer/Counter定时/计数器的本质定义定时/计数器从电路本质上是一个脉冲计数器,其功能区分取决于计数脉冲来源:内部机器周期脉冲实现定时功能,外部引脚输入脉冲实现计数功能,二者共用同一硬件模块。定时功能计数脉冲来自单片机内部机器周期,由于每个机器周期时间固定,通过统计脉冲数即可精确计算经过的时间。定时模式适用于延时控制、波特率生成等场景。机器周期驱动计数功能计数脉冲来自外部引脚输入信号,用于统计外部事件发生次数,如产品流水线计数、转速检测、频率测量等场景。当引脚检测到有效跳变时计数器加1。P3.4/P3.5引脚本质统一定时器与计数器共用同一硬件电路,仅通过配置寄存器选择脉冲来源,实现功能切换而非两套独立模块。这种设计节省芯片面积,提高资源利用率。同一硬件模块TIMERRESOURCESAT89S51定时器资源概况AT89S51内部集成T0和T1两个独立的可编程16位定时/计数器,52子系列额外配备T2用作波特率发生器,三者共同构成单片机时间控制与事件统计的外设体系。T0(定时器0)16位可编程定时/计数器,可独立配置为定时器或计数器模式,拥有独立的TH0、TL0数据寄存器TH0/TL0T1(定时器1)与T0结构对称的16位定时/计数器,拥有独立的TH1、TL1数据寄存器,常用于串行通信波特率发生TH1/TL1T2(仅52子系列)16位定时/计数器,功能与T0/T1差异较大,最常用功能是作为串行口波特率发生器,AT89S51不包含此模块52OnlyCOREAPPLICATIONS定时器在嵌入式系统中的典型应用定时器是单片机系统中应用最广泛的外设之一,从LED闪烁、PWM信号生成到串口波特率产生、数据定时采集,几乎所有需要精确时间控制的场景都依赖定时器而非软件延时。01周期性任务调度:替代软件延时实现LED闪烁、传感器定时采集等周期任务,释放CPU资源使其可并行处理其他逻辑02PWM信号生成:通过定时器精确控制脉冲宽度和频率,驱动电机调速、舵机角度控制、LED亮度调节等模拟量输出03通信波特率基准:定时器为UART串口通信提供精准的波特率时钟,确保数据收发双方速率同步,避免通信误码04时间基准与测量:构建电子钟时间基准、测量外部脉冲宽度与频率、实现超时检测等时间相关的系统功能单片机开发板LED灯实验场景AT89S51·定时器与计数器软件延时vs硬件定时器软件延时通过空循环消耗CPU时间,精度差且效率低;硬件定时器独立于CPU工作,计数精准且不占用CPU资源,通过中断机制实现异步通知,是嵌入式系统时间控制的首选方案。软件延时的局限性精度受编译器优化、中断嵌套等因素影响,实际延时时间与预期存在偏差,无法满足通信协议等高精度时序要求精度偏差延时期间CPU被空循环完全占用,无法并行处理其他任务,系统整体效率低下,不适合多任务并发场景CPU阻塞延时代码与具体硬件平台强绑定,移植到不同晶振频率的系统时需重新计算循环次数,可维护性差移植困难硬件定时器的优势由独立硬件电路计数,定时精度仅取决于晶振频率,不受软件执行流程影响,可达微秒级精度微秒级精度定时器在后台独立运行,CPU可并行执行主程序逻辑,溢出时通过中断通知CPU,实现高效异步时间管理中断异步通知通过配置寄存器即可调整定时参数,代码与硬件解耦,同一套定时逻辑可适配多种晶振配置,易于维护扩展配置灵活CHAPTER02定时器硬件结构与引脚资源拆解定时/计数器的内部寄存器组成、外部引脚接口与数据通路ExternalPinInterface定时器外部引脚接口AT89S51定时器通过P3.4(T0)和P3.5(T1)两个复用引脚接收外部计数脉冲,引脚在普通I/O与计数输入功能间自动切换,外部脉冲仅需产生下降沿即可触发计数。T0输入引脚定时器0的外部计数脉冲输入端,当配置为计数器模式时自动启用,接收外部事件的下降沿信号。P3.4T1输入引脚定时器1的外部计数脉冲输入端,功能与T0对称,适用于独立的外部事件计数场景。P3.5引脚复用机制P3.4/P3.5兼具普通I/O口和计数输入双重功能,由TMOD寄存器中的C/T位自动切换,无需额外硬件配置。C/T位REGISTERARCHITECTURE定时器内部寄存器组成AT89S51定时器由四个8位数据寄存器(TH0/TL0、TH1/TL1)和两个控制寄存器(TMOD、TCON)构成,数据寄存器组合为16位计数器存储计数值,控制寄存器决定工作模式与运行状态。TH0与TL0定时器0的高8位和低8位数据寄存器,组合成16位计数器,存储当前计数值,复位后初始化为0x00。8-bit×2→16-bitTH1与TL1定时器1的高8位和低8位数据寄存器,与T0结构对称,各自独立存储T1的计数值。T0对称结构TMOD寄存器工作方式控制寄存器,高4位控制T1、低4位控制T0,决定定时器的工作模式和定时/计数选择。高4位T1·低4位T0TCON寄存器定时器控制寄存器,包含TR0/TR1运行控制位和TF0/TF1溢出标志位,控制定时器启停与中断触发。TR·TF控制位TIMINGSYSTEMCPU时序体系:四个核心周期AT89S51的时序体系由振荡周期、状态周期、机器周期和指令周期四层构成,其中机器周期(12个振荡周期)是定时器计数的基本单位,12MHz晶振下机器周期恰好为1μs,便于时间计算。01振荡周期:晶振的一个完整振动周期,是最小时间单位83.3ns02状态周期(S周期):由2个振荡周期构成,也称时钟周期166.7ns03机器周期:由6个状态周期(12个振荡周期)构成,定时器计数的基本单位1μs04指令周期:完成一条指令所需的全部时间,通常为1~4个机器周期1–4cycles12MHz石英晶振·振荡周期≈83.3ns·机器周期=1μsCHAPTER03定时器与计数器工作原理深入理解定时模式的机器周期计数机制与计数模式的外部脉冲采样机制TIMER·PRINCIPLE定时模式工作原理定时模式通过统计内部机器周期脉冲实现精确计时,计数频率为振荡频率的1/12;12MHz晶振下每1μs计数一次,定时时间等于计数值乘以机器周期,计算公式为T=计数值×12/fosc。01脉冲来源计数脉冲来自单片机内部机器周期信号,每个机器周期产生一个计数脉冲,计数器自动加1+1/cycle02计数频率fcont=fosc×1/12,即振荡频率的十二分之一;12MHz晶振时fcont=1MHz,每微秒计数器加11MHz03定时计算定时时间=计数值×12/fosc;12MHz晶振下,计数10000次即为10msT=N×12/f04初值设定先确定目标定时时间,再反算计数初值=最大计数值−所需计数次数,写入THx和TLxTHx·TLxTIMER/COUNTER计数模式工作原理计数模式通过外部引脚(P3.4/P3.5)接收脉冲信号,每检测到一个下降沿计数器加1;由于采样机制需要2个机器周期识别一个有效跳变,最高计数频率被限制为振荡频率的1/24。01脉冲输入:外部脉冲通过T0(P3.4)或T1(P3.5)引脚输入,计数器检测下降沿(从1到0的负跳变)后加1P3.4/P3.502采样机制:每个机器周期S5P2期间采样一次,需连续两个机器周期分别采样到高电平和低电平,第三个周期执行加1S5P2采样03频率上限:识别一个有效脉冲至少需2个机器周期(24个振荡周期),最高计数频率fcont=fosc/24fosc/2404实例计算:12MHz晶振时最高计数频率为500KHz,外部脉冲的高低电平各需维持至少1μs才能被可靠识别500KHz示波器显示的脉冲信号波形·下降沿触发计数TIMEROVERFLOW&INTERRUPT计数溢出与中断触发机制计数器累加至最大值时发生溢出,硬件自动置位TF标志并触发中断请求;CPU响应后执行中断服务函数,根据工作模式选择手动重装初值或自动重装,实现周期性定时循环。01溢出产生计数器从初值累加至模式最大值(16位为65535)后再加1,计数器回零,TF标志位置102中断请求TF置1后向CPU发出中断请求,若ETx和EA均已置1,CPU暂停主程序进入中断服务函数03初值重装模式1需手动重写THx/TLx初值;模式2由硬件自动将THx值装入TLx04循环定时中断处理后计数器从初值重新累加,反复形成周期性定时中断,实现精确时间基准OVERFLOW计数器溢出归零累加至最大值后加1,硬件自动将TF标志位置1,计数器回零,完成一次完整的计数周期65535INTERRUPT中断允许与响应ETx与EA双使能后CPU响应中断,暂停主程序跳转至服务函数入口,执行预设处理逻辑ETx+EARELOAD两种初值重装方式模式1手动重写THx/TLx;模式2硬件自动将THx值装入TLx,实现不同精度的定时控制M1/M2CYCLE周期性定时循环中断返回后从初值重新累加,反复形成精确的周期性时间基准,支持连续定时任务周期循环TIMERCONFIGURATION定时初值计算实例以12MHz晶振、16位模式定时10ms为例,机器周期1μs需计数10000次,初值为65536-10000=55536(0xD8F0),分别写入TH0=0xD8和TL0=0xF0即可完成定时配置。01确定机器周期—12MHz晶振下机器周期=12÷12MHz=1μs,即计数器每1μs加11μs02计算计数次数—目标定时10ms÷1μs=10000次,即计数器需从初值累加10000次到达溢出1000003计算初值—16位模式最大计数65536,初值=65536−10000=55536,转十六进制为0xD8F00xD8F004写入寄存器—高8位TH0=0xD8,低8位TL0=0xF0;启动后从55536累加至65535溢出,恰好10msTH0·TL0Chapter04核心寄存器配置详解逐位拆解TMOD、TCON和IE寄存器,掌握定时器模式选择、运行控制与中断使能的完整配置方法REGISTER89HTMOD寄存器:工作方式控制TMOD寄存器(地址89H)高4位控制T1、低4位控制T0,每位包含GATE门控、C/T模式选择和M1/M0工作方式选择四类控制位,不支持位寻址,需通过字节操作进行配置。M1与M0两位组合选择4种工作模式——模式0(13位)、模式1(16位)、模式2(8位自动重装)、模式3(双8位)4MODESC/T位C/T=0为定时模式,脉冲来自内部机器周期;C/T=1为计数模式,脉冲来自外部引脚输入TIMER/CTRGATE位GATE=0时仅由TRx控制启停;GATE=1时需TRx置1且外部中断引脚为高电平才能启动DUALCTRL配置注意不支持位寻址,修改时需先读取当前值,用位运算修改目标位后再写回,避免误改另一侧定时器BYTEOPSTIMERMODES四种工作模式详解TMOD的M1/M0位组合定义四种工作模式:13位模式兼容旧架构、16位模式适用通用定时、8位自动重装模式适合高频精准定时、双8位模式将T0拆为两个独立计数器,模式1和模式2最为常用。M1=0·M0=0模式0—13位计数器TLx仅用低5位+THx全8位,最大计数8192,为兼容8048设计,现代开发中极少使用。8192M1=0·M0=1模式1—16位计数器THx+TLx全部16位参与计数,最大计数65536,溢出后需手动重装初值,是最通用的工作模式。65536M1=1·M0=0模式2—8位自动重装TLx计数溢出后THx中保存的初值自动装入TLx,无需手动干预,适合波特率发生器等高频场景。AUTORELOADM1=1·M0=1模式3—双8位计数器T0拆为TL0和TH0两个独立8位计数器,TL0使用T0控制位,TH0借用T1的TR1和TF1。SPLITT0SpecialFunctionRegisterTCON寄存器:运行控制与溢出标志TCON寄存器(地址88H)高4位控制定时器运行状态:TR0/TR1为运行控制位,软件置1启动、清0停止;TF0/TF1为溢出标志位,计数器溢出时硬件自动置1并触发中断请求。TCON.4·ControlTR0—定时器0运行控制位由软件置1启动T0开始计数,清0则停止T0,不影响已计数的值。软件控制TCON.5·FlagTF0—定时器0溢出标志位计数器溢出时硬件自动置1;若中断已开启则触发中断,CPU响应后硬件自动清0。硬件自动TCON.6·ControlTR1—定时器1运行控制位功能与TR0完全对称,软件置1启动T1计数、清0停止T1计数。软件控制TCON.7·FlagTF1—定时器1溢出标志位功能与TF0对称,T1计数溢出时硬件置1,中断响应后自动清0。硬件自动IEREGISTER·INTERRUPTENABLEIE寄存器:定时器中断允许控制IE寄存器通过EA全局中断允许位和ET0/ET1定时器中断允许位共同控制中断响应,必须同时满足EA=1、ETx=1和TRx=1三个条件,定时器中断才能正常触发。EA(IE.7)全局中断总开关,EA=0屏蔽所有中断请求,EA=1时各中断源才可依据自身允许位决定是否响应。这是中断系统的最高层级控制。全局开关ET0(IE.1)定时器0中断允许位,ET0=1时T0溢出可触发中断请求,ET0=0时T0溢出仅置位TF0但不触发中断。控制定时器0的中断使能状态。Timer0ET1(IE.3)定时器1中断允许位,ET1=1时T1溢出可触发中断请求,功能与ET0对称。控制定时器1的中断使能状态,与ET0独立配置。Timer1完整条件定时器中断触发需三重使能——EA=1(全局允许)+ETx=1(定时器允许)+TRx=1(定时器运行),三者缺一不可,形成完整中断链。三重使能AT89S51·InterruptSystem中断向量地址与中断号AT89S51为定时器0和定时器1分别分配了固定的中断向量地址(0x000B和0x001B)与中断号(1和3),C51编程中通过interrupt关键字绑定中断服务函数,编译器自动完成向量表映射。AT89S51中断源与中断号对照表中断源中断号向量地址触发条件外部中断0(INT0)00x0003P3.2引脚下降沿或低电平定时器0(T0)10x000BT0计数溢出(TF0置1)外部中断1(INT1)20x0013P3.3引脚下降沿或低电平定时器1(T1)30x001BT1计数溢出(TF1置1)串行口(UART)40x0023串口接收或发送完成定时器0和定时器1分别对应中断号1和3,向量地址为0x000B和0x001B,是编写中断服务函数时必须指定的入口参数。CHAPTER05C语言编程实战与典型应用从标准配置流程到LED闪烁、长定时、计数器等完整代码案例AT89S51·TIMER定时器标准配置四步法定时器编程遵循标准化的四步配置流程:配置TMOD选择工作模式、计算并写入计数初值、开启中断允许(EA+ETx)、置位TRx启动运行。01配置TMOD根据需求设定M1/M0选择工作模式,C/T选择定时或计数功能,GATE选择门控方式TMOD02写入初值依据公式"初值=最大计数值−目标计数次数"计算,将高8位和低8位分别写入THx和TLxTHx/TLx03开启中断将EA置1开启全局中断允许,将ETx置1开启对应定时器中断允许,两级开关缺一不可EA+ETx04启动定时器将TCON中的TRx位置1,定时器立即开始计数;清0则暂停,当前计数值保持不变TRx=1PRACTICECASE实战案例1:模式1实现1秒LED闪烁16位模式单次最长定时约65.5ms,实现1秒定时需采用"50ms短定时+20次软件计数"策略,在中断服务函数中累计溢出次数达到目标后翻转LED状态,兼顾精度与定时范围。主函数配置TMOD=0x01设定T0为模式1(16位定时器),初值TH0=0x3C、TL0=0xB0对应50ms定时EA=1开启全局中断,ET0=1开启T0中断,TR0=1启动定时器,主函数进入while(1)空循环等待中断TMOD·EA·ET0·TR0中断服务函数每次溢出进入中断后手动重装初值TH0=0x3C、TL0=0xB0(模式1无自动重装),count变量自增当count累计到20次(20×50ms=1000ms=1s)时翻转LED引脚电平并将count清零,实现1秒周期闪烁50ms×20=1000msCASESTUDY·实战案例模式2自动重装精准定时模式2(8位自动重装)溢出后硬件自动将THx初值装入TLx,消除了中断响应延迟导致的重装误差,定时精度显著优于模式1,适合高频短定时场景。配置要点01TMOD=0x02设定T0为模式2,TH0=TL0=0x06对应250μs定时(256−250=6),TH0作为自动重装源250μs02中断开启与启动同模式1:EA=1、ET0=1、TR0=1,配置流程完全一致,仅TMOD和初值不同EA·ET0·TR0模式2优势体现03中断服务函数无需手动重装初值,硬件自动完成TH0→TL0装填,代码更简洁且消除软件重装的时间误差AUTO-RELOAD048位计数器单次最长256μs(12MHz),需软件计数4000次凑成1秒,适合高精度短周期定时的叠加扩展4000×PRACTICALCASE实战案例3:外部事件计数器将定时器配置为计数器模式(C/T=1)后,可对P3.4/P3.5引脚上的外部脉冲进行精确统计,适用于流水线产品计数、转速检测、流量测量等工业场景。01TMOD配置:设C/T=1选择计数模式,M1M0=01选择16位模式,如TMOD=0x05表示T0模式1计数器02初值与启动:TH0=0x00、TL0=0x00从零开始计数,EA=1、ET0=1、TR0=1启动后每个外部下降沿使计数器加103计数值读取:主循环中直接读取TH0和TL0组合成16位当前计数值,或在中断服务函数中处理溢出事件04典型应用:流水线产品计数(光电传感器脉冲)、电机转速检测(霍尔传感器脉冲)、水流量计脉冲统计工业流水线光电传感器计数检测场景Long-TimerExtension长定时扩展策略当目标定时时间超出单次最大范围(16位模式约65.5ms@12MHz)时,采用'短定时中断+多级软件计数器'策略,通过在中断服务函数中层叠累加计数变量,可将定时范围从微秒级扩展至小时级。01单次定时上限16位模式最大计数65536次,12MHz晶振下约65.5ms;8位模式仅256μs,均无法满足秒级以上需求65.5ms02短定时基准选择整数定时周期(如50ms或10ms)作为基准时基,便于后续倍乘计算,同时保证中断响应不影响主程序50ms03多级软件计数中断服务函数中设count_s累加到20(20×50ms=1s)、count_m累加到60(60s=1min)、count_h累加到60(60min=1h)s→min→h04精度保障软件计数不影响硬件定时精度,每次中断间隔仍由硬件精确控制,软件仅负责累加判断,误差始终限定在一个基准时基内硬件精控TimerCoordination多定时器协同与中断优先级同时使用T0和T1时需统一配置TMOD避免互相覆盖,并通过IP寄存器调整中断优先级;默认优先级为INT0>T0>INT1>T1>UART,可根据项目需求通过PT0/PT1位调整定时器中断的响应顺序。TMOD统一配置TMOD高4位控制T1、低4位控制T0,赋值时需一次性设定两个定时器的模式。建议采用位运算方式分别配置,避免直接赋值覆盖原有设置,确保双定时器协同工作时的配置独立性。TMOD=0x11默认优先级顺序同时溢出时CPU按优先级顺序依次响应中断请求。外部中断INT0具有最高响应权,定时器T0次之,合理规划中断源可提升系统实时性。INT0→T0→INT1→T1→UARTIP寄存器调整IP中的PT0和PT1可分别将T0和T1设为高

温馨提示

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

评论

0/150

提交评论