当前位置: 首页 > news >正文

(九)c52学习之旅-定时器

定时器可以解决软件延时的不精确性和系统效率的降低。

一、定时/计数器的工作原理
加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。

设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t 。

设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。在每个机器周期的S5P2期间采样T0、T1引脚电平。当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2 us。

二、与定时器有关的寄存器
1.工作方式寄存器TMOD
这里写图片描述
高4位设置T1,低4位设置T0

(1)GATE门控位。
GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;
GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。即此时定时器的启动多了一条件。

(2)C/T定时/计数模式选择位。
=0为定时模式; =1为计数模式。

(3)M1M0:工作方式设置位。
定时/计数器有四种工作方式,由M1M0进行设置
这里写图片描述

2.控制寄存器TCON
TCON的低4位用于控制外部中断。TCON的高4位用于控制定时/计数器的启动和中断申请。
这里写图片描述
(1)TF1(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。

(2)TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。

(3)TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。
(4)TR0(TCON.4):T0运行控制位,其功能与TR1类同。

3.IE中断允许控制
这里写图片描述
(1)EA总中断开关
(2)ET1定时器/计数器1开关
(3)ET0定时器/计数器0开关

4.TH*,TL*
TH0,TL0/TH1,TL01:用来赋值初值。

三、定时/计数器的工作方式
(1)方式0
这里写图片描述
方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。
计数个数与计数初值的关系为:X=2^13 - N。

(2)方式1
这里写图片描述
方式1的计数位数是16位,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器 。
计数个数与计数初值的关系为:X=2^16 - N。

(3)方式2
这里写图片描述
方式2为自动重装初值的8位计数方式。
计数个数与计数初值的关系为:X=2^8 - N。
工作方式2特别适合于用作较精确的脉冲信号发生器。

(4)方式3
这里写图片描述
方式3只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数。
工作方式3将T0分成为两个独立的8位计数器TL0和TH0

四、定时器/计数器初始化
定时器0的初始化过程
1、定时器模式设定。对TMOD赋值,以确定T0和T1的工作方式。
2、定时器初值设定。计算初值,并将其写入TH0、TL0。
3、设置中断系统。允许全局中断和定时器0中断。
4、启动定时器。使TR0置位,启动定时器0。

* 五、定时器0初值计算*
人工计算(为方便计算,本讲晶振改用12MHz)
计数值=定时时间/(振荡周期*12)
初值=65536-计数值
定时时间= (振荡周期12) (65536-初值)
最大定时时间= (振荡周期*12) *65536=65.536ms

相关文章:

  • (十)c52学习之旅-定时器实验
  • (十一)c52学习之旅-动态数码管
  • linux屏幕亮度调节解决办法
  • 一、系统准备工作
  • 二、CUDA安装和测试
  • 三、安装Anaconda实验平台
  • 3.1安装配置Anaconda
  • 3.2使用conda安装theano环境
  • 四、安装cuDNN,caffe和openCV
  • 测试Theano使用GPU并行计算,以验证环境搭建是否成功
  • 安装cuda的错误解决办法
  • Anaconda 安装编译pycaffe
  • 服务器(多GPU)caffe安装和编译
  • DIGITS安装和配置
  • SeetaFaceEngine安装和测试
  • ----------
  • 「面试题」如何实现一个圣杯布局?
  • canvas 绘制双线技巧
  • co.js - 让异步代码同步化
  • gops —— Go 程序诊断分析工具
  • Iterator 和 for...of 循环
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • JS笔记四:作用域、变量(函数)提升
  • JS题目及答案整理
  • Netty源码解析1-Buffer
  • nodejs实现webservice问题总结
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • Python - 闭包Closure
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • React-flux杂记
  • Redis的resp协议
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Sublime text 3 3103 注册码
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 理清楚Vue的结构
  • 实习面试笔记
  • 树莓派 - 使用须知
  • 微服务核心架构梳理
  • 在electron中实现跨域请求,无需更改服务器端设置
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • linux 淘宝开源监控工具tsar
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • # 透过事物看本质的能力怎么培养?
  • #define用法
  • (1)(1.13) SiK无线电高级配置(五)
  • (33)STM32——485实验笔记
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (python)数据结构---字典
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转载)Google Chrome调试JS
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例