控制/MCU
分类:
版权声明:本文为博主原创文章,未经博主允许不得转载。
今天有同学问起来单片机定时器一些问题 索性写来吧 哈哈 写下来装个X 各位不要介意 希望可以让单片机新手更好的理解一下定时器吧 哈哈哈
首先 来说一下几个几个概念性的东西 可不要小瞧这个小玩意 如果不知道这些基本的真的很难理解好定时器这个东西 好了 扯淡完毕 进入正题
重点介绍一下 我们经常听到的一些东西 比如 : 65536 1US 12MHZ 11.0592MHZ (65536-N)/256 (65536-N)%256 增计数 减计数 大概就是这些玩意了
好 第一个 首先来介绍 这个1US 到底怎么回事哈 这样直白的说点 1US就是单片机的一个机器周期 我印象中所谓的机器周期就是单片机执行一条单周期指令所花费的时间 那么 为什么一个机器周期是1US呢 这里我直接拿出来这个 公式 大家只需要知道存在这个规律就可以了 如果想详细了解一下的下 我最后会附上一个关于各个周期的详细介绍 有兴趣可以去看一下
公式: 机器周期=6个状态周期=12个时钟周期(震荡周期)
这里有必要说一下时钟周期和你单片机晶振频率的关系哈 我说的再详细点哈 请问周期的单位是什么 是什么? 是时间啊 S MS US 那么频率的单位是什么 HZ啊 这里HZ和S对应 一次类推
告诉我高中学的周期和频率的关系是什么?
就是那个那个那个 : 频率的倒数是周期啊 即 时钟周期=1/晶振频率 T=1/f;
那么对于51单片机来说 我们假设他的晶振频率是12MHZ 那么:时钟周期=(1/12 MHZ) (秒 S)=(1/12 000 000 HZ)(秒S)
上面说过了 机器周期=12个时钟周期 所以:
机器周期=12*(1/12 000 000 )(秒S)=1/1 000 000(S) 算出us就是1us了 这就是1us的来源 那我们经常听到的11.0592MH又是怎回事呢 其实我们一般使用的51单片机中晶振频率都是11.0592MHZ的 至于为什么使用这个 这里不扯了 那你会发现大多数老师的课堂上喜欢拿12MHZ的说事 原因其实很简单啦 就是因为用12MHZ来计算机器周期的时候恰好是1us这个整数啦 就这么简单 没有别的原因啦 应该 那么现在你自己可以计算一下你自己现实中使用的板子 的机器周期是多少了吧 都说到这样了 应该能明白了吧 嘿嘿 好 继续下一个问题
2:65536
这个数值是我们新手在使用定时器的时候几乎无法避免的一个问题 我们都知道 51的定时器的其中一种计数方式是16位的 那么16位是个什么概念呢(其实这样理解不是很合适 但是没关系啦 ) 其实就是16个二级制位 那么16和二进制位最大是多少? 最小是多少 ?
最大就是16和1啦 : 1111 1111 1111 1111
那么 也就是这个16位的计数器最大可以装到的值啦 根据二进制的规律 你把这个数看成一个等比数列 分别是 2^0*1 2^1*1........2^16*1 好吧 这样 根据那个等比数列求和就OK啦 就可以得到65535 哎呀 咋不是65536类 兄弟啊 这个自己去考虑吧
那么最小就都是0啦
3: (65536-N)/256 (65536-N)%256
我们在写定时器代码的时候 会经常看到 TH0=(65536-N)/256 TL0=(65536-N)%256
这又是怎么回事 上面 说了这个计数器啊 是一个16位的 他是由两个八位的寄存器组成的比如8+8=16嘛 这两个寄存器是有高低之分的 其中一个呢 叫高八位 另一个就叫低八位 就是这样比如 11111111 11111111
高八位 低八位
当定时器开始计数的时候 TH0(高八位) 和TL0(低八位)就开始计数了 那怎么计数呢 首先是低八位 从你装的那个初值 开始计数 比如你初值TL0=56;那么开始计数后TL0每过一个机器周期就加1 因为TL0是八位的嘛 所以最大可以加到255 当在加的时候 就会向高八位进位啦 就是进1啦 所以才有了 不行了 累了 不写了 拉倒 哈哈哈哈
以后有时间在完善吧
最后 声明一下 :上文中很多术语说的不得当 有的纯粹为了好理解
顶
0
踩
0
全部0条评论
快来发表一下你的评论吧 !