51单片机的学习经验总结

控制/MCU

1877人已加入

描述

1.取指译码执行模型:首先我们来看看单片机是如何工作的,我们拿电脑的主板来作为对比,我们买电脑时,总是追求处理器的主频。处理器的工作原理是从存储器上取出一条指令,然后对指令译码,译码完后执行。然后取下一条指令,译码,执行。它为什么能这么有序的工作?是因为它有一个工作时钟,在这个工作时钟的统一管理下,处理器有序的工作,这里的主频就是工作时钟的速度,当然,现在你可能也知道主频越高,取指译码速度越快,性能越好。那么你可能会问,这跟51单片机有什么关系,OK,切入正题,单片机的工作也是这个原理,从存储器上取指,译码,执行。但是单片机的存储器在哪?在单片机的内部,对于电脑来说,是把处理器,内存集中在一块主板上。而现在你应该很明确,对于单片机它就相当于一块电脑主板,把处理器,存储器集中到一块芯片内部。从这个宏观的角度看,所有的单片机是不是都是一个原理,服从于取指,译码,执行的基本模型。OK,继续……

2. 51单片机的外设:我们在学习单片机时,所做的第一个实验都是一样的,点灯。也许你已经学会了用单片机做出好看的花样灯,或者用单片机驱动数码管显示出数字或字母。或者可以检测按键了。不错,我们仔细想想这些是什么,无非,你就是控制那一排排引脚输出高低电平,我们称这些引脚叫I/O口,输入输出,按键是输入,点灯是输出。其实你以为你学了三样东西,其实,你只学了一样东西,I/O控制。所以这些内容并不是单片机的内容,我们称之为单片机的外设,现在你应该很明确了,所谓的LCD液晶,AD芯片什么的都是单片机的外设。但是我们为什么要学习这些单片机的外设呢?还是为了熟悉单片机,你驱动的芯片多了,自然对编程模型就熟悉了。其实,我们用单片机就是在驱动外设,然后你问那定时器,中断,串口通信又是什么?对于中断,现在单片机在做一件事,突然,我给个信号,现在出了一个意外,你赶快去做另一件事,做完另一件再回来,就是这样。对于定时器,我举个例子,现在对于一盏灯,我要他每天晚上六点打开,每天早上六点关闭,我们会怎么做?设定一个计时器,假设当前是晚上六点,现在我让I/O口输出高电平点灯,同时打开计时器,定12个小时,12个小时一到,给一个中断,去把I/O口取反,关灯,是不是这样控制的。所以中断,定时器只是为了更好的让单片机进行控制工作。现在你应该很熟悉了,单片机就是一款自动控制的芯片。注意,是芯片,你做的工作就是如何编程来是这款芯片工作,是这款芯片在规定的程序下干活……怎么让单片机干活呢?五个字,配置寄存器。

3.配置寄存器:学习51单片机,不管你是刚刚开始学,还是学习有一段时间了,你应该很熟悉的字眼,寄存器。我想说单片机的基本思想就是五个字:配置寄存器。单片机怎么工作,比如,你让I/O口输出高电平,怎么输出,在C语言里,你是通过P1=0xFF来实现的,为什么这么写,你去看看头文件reg51.h里的内容,它定义了一个寄存器为P1,然后你向这个寄存器里写入了8个1,于是输出高电平。你是通过配置寄存器的内容来控制I/O口的。我们再想一下,定时器你是怎么配置的,同样的原理,你是通过配置TMOD,TCON,TH,TL等若干个寄存器完成的吧,然后给单片机定了一个时间,当然,你说这些是简单的,还有复杂的呢?那我就再举个例子吧,只要是写单片机程序,你基本都是在配置寄存器,例如,STC系列的单片机带了PWM功能,你如何让单片机输出一个符合你要求的PWM信号呢,你绝对是通过给某个寄存器写入一个值,这个值控制频率。再给一个寄存器写入一个值,这个值控制占空比,然后通过哪个脚输出,你又是通过一个寄存器来控制的。所以整个过程都是控制寄存器。那么你说,51是这样的,其他的呢?STM32,高端的单片机,工作起来也是配置寄存器,STM32时钟信号的选择,是通过控制RCC,I/O的控制是通过控制GPIO,当然,它采用的方式是存储器统一编址,就是你定义某个寄存器不再是51的sfr和sbit,而是用指针直接访问地址的方式,比如访问某个寄存器,从器件手册上查找该寄存器的地址为0xXXXXXXXX,那么配置时使用*(long unsigned *)(0xXXXXXXXX)=0xFFFFFFFF的方式,本质不变。这样看来,那么msp430,PIC都是这样的,只是他们的寄存器不同,配置方式不同,写入的值不同而已。如果你真的懂了51单片机,真的懂了单片机配置寄存器的原理。你只要花两个小时看懂芯片手册,熟悉了开发环境,一天就能上手新的芯片……题外话就是,看arm等等芯片很高端,如果是裸机编程的话,那么跟也是配置寄存器,原理一样,当然加了操作系统就不同了,操作系统的框架就是重要的了。

4.关于通信协议:对于任何单片机来说,最为难的问题就是通信协议了,对于这个问题,我不想说的太多,毕竟不是在做通信原理,只是要说明的一点就是,“有通信就有协议,这是什么意思?就是说单片机在驱动任何芯片的时候,必须要服从这款芯片的的时序,比如先使能这个芯片,然后给出写信号或者读信号,然后芯片在发出响应信号,再对芯片进行操作。为什么要这样呢?首先,对于芯片来说,它有自己的操作方式,如果没有固定的方式,那就乱套了,其实联想到人身上也是这样的,中国人和美国人交流时,如果没有翻译,就需要打手势,这个手势双方都能懂,于是就能通信。芯片协议也是这样的,单片机和芯片都能理解,于是他们都能工作。还有一点就是像有些芯片带了SPI的协议,IIC的协议等等,如果它自带了,那么他协议已经设置好了,回归到本质,使用这个协议又是配置寄存器了。比如51单片机的串口协议,你是通过配置寄存器来设置波特率,校验位的吧……万变不离其宗……

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分