这一小节介绍一下51单片机的一个重要外设定时计数器。

顾名思义定时计数器主要是两种功能:定时、计数。

定时:就是当你开启定时器后到了设定的时间他会触发中断,然后去执行中断服务函数里面的程序。

计数:主要是计算外部输入脉冲数。

因为我们主要是使用它的定时功能,所以这一小节就写一下它的定时功能怎么配置。因为写的是定时器中断,所以要结合上一小节的中断一起看。

定时器一共有4种模式 0、1、2、3。这一节以工作方式1为例。

接下来会按照内部结构、相关寄存器、编程步骤三个部分来讲。

内部结构

1、系统时钟、分频因子: 系统时钟是由单片机外部电路所接的晶振所决定,软件仿真的话通常是按12M去算。分频因子有6分频和12分频。这个不需要设置,按默认的就可以了。

2、外部脉冲输入:这就是定时计数器的计数功能的外部引脚。

3、 功能选择:就是通过这个位选择到底是使用定时功能还是计数功能。=0是定时,=1就是计数。

4、门控位、开启位:GATE位置1时只有在INTn脚为高及TRn控制位置1时才 可打开定时器/计数器。

GATE=0时只要TRn置一就能开启定时/计数器。

5、计数器:模式1是16位的计数器,但不会重装载。

6、中断标志位:当计数器计满了,溢出了,就会产生中断请求,该标志位会被硬件置一。


相关的寄存器

这是我从STC公司的那个手册上截下的图。有对寄存器每个位的作用的解释。结合那个内部结构图一起看,就很好看懂了。

编程步骤

对于寄存器的配置基本上就是上面那些,不过还有一部分没讲,也就是TLn、 THn寄存器,它们是一种加一计数器也就是当你给一个脉冲它就会自加1,这个脉冲如果是内部时钟产生的就是上面说到的定时功能、如果是外部直接输入的就是计数功能。

此外,我们可以对这两个寄存器设置初始值。通过设置初始值就可以控制中断产生的时间了。

当我们选用模式1时是16位定时模式,脉冲信号由单片机自己产生,每来一个脉冲计数器就加一,当计满的时候就产生中断。当初始值为0时计数器要累加到(65536-1)的时候算计满。(因为计数器是从0开始计数的所以是65536-1)。通过用时钟周期乘于65536得到定时器的定时时间(这也是定时器的最大定时时间)。我们就可以通过对初始值的设置得到我们要的时间,但不能超过最大的记数值65536-1。

初值计算:

1、确定计数值=定时时间*12/晶振频率                     (定时时间以微秒为单位,晶振频率以MHZ为单位)

2、确定初值=装载最大值-计数值

然后把高8位放入THn,低8位放进TLn

以上一节的那个程序为例:

                         MOV TMOD, #01HMOV TL0,#0AFHMOV TH0,#3CHSETB EASETB ET0

这是一个定时50ms的设置。

1、记数值=50 000*12/12=50000

2、初始值=65535-50000=15535 (=3CAF)

3、TH0=3C  TL0=AF


还有一种情况,如果我要定时的时间超过最大定时时间怎么办,答案是多定时几次。

以12MHZ晶振为例,最大定时时间为65.535ms,也就是最大定时时间大概也就是65ms,如果我要定时1s怎么办。那就先定时50ms然后让程序重复定时20次再执行中断服务函数。

最后放个例程吧。看如何定时1s让灯闪烁。

ORG 0000H
JMP MAIN
ORG 000BH
LJMP T0IT
ORG 0200H;初始化函数
INIT:MOV TMOD, #01H    ;选择模式1,不使用门控位MOV TL0,#0AFH       ;装载初值MOV TH0,#3CHSETB EA            ;打开中断总开关SETB ET0        ;打开中断分开关SETB TR0   ;开启定时器MOV R2,#20MOV R3,#0FEHRETMAIN:ACALL INIT           ;调用初始化函数
S:     MOV A,R3            MOV P2,A            ;IO口输出JMP S;中断服务函数
T0IT:MOV TL0,#0AFH ;重装载初值(模式1下进入中断函数后一定要重装载)MOV TH0,#3CHDEC R2           ;让R2自减1,MOV A,R2     ; JZ ONE         ;到零时说明已经产生了20次的50ms中断   ,即1sLJMP CHU        ;如果没到1s直接跳出中断,不执行下面的程序
ONE:MOV R2,#20          ;重新赋值R2CLR AMOV A,R3CPL A               ;取反指令,MOV R3,A            ;实现R3数据的翻转,在主函数中实现LED的闪烁CLR ALJMP CHUCHU:   RETI END

注意因为以上所涉及的工作寄存器是比较少的所以在中断服务函数部分,我是没有用到入栈和出栈指令对现场进行保护。如果是你的程序比较复杂所使用的工作寄存器较多,建议还是要把入栈和出栈指令用上,进行现场保护。(至于现场保护之前在讲单片机内部结构那里有推荐过一个视频里面有讲。)『教程』堆栈是个啥?_哔哩哔哩_bilibili

那这里还是给大家贴一张官方提供的标准写法。

------------------------------------------------结束-------------------------------------------------------------------------

51单片机汇编学习笔记9——定时计数器相关推荐

  1. 51单片机汇编学习笔记4——子函数

    这一小节讲一下子函数的编写格式和调用. 子函数的调用 先讲一下子函数的格式 以之前讲到的延时函数为例 :延时函数 DELAYS :MOV R1,#0FFH ;往R1寄存器中放入一个数(立即寻址)0ff ...

  2. 51单片机汇编学习笔记6——IO口输入

    这一小节讲一下IO口的输入. 输出是 直接对P1口赋值. 输入本质上是读取引脚的状态,被拉高还是被拉低.(这里暂不涉及模拟量的输入) IO口的输入 核心指令 JB JNB JB bit rel 例如: ...

  3. 51单片机汇编学习(一)点亮你的LED灯

    本帖为使用汇编编写51单片机的学习笔记,本帖使用软件为keil5,因为没有实际硬件,所以选择porteus仿真软件,因为是第一篇,所以内容多有赘述,详细说明了工程建立等,因为文章太长所以编程和仿真分开 ...

  4. 江科大51单片机入门学习笔记合集

    文章目录 软件下载 介绍 STC89C52RC 命名规则 芯片介绍 开发板介绍 逻辑运算 C语言语法 函数在C语言基础上做的拓展 重入函数 中断函数 外部函数 sfr sbit 51单片机最小系统组成 ...

  5. 51单片机汇编学习例程(9)——ADC0809篇

    ASM9_ADC0808:    ADC0808采集ADC参数,数码管显示 (注意代码显示不全,最下面有Keil源码和Proteus工程) /** ************************** ...

  6. 51单片机汇编学习10——串口通讯

    这一小节写一下串口通讯. 建议先去了解一下什么串行通讯. 推荐一个视频3分钟理解通信协议之串口UART到底是个啥?_哔哩哔哩_bilibili 因为串口通讯涉及的寄存器相对较多.所以尽量要自己去看看S ...

  7. 51单片机入门学习笔记(上)

    笔记整理自B站UP主江科大自化协教程<51单片机入门教程-2020版 程序全程纯手打 从零开始入门> 所用单片机为普中51 STC89C52单片机2022新款,文中所提到的调试现象及结果也 ...

  8. stm32寄存器版学习笔记04 定时计数器中断

    STM32共有8个定时计数器,其中TIME1和TIME8是高级定时器,TIME2~TIME5是通用定时器,TIME6和TIME7是基本定时器.以TIME3为例总结定时计数器的基本用法. 1.TIM3的 ...

  9. 51单片机汇编学习11——扩展原理与接口技术

    终于到这一小节了.这一节讲扩展原理与接口技术. 那么什么是扩展原理&接口技术呢?其实主要是3种. 1.扩展一个程序存储器 2.扩展一个数据存储器 3.扩展IO口 1.扩展程序存储器 其实这个扩 ...

最新文章

  1. 别再用 BeanUtils 了,这款 PO VO DTO 转换神器不香么?
  2. HTML如何让图片覆盖背景颜色,css – 使用rgba背景颜色覆盖背景图像
  3. 云南大学信息学院c语言实验七,云南大学软件学院C语言程序
  4. linux实验试题 cp,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  5. 使用Google Cloud Platform分散您的应用程序
  6. 最小的linux服务器_学习以最小的努力构建GraphQL服务器
  7. 安装版mysql5.7_mysql5.7 安装版安装
  8. graphviz 画决策树_决策树算法-实战篇
  9. 软件测试面试:请说一下你工作中发现的最有价值的bug?
  10. tensorflow预测波士顿房价
  11. SQL连接两张或多张表
  12. 获取服务器的wsdl文件,vb.net根据wsdl文件生成WebService服务器端代码
  13. 2021年中国图书出版行业经营现状及重点企业对比分析:凤凰传媒优势明显[图]
  14. border:0和boder:none区别
  15. 「LSTM 之父」亲笔万字长文,只为向世人证明:深度学习不是在母语为英语的地方被发明的...
  16. GHO文件内IE主页的修改方法
  17. JAVA——从基础学起(五)类和对象
  18. 520套日式 韩游 消除RGB类 人物角色 动画序列帧 手游动画
  19. 练习2-1 Programming in C is fun
  20. 大数据技术学习,深度挖掘大数据的现状分析

热门文章

  1. 问题一:使用foreach遍历字符串
  2. Elon为2020网鼎杯准备之“CTF初体验!”
  3. 我在MIT人工智能研究实验室工作一年学到的 5 件事!
  4. JavaScript每日一练经典小案例(二)
  5. MYSQL连接错误码2059解决办法
  6. 江苏十二月份有计算机二级考试吗,2021年3月江苏计算机二级报名时间|网上报名入口【12月28日开通】...
  7. 四方通讯主机IEC104通讯
  8. DNF即将代替Yum
  9. 解决mfc140u.dll文件在Windows找不到
  10. 2012-2020蓝桥C++ B组蓝桥杯省赛真题(第一题)