痴迷单片机技术的屌丝心酸历程
文章图片
曾经从零基础学习单片机的我,到找到相应开发工作花了大概三四个月的时间,当时还是11年,学习条件没有现在那么好,现在五花八门的入门教程可以用泛滥来形容了,泛滥不代表作者讲的不好,有些作者老师确实讲的很不错,单片机涉及的东西还是比较多的,但是只要有人帮你理清楚,你就会发现一点都不难,很多人之所以觉得难,大概率都是走了弯路,单片机可以控制硬件激发你的兴趣,比单纯的学习代码在黑框里显示冷冰冰的“Hello world”有趣多了。
【嵌入式|网上五花八门的单片机教程,到底应该怎么整理学习过程】
文章图片
简单对定时计数器的工作原理做一个总结,定时计数器通常指的T0和T1,8051单片机内部都是两个16位的定时器计数器,之所以称之为是16位定时计数器,指的T0是由TH0和TL0构成的,这两个每一个都是一个八位的寄存器,它们俩构成16位的计数器,T1是由TH1和TL1构成的,也是两个八位的寄存器加到一起构成了一个16位的寄存器,16位指的是它的计数的范围,最大的计数范围是从0开始计数,最大只能寄65536个数,能不能记到这个数由你的工作方式来选择。
TH0和TL0构成的定时计数器T0,TH1和TL1构成的定时计数器T1,定时计数器有两个功能,内部定时和外部计数,定时计数器的实质都是一个加一计数器,无论是定时还是计数,都是对脉冲进行计数,定时功能是对内部的机器周期进行计数,外部的频率测量是对外部引脚上的这个脉冲进行计数,时间和计数是可以相互转换的,每个定时计数器都可以由软件设置定时工作方式,或者接受工作方式,定时计数器T0和T1受特殊功能寄存器TMOD和TCON的控制,定时计数器一旦启动它和CPU之间是并行工作,CPU可以去干其它的事情。
文章图片
定时计数器一旦启动,过一个机器周期的时间定时计数器会自动的加一,它只有在加满的时候才会去告诉CPU定时时间到,或者计数之满,其它时候它和CPU之间是互不干扰各干各的工作,它对于提高CPU的工作效率,还有简化外围电路会非常有帮助,需要定时的场合特别的多,比如用外部的定时计数器去扩展,现在都已经把定时计数器做到单片机的内部去了,高性能单片机内部定时计数器的个数会做得更多,51单片机虽然只有两个定时计数器,但实际上可以通过软件的办法来扩充很多的定时计数器来使用,它是对内部的机器周期进行计数,内部的机器周期实际上就是经过片内振荡器,12分屏之后它的周期就会变成12倍,定时计数器的值加一直到计数满产生溢出,溢出之后可以通过软件查询或者去申请CPU的中断,两种方式都可以处理。
计数是对外部脉冲计数,需要用到单片机的外部脉冲的输入引脚,也就是P3.4和P3.5,要想使用外部脉冲计数,必须把外部脉冲信号引入到这两个引脚上,分别对应定时计数器0的计数功能和定时计数器1,这个引脚是固定的,不是任何引脚都可以作为外部脉冲计数,当外部脉冲产生由1到0的下降沿的时候,定时计数器里面的TH0或者TL0,或者是TH1和TL1,里面值会进行加一,CPU会去采样这两个引脚上的输入电平,前一个机器周期采样值为高,下一个机器周期采样值为低,计数器就加一。
文章图片
时钟晶振最大的频率,外部测量的脉冲的频率,要满足什么样的条件定时计数器的计数功能才能够去采样这个信号,要有两个机器周期的时间才能够采样一个频率的数,它要保证前一个周期是高电平,下一个周期为低电频,计数频率比较高的情况下需要做外部的处理,可以做一个分屏然后再引入到I/O口,最高计数频率为振荡频率的1/24,为了保证某个电平在变化之前至少被采样一次,所以要求电平保持时间至少一个完整的机器周期。
这个主要和单片机有关系,单片机采样I/O口的电平状态是要有一个机器周期才能够采样一次,所以这个电平的要保持一致,少一个机器周期的话,变频变化的太快保持着超过一个机器周期的时间才能采到,比如12兆的晶振,一个高电平或者低电平的时间低于一个秒,单面机就采样不到,定时计数器的控制寄存器TCON用的高四位,TMOD定时计数器的工作方式的设定,以及你是使用定时还是计数?工作方式有四种,要选择哪一种?还有这个地方有一个门空位是什么含义?在之后的分享中会专门做一个专栏来给大家分析,有兴趣的朋友可以持续关注一下。
对单片机感兴趣的可以查看往期分享内容,希望能帮助大家在学习单片机的路上少走一些弯路,想要入门单片机可以持续关注创为单片机编程,附加“带我学习”查看更多内容分享。
文章图片
推荐阅读
- 嵌入式|单片机有没有想象中那么好学,很迷茫有说正面有说负面
- 思维|天气预报(牛客)
- C语言程序练习|爬动的蠕虫
- 算法笔记练习题|(5.6B)n的阶乘
- 蓝桥杯单片机真题|第十三届蓝桥杯单片机省赛模拟题(客观题程序题)
- 蓝桥杯单片机|【蓝桥杯单片机的备赛旅行日记系列】之省赛初赛代码免费下载
- 蓝桥杯单片机|蓝桥杯单片机 省赛 第13届模拟题
- C语言|【c语言strcpy、strcat、strlen函数实现】
- 蓝桥杯学习|【第十三届蓝桥杯单片机省赛模拟冲刺02】