蓝桥杯(单片机赛道)知识点整理—定时器/计数器部分

定时器

stc15系列单片机的定时器原理:

stc15系列单片机用户手册上的介绍如下:

蓝桥杯(单片机赛道)知识点整理—定时器/计数器部分_第1张图片

 

  1. Stc15系列有五个定时器/计数器,T1-T5(竞赛板子只有前三个定时器)
  2. 每个定时器有两种工作模式,即计数模式和定时器模式。
  3. 计数模式下,计数脉冲来自单片机的外部引脚;定时器模式下,技术脉冲来自内部的系统时钟。

该加1计数器的计数脉冲来源有2个:

1))系统时钟振荡器输出的12分频;2))T0或T1引脚输入的外部脉冲信号。

     4.在定时器模式下,系统时钟有两种模式:系统时钟不分频和系统时钟12分频,由AUXR和T4T3M寄存器决定;若是工作在计数模式下,则无需进行分频。

蓝桥杯(单片机赛道)知识点整理—定时器/计数器部分_第2张图片

 

假设单片机的外部晶振为12MHz,那么,经过12分频后输入计数器的计数脉冲为1MHz,即每个脉冲的周期为1us。因此定时器T016位工作模式最大的定时时间为65535us65.5ms

如何计时:

51单片机有两个定时/计数器T0和T1,为16位加法计数器,由低8位TLx和高8位THx两个寄存器组成,最大计数值为65535个计数脉冲。

       要定时10ms,则相当于计数10000个脉冲后计数器的值就到达65535了,那么开始计数的这个地方就是计数初值。

65535 - 10000 = 55535 = 0xd8ef

把这个计算得到的初值写入TH0和TL0寄存器即可:

TH0 = 0xd8;或者 TH0 = (65535 - 10000) / 256;

TL0 = 0xef; 或者 TL0 = (65535 - 10000) % 256;

每接收到一个计数脉冲,计数器就会加1,当计数值累计至全为1时(8位255,13位8191,16位65535),再输入一个计数脉冲,计数器便会溢出回零,并且计数器的溢出是TCON寄存器的TF0或TF1位置1,同时向内核提出中断请求。如果定时/计数器工作于定时模式,则表示间隔定时时间到,如果工作与计数模式,则表示计数值已满。

配置流程:

在使用定时器时,主要有两个步骤:

  1. 初始化:
    • 配置工作模式,对TMOD,AUXR寄存器进行赋值,以确定T0T1的工作方式。
    • 计算定时/计数初值,TH0TL0TH1TL1寄存器进行赋值
    • 使能定时/计数器中断,ET0ET11
    • 打开总中断,EA =1
    • 启动定时器,TR0TR1置1。                                                                                                         

      蓝桥杯(单片机赛道)知识点整理—定时器/计数器部分_第3张图片

       

注意:

以上软件代码中只产生了TF0=0; //置零溢出标志位

TR0=1;//定时器开始计时

但是没有进行中断的开启;

因此要加上以下代码:

ET0 = 1; //开启定时器0中断

EA = 1; //开启总中断

  1. 中断服务函数的编写
    如果不是自动重装模式,需要对THxTLx重新赋值。
    进行间隔定时程序的编写。

计数器模式操作例程:

蓝桥杯(单片机赛道)知识点整理—定时器/计数器部分_第4张图片

 计数器模式下主要是对TMOD寄存器的配置,对C/T位进配置即可。

蓝桥杯(单片机赛道)知识点整理—定时器/计数器部分_第5张图片

 对次数进行配置之后,开启中断,令定时器开始计时即可。

定时器模式操作例程:

蓝桥杯(单片机赛道)知识点整理—定时器/计数器部分_第6张图片

简单的服务函数

蓝桥杯(单片机赛道)知识点整理—定时器/计数器部分_第7张图片

 

 

注意写上中断号。

你可能感兴趣的:(1024程序员节)