学习单片机应该熟练掌握C语言基础(学到C语言的结构体)、数字电路、模拟电路、电路基础。
学习单片机要养成翻看datasheet的习惯,因为datasheet可以提供最权威的信息。单片机的datasheet可以到http://www.stcmcudata.com/ 查看下载。
单片机到全称是单片微型计算机,是将计算机到主要部分集成在一颗芯片上到微控制器。
扩展知识:
微处理器是由一片或少数几片规模集成电路组成到中央处理器(CPU)
以STC89C52系列单片机为例
STC89C52系列单片机几乎包含了数据采集和控制中所需的所有单元模块,可以称得上一个片上系统。
扩展
CPU:执行用户程序指令,MCU的大脑
总线:MCU内部数据的“桥梁”
查阅网络资料,在1980年Intel公司推出MCS-51单片机。至今为至,现在大学电子信息专业必开的一门专业课便是51单片机。
我个人认为51单片机并没有过时,有如下原因:
1、51单片机因为发行到时间长,用的人多资料是比较全的,遇到问题我们到网上都能找到解决到方案。因为51单片机用的人多,现在在网上购买一些传感器模块,商家提供的例程一般都有STC89C52的。
2、 学习51单片机是入门嵌入式的基础,51单片机的知识学扎实了,之后学习更加高级到单片机会非常的容易。学习编程的会有这么一种感受,当学精了一门编程语言的时候,再去接触其他编程语言就非常到容易。
从上图我们可以看出STC98C51和STC89C52在工作电压和工作频率是相同的,不同的是它的程序空间和RAM空间不一样,还有STC89C52多出了一个定时器同时也增加了一个定时器中断源。
https://blog.csdn.net/lzxiaotu/article/details/118424623
本篇文章只介绍常用的两种复位方式,其他方式可查看datasheet
- 外部RST引脚复位:外部RST引脚复位就是从外部向RST引脚施加一定宽度的复位脉冲,从而实现单片机的复位。将RST复位管脚拉高并维持至少24个时钟加10us后,单片机会进入复位状态,将RST复位管脚拉回低电平后,单片机结束复位状态并从用户程序区的0000H处开始正常工作。通俗的说,单片机的RST引脚复位和电脑的重启按键功能是一样的,当电脑死机的时候,我们可以不关闭电脑的电压,直接按下电脑的重启键,电脑便可以复位重启。
- 掉电/上电复位:当电源电压VCC低于.上电复位/掉电复位电路的检测门槛电压时,所有的逻辑电路都会复位。当VCC重新恢复正常电压时,单片机延迟32768个时钟后,上电复位/掉电复位结束。进入掉电模式时,上电复位/掉电复位功能被关闭。通俗的说,单片机上电的一瞬间会进行复位一次,和电脑开机一样。
单片机复位操作使单片机进入初始化状态,其中包括使程序计数器PC=0x0000H,这表明程序从0000H地址单元开始执行。有区别的是单片机冷启动后,RAM为随机值,运行中的复位操作不改变RAM区中的内容。而特殊功能寄存器复位后的状态都为确定值,具体可查看芯片手册。
单片机最小系统是由芯片外部接上时钟电路、复位电路和电源构成的一个基本应用系统。主要包含的部分,单片机、时钟电路、复位电路、电源电路、程序加载口(程序下载电路)。单片机芯片是一个微处理器,所编写的程序加载到单片机里才能够正常运行。如下图,STC89C52最小系统构成。
RAM:随机存取存储器(Random Access Memory,缩写:RAM),也叫主存,是与CPU直接交换数据的内部存储器。它可以随时读写(刷新时除外),而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储介质。
ROM(Flash):只读存储器(Read-Only Memory,ROM)以非破坏性读出方式工作,只能读出无法写入信息。信息一旦写入后就固定下来,即使切断电源,信息也不会丢失,所以又称为固定存储器。
如何区分RAM和ROM呢?我们买手机会有8GB+256GB的容量选择,这里就是我们所的存储器RAM和ROM的存储容量,无论手机还是电脑,容量小的一定是RAM,而容量大的一定是ROM。
问题:当我们在keil创建char c,的变量时,这个变量储存到哪里去了?
储存在内部RAM的低128个字节里,默认从0x08开始。
其实,我们平时定义变量类型一般都是默认加了data修饰,此方法定义的变量是存储到单片机内部RAM低128字节,响应速度快,采用直接寻址方式。
那么为什么从0x08开始呢?
因为单片机有一个8位的堆栈指针(SP),用于指向堆在区。单片机复位后,堆栈指针SP为07H,指向了RAM低128为的工作寄存器组中的07H。
SP的作用是用于保护在程序运行过程中的一些零时数据,例如在进入中断前会把程序计数器(PC)的地址存入堆栈中,这叫入栈。在退出中断的时候,又会把进中断前的存入的地址重新放到PC,这叫出栈。
什么是寄存器呢?
我们学习过数字电路应该知道,寄存器是用来存放二进制信息的,这些信息通常是代运算的数据、代码或运算中间的结果。因此,寄存器是电子计算机的主要部件电路。
明白了寄存器,我们思考一个问题,我们做单片机编程就是使用MCU控制单片机外设来完成我们想要实现的功能。
然而,CPU只有读和写这个操作,不能直接控制单片机的硬件,硬件一般是由其对应的控制器来控制的。当我们控制外设进行工作的时候,我们可以找到特殊功能寄存器(SFRs)的地址,然后通过C51指令“sfr”赋予特殊功能寄存器一个变量,这样后面的程序就可以通过这个变量指引该地址,通过改变这些地址的变量来达到控制外设的目的。通俗的说就是,通过读和写寄存器的变量来实现单片机控制外设目的。
如果每次都是以这种方式访问,不仅不好记忆还容易出错,这时我们可以给这些地址变量写一个“别名”,这个“别名”就是我们所说的寄存器了。
寄存器映射:存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程就称为存储器映射。
地址映射表:CPU读写操作都会有对应的地址,每一个模块都有自己的地址。
由于本人水平有限,本文章涉及理论知识较多,文中难免会存在疏漏和不足,敬请大家批评指正。