什么是MCU:
顾名思义,单片在单片机中意味着只有一个芯片,而机器意思是电脑。只有一个芯片,却有简单电脑的功能。这个叫单片机,也教微处理器微控制器。广泛应用于各种电子设备和工业设备中。下面介绍一些单片机的基础知识。
学单片机难吗?应该说,对于已经有电子电路特别是数字电路基础知识的读者来说,它赢了这不会太难。如果你有一定的PC基础,学习单片机会比较容易。为了让绝大多数读者能够使用单片机。在这里,我们将本着深入浅出、理论联系实际的原则,尽力给读者介绍单片机的基本工作原理和使用方法,以达到带领大家进入门单片机的。但是,和PC一样,单片机是一项非常实用的技术。有人说电脑玩,单片机也是。只有更多播放,也就是多练习,多实际操作,才能真正掌握。因此,本次讲座将提供各种练习和实验,并介绍一些适合初学者且性价比较高的单片机源码和开发系统。只有认真完成这些实践环节,才能为进一步的学习打下良好的基础。
只要你有毅力和决心,并遵循我们的连载一步一步来,你将来一定能在单片机世界里漫游。
单片机的组成:
单片机自动完成运算最重要的部件是什么?
让让我们以珠算为例来计算一道算术题。例如:111+109 188-199 32。现在,我们首先需要一个算盘,然后是笔和纸。我们把要计算的问题记录下来,然后第一步是计算109188,把它加到111的结果写在纸上,然后计算19932,再从最后一个结果中减去,得到最终结果。
现在,我们用单片机来完成上述过程。显然,它首先必须有一个组件来执行运算,而不是算盘,这就是算术单元其次,要有能起到纸和笔作用的装置,即能记住原题、原始数据和中间结果,还要记住使单片机自动执行运算的各种命令。这种装置叫做记忆。此外,还需要有一个能代替人的控制器,它能根据事先给定的命令发出各种控制信号,使整个计算过程按部就班地进行。然而,仅仅这三个部分是不够的。需要输入原始数据和命令,需要依次输出计算结果,有时需要等待。
在上面的例子中,当计算163156时,数字36不能同时输入运算符。因此,有必要设置一个大门在单片机上根据控制器的命令进行动作,并在运算器需要的时候,让新的数据进入。或者,当算术单元得到最终结果时,会输出结果,中间结果可以不只是溜出去微控制器的。这种大门管理输入和输出数据的电路称为端口在单片机里。在单片机中,基本上有三种信息流。一类是数据,即各种原始数据(如上面例子中的36、163)、中间结果(如166344、余数30的商)等。),以及程序(命令集)。这样,外部设备通过端口然后将其存储在存储器中。在运算过程中,数据从内存读入运算器进行运算,运算的中间结果存储在内存中,或者最终由运算器通过端口。
由用户执行的各种命令(程序单片机也是从存储器中以数据的形式送到控制器,由控制器解释(解码)成各种控制信号,从而执行各种具有加减乘除等功能的命令。因此,这种信息称为控制命令,即控制器控制运算器一步步地进行运算和处理,同时也控制存储器的读(取出数据)和写(存储数据)。第三种类型的信息是地址信息,用于告诉算术单元和控制器在哪里获取命令和数据,在哪里存储结果,以及通过哪个端口输入和输出信息。
内存分为只读内存和读写内存。前者存储调试好的固定程序和常量,后者存储一些可能随时变化的数据。顾名思义,数据一旦存储在ROM中,就只能读取,不能更改(EPROM、E2PROM等类型的ROM可以用一定的方法进行更改和写入)。读写存储器可以随时存储或读取数据。
实际上,人们通常将运算器和控制器的组合称为中央处理器——CPU。单片机除了运算,还要完成控制功能。所以计数和计时缺一不可。所以单片机里有定时器和计数器。至此,我们知道了单片机的基本组成,即单片机由中央处理器(即CPU中的运算器和控制器)、只读存储器(通常指ROM)、读写存储器(也指RAM)、输入/输出端口(也分为并口和串口,简称I/O口)等组成。其实单片机里面有一个时钟电路,可以让单片机有节奏的运行和控制。此外,还有所谓的中断系统,它具有消息室。当单片机控制的对象的参数达到某个需要干预的状态时,可以通过这个消息室,以便CPU可以根据外部事件的优先级采取适当的措施。
现在,我们知道了单片机的组成,剩下的问题就是如何把它们的各个部分连接成一个相互联系的整体。事实上,有一个链接连接它们的单片机内部,也就是所谓的内部总线。这辆公共汽车就像一辆主干道在一个大城市里,CPU、ROM、RAM、I/O端口和中断系统都分布在这个巴士并与之相连。所以所有的指令和数据都可以通过内部总线传输,就像大城市的各种货物都是通过主干道传输一样。
半导体存储器的工作原理
内存分为只读内存和读写内存。前者存储调试好的固定程序和常量,后者存储一些可能随时变化的数据。顾名思义,数据一旦存储在ROM中,就只能读取,不能更改(EPROM、E2PROM等类型的ROM可以用一定的方法进行更改和写入)。读写存储器可以随时存储或读取数据。
内存的内部结构
看下图。这是半导体存储器的结构图。
存储器的工作原理
内存是存储数据的地方。它实际上是用高低电平来存储数据的,也就是说,它实际上存储的是高低电平,而不是我们习惯思考的东西。
有了这样的结构,我们就可以开始存储数据了。例如,我们必须输入一个数据。
这个数字是如何工作的?看上面的图表。这是内存的内部结构图。记忆就像一个小抽屉。在一个小抽屉里,有八个8位的盒子,也就是单片机。每个盒子用来储存一位电荷。至于电荷是如何储存在小盒子里的,我们不你不必为此担心。你可以把电线想象成水管,小盒子里的电荷就像水一样。那很好。知道内存中的一个小抽屉,我们称之为相当于一个字节的单位,相当于一位0011010的小盒子。我们所要做的就是在第二个、第四个和第五个小盒子里装满电荷,同时把其他小盒子里的电荷卸掉。但是问题又出现了。在存储器中有许多并联连接的相同的单元线。当D7-D0将电荷放入所有的字节单元并释放电荷时,当每个单元中的电荷都被放电时,无论内存中有多少字节,都只能存储相同数量的单元,这当然不是我们想要的。因此,我们不得不在结构上稍作改变。看上面的图表。每个单元都有一根电线连接到解码器。我会通过解码器向我想要放入数据的细胞发出信号,解码器会通过这根导线打开相应的开关,让电荷自由进出。那么,它能跟得上吗?实际上,我们可以继续在内存中读取或写入数据。D7-D0连接有另一个控制器。它是用来做什么的?这条线被称为写/读控制线。当我们将数据写入内存时,我们必须将这个开关切换到写入端,但当我们想要读取数据时,我们必须首先将开关切换到读取端。片选端用于区分不同的内存设置。它这里不清楚。这不没关系。后面会有介绍。让让我们先看看解码器是如何工作的。
三
半导体存储器的解码
简单来说,我们知道一条线可以代表两种状态,两条线可以代表四种状态,三条线可以代表八种状态,256种状态,那么需要多少条线来代表我们自己呢?你就当是八行吧。
至此,解码的问题已经解决。让让我们注意另一个问题。送入每个字节的八根线是从哪里来的?它取自单片机的外部引脚。通常,这八根线必须连接到除存储器之外的其他设备。这个问题又出现了。由于这八根线不是存储器和单片机之间的专用线,所以如果某个单元一直连在这八根线上就不行了。例如,这个存储单元中的值是11111。1另一个内存的单位是0000000,所以不管这一行是高电平还是低电平,我们都要把它们分开。当然,方法很简单。当外接线路连接到集成电路的管脚时,并不是直接连接到各个单元,而是在中间加了一组开关。这组开关就是前面提到的控制器。看前面的图。通常,我们让开关开着。如果真的有必要将数据写入这个内存或者从内存中读取数据,那就随它去吧。换到相应的位置就行了。这组开关通过三根引线选择读控制端、写控制端和片选端。写数据时,控制器先选择芯片,然后发出相应的写信号。开关切换到相应的位置,并将转移的数据电荷写入芯片。如果读信号先选择芯片再发出读信号,开关也切换到相应位置,数据发出。此外,读和写信号也由解码器控制。因为片选端子不同,虽然有读或写信号,但没有片选信号,所以对方存储器赢了不要被误解,门会被打开,引起冲突。那么,两个记忆会同时被选中吗?只要是设计好的系统就行,但是如果同时选择了两个存储器,就是电路出问题了。八条线不是专用的,但是很多设备是大家共享的,所以我们称之为数据总线。英文名为BUS,即任何人都可以在公交车道上行走,有16条地址线51单片机有16条地址线。这些后面会解释。没有
看起来内存写或读数据并不容易,但好在这些都是计算机自动完成的,所以我们不不需要担心它。从上面的介绍中,我们看到了它是用来传输数据的。
单片机的中央处理器
实际上,人们通常将运算器和控制器的组合称为中央处理器——CPU。单片机除了运算,还要完成控制功能。所以计数和计时缺一不可。所以单片机里有定时器和计数器。至此,我们已经知道了单片机的基本组成,即单片机是由中央处理器(即CPU s运算器和控制器)、只读存储器(通常指ROM)、读写存储器(也称RAM)、输入/输出端口(也分为并口和串口,简称I/O口)等等。其实单片机里面还有一个时钟电路,让单片机有节奏的运行和控制。此外,还有所谓的中断系统,它具有消息室。当单片机控制的对象的参数达到某个需要干预的状态时,可以通过这个消息室,以便CPU可以根据外部事件的优先级采取适当的措施。
现在,我们知道了单片机的组成,剩下的问题就是如何把它们的各个部分连接成一个相互联系的整体。事实上,有一个链接连接它们的单片机内部,也就是所谓的内部总线。这辆公共汽车就像一辆主干道在一个大城市里,CPU、ROM、RAM、I/O端口和中断系统都分布在这个巴士并与之相连。所以所有的指令和数据都可以通过内部总线传输,就像大城市的各种货物都是通过主干道传输一样。
单片机指令系统与汇编语言程序
上面已经描述了单片机的几个主要部件,它们构成了单片机的硬件。所谓硬件,就是看得见摸得着的实体。但仅靠这样的硬件,只能实现计算和控制的功能。要真正实现计算和控制,单片机还必须有软件的配合。软件主要是指各种程序。仅由倒(存储)各种正确的程序到单片机中,它才能有效地工作。所以单片机能自动进行计算和控制,正是因为人们预先把实现计算和控制的步骤以命令的形式一步一步地存储下来,也就是预先有指令。单片机在CPU的控制下,一条条取出指令,翻译执行。就将两个数字相加的简单操作而言,在将要计算的数字存储在存储器中之后,需要以下步骤:
第一步:将第一个数字从其位置中取出,并将其发送到算术单元。
第二步:将第二个数从其存储单元中取出,并发送给运算单元;
第三步:添加;步骤4:将相加的结果发送到存储器中的指定单元。
所有这些操作,如获取、发送、添加、存储等。都是操作。我们以命令的形式写下计算机需要执行的各种操作,这些命令就是指令。但是我们如何识别和执行这些操作呢?这是由设计者在设计单片机时给它的指令系统决定的。对应于基本操作的指令;单片机能执行的所有指令都是它的指令系统(指令集)。不同种类的单片机有不同的指令系统。
使用单片机时,要解决的问题要事先编译成一系列指令。这些指令必须被选定的MCU识别和执行。单片机为解决自身问题而编制的指令程序称为源程序。指令通常分为两部分:操作码和操作数。操作码表示计算机执行什么操作,即指令的功能;操作数表示操作符的数量或操作数所在的地址(即存储操作数的位置的数量)。因为单片机是可编程器件,它只能认识到二进制代码(0,1)。要操作单片机,单片机系统中的所有指令都必须以二进制代码的形式表示。例如,在Intel公司的MCS-51系列单片机中,CPU(运算器中,参与运算并存储运算结果的专用寄存器)中从存储器取出一个数到累加器的指令代码是74H,累加器内容加立即数的代码是24H,累加器到内部RAM存储器的代码是F6H~F7H等。这些指令是用十六进制表示二进制的机器代码。
MCS-51单片机的字长为8位。有时候,一个字节可以不能完全表达某些操作。因此,指令系统中有单字节指令和多字节指令。机器码是由一系列0和1组成的,没有明显的特征,难以记忆、理解和出错。所以直接用它写程序是非常困难的。所以有些助记符(muemonic) 3354通常是指令功能的英文缩写,而不是操作码。例如,MOV(缩写MOV(Move)和ADD(ADD的缩写)常用作MCS-51中传输数字的助记符。这样每个指令都有明显的动作特征,容易记忆和理解,不容易出错。用助记符编写的程序被称为汇编语言程序。而用助记符写的程序,人们很容易理解,但单片机只知道二进制机器码。因此,为了使单片机阅读汇编语言程序必须转换成由二进制机器码组成的程序。这个转换过程被称为装配。汇编可以通过手工查表的方法来实现,或者通过所谓的交叉汇编程序个人电脑。一旦用户程序由机器码进入单片机,然后开始单片机,它能执行输入程序指定的任务。
MCU - 51 CPU和内存
8051的CPU由运算器和控制器组成。
一、运算单元
算术单元以二进制算术/逻辑运算单元ALU为核心,并配备有寄存器TMP、累加器ACC、寄存器B、程序状态标志寄存器PSW和布尔处理器。ACC是一个八位寄存器,在CPU中工作最频繁。在进行算术和逻辑运算时,累加器ACC往往在运算前临时存储一个操作数(如被加数),运算后再保存结果(如代数和)。b寄存器主要用于乘法和除法运算。标志PSW也是一个八位寄存器,用来存储运算结果的一些特征,比如有无进位,有无借位等。每个词的具体意思如下。PSW CYAC FORS1RS0OV-P对于用户来说,他们最关心的是以下四位。
1进位标志CY(PSW \u 7)。它指示操作是否有进位(或借位)。如果运算结果最高位有进位(加)或借位(减),则该位为1,否则为0。
2辅助进位标志AC。也称半进位标志,反映两个八位运算的低四位是否有半进位,即低四位是否加(或减)和进位(或借位)。如果是,AC为1状态,否则为0。
3溢出标志位OV。MCS-51反映有符号数的运算结果是否有溢出。如果有溢出,该位为1,否则为0。
4奇偶标志p .反映累加器ACC内容的奇偶性。如果ACC中的运算结果有偶数个1(如11001100B,其中有4个1),则P为0,否则P=1。
PSW的其他位将在后面介绍。因为PSW存储的是程序在执行中的状态,所以也叫程序状态字?在运算器中,还有一个逻辑处理器(也叫布尔处理器),根据位进行逻辑运算。它的功能将在介绍bit指令时解释。
二、控制器
控制器是CPU的神经中枢,包括时序控制逻辑电路、指令寄存器、译码器、地址指针DPTR、程序计数器PC、堆栈指针SP等。这里,程序计数器PC是由16位寄存器组成的计数器。要执行一个程序,单片机必须将程序按顺序预装入存储器ROM的某个区域。单片机移动时,要把指令一条一条拿出来,才能执行。所以必须有一个电路能找到指令所在单元的地址,那个电路就是程序计数器PC。当单片机开始执行程序时,它把第一条指令的地址装入PC机。它每取出一条指令(如果是多字节指令,每取出一个指令字节),PC的内容就会自动加1指向下一条指令的地址,这样指令就可以按顺序执行了。只有当程序遇到一个传送指令,一个子程序调用指令,或者一个中断(后面会讲到),PC才会去要求的地方。8051 CPU,C指定的地址,从rom的相应单元中取出指令字节,存入指令寄存器。然后,指令寄存器中的指令代码被解码器翻译成各种形式的控制信号。这些信号在时序和控制电路中与单片机时钟振荡器产生的时钟脉冲相结合,形成按一定时间节拍变化的电平和时钟,即所谓的控制信息,协调CPU内部各寄存器之间的数据传输和运算。
三、内存
它是存储器微控制器的另一个重要部分。每个存储单元对应一个地址,256个单元有256个地址,用两位十六进制数表示,即存储器的地址(00H~FFH)。存储器中的每个存储单元可以存储一个八位二进制信息,通常用两个十六进制数字表示,这就是存储器的内容。内存位置的地址和内存位置的内容是两个不同的概念,不能混淆。
一、程序存储器
程序是一系列控制计算机的命令而单片机只知道由0 & gt;和1 代码。例如,以助记符书写的前述命令MOV A,# 20H被机器识别的代码74H、20H(以二进制书写的01110100B和00100000B)代替。单片机在处理问题之前,必须事先将编制好的程序、表格、常数等编译成机器码,然后存储在单片机的存储器中,称为程序存储器。程序存储器可以放置在片内或片外,也可以设置在片内或片外。由于PC程序计数器是16位,程序存储器可以使用16位二进制地址,因此内部和外部存储器的地址范围最多可以从0000H到FFFFH。如果8051内部有4k字节的ROM,从0000H~0FFFH占用最低4k字节。此时,片外扩展的程序存储器的地址号应该从1000H开始。如果将8051作为8031,而不是使用片内4kROM,地址号仍然可以从000h开始。但此时8051的第{ 31 }脚(即EA脚)要保持低电平。EA为高电平时,用户在0000H至0FFFH范围内使用内部ROM,大于0FFFH时,MCU CPU自动访问外部程序存储器。
二、数据存储
单片机的数据存储器由读写存储器RAM组成。其最大容量可扩展至64k,用于存储实时输入数据。851有256个单元的内部数据存储器,其中00H~7FH为内部RAM,80H~FFH为专用寄存器区。在实践中,首先要充分利用内存。从使用的角度来看,弄清内部数据存储器的结构和地址分配是非常重要的。因为它们在未来的学习指令系统和编程中会经常用到。851内部数据存储器的地址从00H到FFH共有256字节的地址空间,分为两部分,内部数据RAM的地址为00H~7FH(即0 ~ 127)。用作特殊功能寄存器的地址是80HFFH。在这256字节中,还有一个所谓的位地址区域,不仅可以按字节寻址,也可以按位寻址。对于需要位操作的数据,可以存储在这个区域。从00H到1FH排列四组工作寄存器,每组占用8个RAM字节,标记为R0 ~ R7。选择哪组寄存器由上述标志寄存器中的RS1和RS0选择。通过在这两个位上放置不同的二进制数,可以选择不同的寄存器组。
三、特殊功能寄存器
特殊功能寄存器(SFR)的地址范围是80HFFH。在MCS-51中,除程序计数器PC和四个工作寄存器区外,其余21个特殊功能寄存器都在这个SFR块中。其中5个是双字节寄存器,总共占用26个字节。特殊功能寄存器的符号和地址见表2。其中带*号的位可寻址。特殊功能寄存器反映8051的状态,实际上是8051的状态字和控制字寄存器。CPU的PSW就是一个典型的例子。这些特殊功能寄存器大致分为两种,一种与芯片的管脚有关,另一种用于控制芯片上的功能。与芯片引脚相关的特殊功能寄存器是P0 ~ P3,实际上是四个8位锁存器(每个I/O端口一个)。每个锁存器都附有相应的输出驱动器和输入缓冲器,以形成并行端口。MCS-51有四个并行端口(P0 ~ P3),可提供32条I/O线。每条线都是双向的,大部分都有第二种功能。在用于芯片控制的其它寄存器中,累加器A、标志寄存器PSW、数据指针DPTR等的功能。其他寄存器的功能将在后面进一步介绍。
单片机的指令系统和寻址方式
单片机要正常运行,需要事先编译好程序,然后把程序放入内存,再由CPU执行程序。程序由指令组成,指令的基本组成部分是操作码和操作数。单片机有很多种。在设计的时候,对于操作码和操作数的表达方式都有自己的规定,指令代码也有所不同。因此,我们必须对所选单片机的所有指令有足够的了解,也就是所谓的指令系统。虽然每个系列的单片机指令系统不同,但也有其共性。掌握一个单片机的指令系统,可以起到和其他系列单片机类似的作用。MCS-51单片机应用广泛,衍生产品多,具有代表性。因此,本文以MCS-51系列指令系统为例,说明说明。
1、MOV A,#20H
该指令表示20H的数字被发送到累加器A(一个特殊功能寄存器)。
2、添加A,70H
该指令是指通过算术逻辑单元(ALU)将累加器A的内容(上例中发送的#20H)与地址为70H(也是一个数)的存储单元的内容相加,并将结果保存在A. MOV、add等中。被称为操作码,而A、# #20H、70H等。被称为操作数。在汇编语言程序中,操作码通常由英文单词缩写而成,有助于记忆,所以也叫助记符。比如MOV是英文单词MOVE的缩写,意思是移动;ADD是一个英文单词,意思是添加。所以对于懂一点英语的用户来说,掌握单片机指令的含义会更方便。操作数的表示有很多种,比如上面的# 20H叫立即数,也就是20H是实操作数。70H是存储器中放置操作数(比如3AH)的位置的地址。不是把70H和A的内容相加,而是加A,70H从内存70H位置取出3AH,把A的内容相加,从上面可以看出,要找到实际的操作数,有时候要拐一个弯,甚至拐几个弯。这个过程称为寻址。MCS-51有七种寻址模式,介绍如下:
一、立即联系:
操作数被写入指令,并与操作码一起放入程序存储器。放# 在立即数前面表示寻址方式是立即寻址,如# #20H。
二、寄存器寻址:
操作数放在寄存器中,操作数的地址直接用指令中寄存器的名称来表示。比如MOV A和R0属于寄存器寻址,即R0寄存器的内容送到累加器A
三、直接寻址:
操作数放在单片机内部RAM的一个单元中,单元的地址直接写在指令中。与上例一样,在70H中添加A,70H。
四、寄存器间接寻址:
操作数放在一个RAM单元中,该单元的地址放在寄存器R0或R1中。如果RAM的地址大于256,则该地址存储在16位寄存器DPTR(数据指针)中。此时,在寄存器名称前添加一个@符号来表示这种间接寻址。比如MOV A,@ R0。还有其他的索引寻址、相对寻址、位寻址等。后面会详细介绍。有人可能会问,是不是在指令中直接给出实际操作数不是简单明了的吗?为什么要使用其他寻址方式?这是因为编程时很难一次给出操作数。比如用单片机控制温度时,总是需要从给定的控制温度(如20)中减去环境温度,但环境温度是时变的,这在程序指令中显然是无法给出的。只是通过一定的方式,送到一个输入/输出端口,然后存入一个寄存器,这就需要寄存器寻址。再比如进行算术运算,计算各科各班学生的平均分。给每个学生编一个程序显然太麻烦科目,直接给学生在节目中各科的分数,然后算出平均分。在这里,我们可以编写一个通用的程序来查找平均分数,并发送给每个学生分数到内存的每个单元。这时可以采用直接寻址,每个学生用一个程序。不是这不是更方便吗?所以寻址方式越多,编程就越方便灵活,适用范围就越广。
称呼就像找人。如果被寻人有手机、BP机、座机电话等多种联系方式。很容易找到他。单片机也是如此。寻址方式越多,查找操作数就越方便,单片机的功能就越强。在介绍51系列单片机的寻址方式时,经常会遇到一些寄存器,累加器A,通用寄存器R0 ~ R0~R7、数据指针DPTR,内存等等。当将来引入指令时,数据将在这些寄存器和存储器之间传输或计算。所以编程的时候要熟悉单片机的内部结构。
851单片机的内部整体结构有以下基本特点:
8位CPU,片内振荡器
4k字节ROM,128字节RAM
21个特殊功能寄存器
两条输入输出线
可寻址的64k字节外部数据和程序存储sp
位寻址(即可以找到一位的内容)功能,适用于逐位执行逻辑运算的位处理器。除了128字节RAM、4字节ROM、中断、串口和定时器模块,还有四组I/O口P0 ~ P3,剩下的就是CPU的整体构成。用EPROM代替4kROM是8751的结构。如果去掉ROM/EPROM,就是8031的框图。如果用Flash存储器或EEPROM代替ROM,或者省略一些I/O,就可以得到89C51、AT89C2051等51系列衍生物的框图。
MCU的各个部分通过内部总线有机地连接在一起。学习完以上的单片机基础知识,你应该对单片机有个大概的了解。