查看: 879|回复: 9

【stc8】学习笔记——定时器模块

[复制链接]

2

主题

11

帖子

35

积分

注册会员

Rank: 2

积分
35
发表于 2021-7-16 15:13:05 | 显示全部楼层 |阅读模式
导语:经过几个小时的学习,我对定时器有了一点定的了解。本篇同样会通过解构黑箱的方式来进行讲解(因为我就是这样学习的)。
一、我的学习方式
    我相信有非常多的同学(特别是理科竞赛出身)有这和我一样的认知方式,就是解构黑箱。苏格拉底说,承认自己的无知是一种智慧。在技术领域,我们最应该承认的“未知”就是黑箱。认知是循序渐进的,从已知向未知推导,到目前为止我所使用过的最具效率的认知方式。探索未知是一种冒险,紧张而刺激,然而,认知不可能持续作战,此时不妨在合适的地方停下来,让剩下的“未知”一个新的黑箱,稍加整顿,再次出发。

回复

使用道具 举报

2

主题

11

帖子

35

积分

注册会员

Rank: 2

积分
35
 楼主| 发表于 2021-7-16 15:19:05 | 显示全部楼层
二、定时器是个啥
绍自己时我们会说:我是xxxxxxxx单位,工作是xx。定时器也是如此。首先,我们需要知道,定时器是芯片的一部分,是其中的一个功能模块,第二,它的工作工作相对独立与cpu,但受到特定的寄存器控制。再说它的工作:就是达到定时、计数的目的,并对芯片本身产生控制作用eg:我们可以用定时器来使pwm口输出ms脉冲信号,来驱动步进电机。

       此时,我们对定时器的理解是这样的:



096FED2AB19E0CED8934F97C6C74CF65.jpg
回复

使用道具 举报

2

主题

11

帖子

35

积分

注册会员

Rank: 2

积分
35
 楼主| 发表于 2021-7-16 15:20:38 | 显示全部楼层
二、定时器的粗略结构成
    让我们打开天文block,学习了一段demo。
X7~WTM%MNK}$}9`$(0X3(GJ.jpg
回复

使用道具 举报

2

主题

11

帖子

35

积分

注册会员

Rank: 2

积分
35
 楼主| 发表于 2021-7-16 15:24:00 | 显示全部楼层
使用定时器需要有几个操作,首先,是初始化定时器,接下来是启用定时器,接下来是让定时器的中断有效,这样定时器就能控制芯片了。这个过程在图形化界面非常简单,然而,在c语言的界面,却隐藏着很多东西。


回复

使用道具 举报

2

主题

11

帖子

35

积分

注册会员

Rank: 2

积分
35
 楼主| 发表于 2021-7-16 15:25:27 | 显示全部楼层
四、计时器结构的深入
   
   
我们可以看到,程序里首先设置了一个计时器初始化函数
   
接下来,在setup函数中出现了这样一串代码:                                  
   
这些东西都代表了什么呢?



`UL2JYF43AP3T0AGMKL2W76.png
回复

使用道具 举报

2

主题

11

帖子

35

积分

注册会员

Rank: 2

积分
35
 楼主| 发表于 2021-7-16 15:32:12 | 显示全部楼层
这时候,就该引出定时器的基本结构了
KJA`MQS]DBZ{Q@VC4@QJ_RB.jpg
回复

使用道具 举报

2

主题

11

帖子

35

积分

注册会员

Rank: 2

积分
35
 楼主| 发表于 2021-7-16 15:33:49 | 显示全部楼层
本帖最后由 qianjunzx 于 2021-7-16 15:45 编辑

让我们来细细讲解。


    1.定时器本质上是计数器,因此基本功能是记录脉冲的次数,当脉冲超过设定值时,可以执行某一段操作,一般为中断系统
        特:我们知道cpu的运行有系统时钟驱动。系统时钟能发出频率稳定的脉冲,那么如果把系统时钟的脉冲输入计数器呢,那不就能计时了吗?
     然而,平时,计时功能用的多,因此被叫成了定时器


    2.既然有功能的选择,那必然会有控制。谁来控制呢?又是寄存器。怎么控制寄存器呢?用程序来改变对应地址的值。


    3.什么叫做分频?eg12分频(通俗的讲)就是将系统时钟的12个脉冲当作一个脉冲,频率就降下来了。
  分频怎么设置呢,寄存器AUXR中的 T0x12 T1x12 T2x12(地址),可以分别设置T0 T1 T2 计时模式的分频(1/12)。
4.计数器是怎么实现计数功能的呢?我们可以不用深入了解其内部的原件构造,但必须学会设置参数。在计数开始之前,我蛮需要设置两个起点值(THx 、 TLx,x代表编号)。H就是high,L就是low,是计数值的高位和低位,高低位都到达计数的上限时,就会就会溢出并,将计数器归零。计数器模式的设置,可以修改指向应寄存器的参数TMOD,(在不同的芯片中,模式会有所不同)
    下图时TMOD 8个位所对应的功能:(图片在最后有,不过还是建议自己去看芯片手册)

    Tx_GATE:门控位,用于设置计数器计数与否,是否受P3.2或P3.3电压状态的影响。
      GATE=0时,表示计数器计数与否与两端口电压状态无关;
      GATA=1时,计数器是否计数要参考引脚的状态,即P3.2为高时T0才计数,P3.3为高时T1才计数。

    Tx_C/T:定时/计数模式选择位。     
      =0为定时模式;   
      =1为计数模式。

    Tx_M1  Tx_M0:工作方式设置位。定时/计数器有四种工作方式,由M1M0进行设置
       M1  M0 的两位可以组成两位二进制数,确定4种模式
         模式 016 位自动重装载模式)
                    模式 116 位不可重装载模式)
                    模式 28 位自动重装模式)
                    模式 3(不可屏蔽中断的 16 位自动重装载模式)
     (版权声明:本文为CSDN博主「爱学控制的猫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
   
      这是什么意思?16就是TLxTHx是两个82进制数,也就是说当TLx值到达256时,才归0,在THx上进1。此时最多能进行65536次计数。8,则同理,321

回复

使用道具 举报

2

主题

11

帖子

35

积分

注册会员

Rank: 2

积分
35
 楼主| 发表于 2021-7-16 15:35:46 | 显示全部楼层
.系统中断的设置   
    自己看!!!

KM1NY~F~VC)AL{~U`I6%N(R.png
回复

使用道具 举报

2

主题

11

帖子

35

积分

注册会员

Rank: 2

积分
35
 楼主| 发表于 2021-7-16 15:39:04 | 显示全部楼层
tips:我们可以直接修改IE参量,也可以修改IE中的EA(或其他)参量,都能达到目的,因为IE指向A8H(地址),而EA指向的是A8H的第7位。
      对于TMODTCOM等其实也生效:
IV9~9IRG4AN$7%~82UDSA`A.png
0Q6YB]KA1~FOE)GSC`D91OH.png
回复

使用道具 举报

2

主题

11

帖子

35

积分

注册会员

Rank: 2

积分
35
 楼主| 发表于 2021-7-16 15:41:28 | 显示全部楼层
这样,我们只需要阅读芯片手册,找到相关的参量,查阅其功能,就可以上手咯。
记住,在开启定时器中断功能之前,一定要打开EA终端总开关,就好比你家的总闸都没开,还想开灯?
结语:定时器你会了,玩去吧!!!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|好好搭搭在线 ( © 好好搭搭在线 浙ICP备19030393号-1 )

GMT+8, 2024-3-29 23:36 , Processed in 0.331406 second(s), 25 queries .

Powered by Discuz!

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表