MCS-51单片机_定时计数器1.ppt

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MCS-51单片机_定时计数器1.ppt

* * * 判断TF0等于1需要时间,TF0=0也需要时间,然后才是取反,所以方波不准确 可以 中断 * MCS-51单片机 --定时/计数器 陈茜茹 159 1576 2780 Email:vickychenqian@163.com 重难点 常识:定时器的数量/模式数 难点:4种工作模式的特点及其应用 定时器初值的计算 定时器==水箱 1.水箱多久能装满? 进水速度 水箱的容量 水箱的原始液面 2.怎么发觉满了? 水溢出 机器周期 计数容量 初始值 计数器溢出 定时/计数器的结构 1. 定时工作方式 ★ 设置为定时工作方式时,定时器计数的脉冲是由51单片机片内振荡器经12分频后产生的。 ★每经过一个机器周期定时器(T0或T1)的数值加1直至计数满产生溢出。 如:当8051采用12MHz晶体时,每个机器周期为1μs,计5 个机器周期即为5 μs,即定时5 μs 。 2. 计数工作方式 ★ 设置为计数工作方式时,通过引脚T0(P3.4)和T1(P3.5)对外部脉冲信号计数。 ★ 当输入脉冲信号产生由1至0的下降沿时,定时器的值加1, 在每个机器周期CPU采样T0和T1的输入电平。若前一个机器周期采样值为高,下一个机器周期采样值为低,则计数器加 1。 ★ 由于检测一个1至0的跳变需要二个机器周期,故最高计数频率为振荡频率的二十四分之一。 ★ 虽然对输入信号的占空比无特殊要求,但为了确保某个电平在变化之前至少被采样一次,要求电平保持时间至少是一个完整的机器周期。 TMOD(89H) M1 M0:设定定时器工作模式 C/T:定时器计数器选择位 1:计数器模式 0:定时器模式 GATE:门控位,定时器启动/定时器方式控制 1:受外部引脚和TRi控制,也叫硬启动 0:只受TRi控制,也叫软启动 TCON TF1:定时器T1溢出标志 1:定时器溢出 0:定时器未溢出 用来查询时间是否已到,可软件清0 如中断允许,则中断后由硬件自动清0 TR1:定时器T1运行控制位。 方式0 M1M0 = 00; 计数器位数:13 计数范围:1~213 (8192) 方式1 M1M0 = 01; 计数器位数:16 计数范围:1~216 (65536) 方式2 M1M0 = 10; 计数器位数:8 计数范围:1~28 (256) TLx是计数器,THx记录初值 方式3 定时器0特有 定时器0占用定时器1的部分寄存器 定时器的使用方法 1、选择合适的计数模式 2 、计算初值 3 、设定工作模式 4 、设定初值 5 、启动定时器 6 、查询溢出 7 、关闭定时器 定时器初始化 定时器应用 工作模式的选择 原则:1 、首先考虑模式2,再考虑模式1。 2 、中断方式为主,少使用查询模式 能否使用模式2?关键看实际计数值! 实际计数值的计算: N=t/T=t×f/12 其中:t为实际定时时间,T为单片机周期,f为振荡器频率 定时器初值的计算 t = N × T = (2x – 初值) × 12 / fosc 所以初值为: 初值 = 2x – t× fosc/12 其中: N为实际计数值,X为计数位数, fosc 为晶振频率 N 定时器的应用 假设单片机系统的晶体振荡器的频率为12MHz,编程实现P1.0和P1.1分别产1ms和500us的方波。 分析:1 、能产生周期500us,就可以产生1ms周期的方波 2 、500us周期方波的变换周期是250us,当振荡器频率为12MHz 时,模式2的最长定时时间为:28×12/12 = 256us250us,所以可以使用模式2进行计数 3 、计数初值为:28-250*12/12 = 6 定时器的应用 sbit FANGBO_1ms = P1^0; sbit FANGBO_500us = P1^1; void main(void) { unsigned char i; TMOD = 0x02; TH0 = 0x06; TL0 = 0x06; TR0 = 1; while(1) { for(i=0;i2;i++) { while(!TF0); TF0=0; FANGBO_500us = ! FANGBO_500us ; } FANGBO_1ms = !FANGBO_1ms ; }

文档评论(0)

资料 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档