设计的世界

  • 家
  • 文章
    • 3 d CAD
    • 电子•电气
    • 紧固和连接
    • 工厂自动化
    • 线性运动
    • 运动控制
    • 测试与测量
    • 传感器
  • 3 d CAD模型
    • 一系列组织
    • TraceParts
  • 领导
    • 2020年的赢家
    • 2019年的赢家
    • 飞跃奖
  • 资源
    • 订阅
    • 数字问题
      • ee世界数字问题
    • 设计工程的未来
    • 飞跃奖
    • MC²运动控制教室
    • 运动设计指南库
    • 播客
    • 供应商
    • 在线研讨会
  • 工程妇女
  • 电子书/技术提示
  • 视频
  • 2019冠状病毒疾病

微控制器的初学者指南

经过艾美·卡诺斯卡斯|2015年12月2日

分享

乔恩·怀尔德

一次又一次,我看到初学者试图开始嵌入电子产品,只是不知所措,不知道从哪里开始。有些人甚至在没有完全理解他们所使用的微控制器/微处理器、所使用的编程语言、甚至是基本的编程概念的情况下就试图编写自己的代码。不过也不用担心,这篇文章应该是你涉足嵌入式电子领域的入门读物。

本文并不试图对任何特定的微控制器/微处理器教,但更多的是一种底漆的解释适用于所有的微控制器/微处理器的一般概念。

首先,让我们问自己几个问题。第一个问题是

什么是微控制器?
微控制器是芯片上的微型微型计算机。它具有CPU、RAM(随机存取存储器)、特殊功能寄存器、程序ROM存储器、数据ROM存储器、从一个到多个并行I/O(输入/输出)端口的任意位置,并且可以具有大量片上外围设备,包括但不限于模数转换器(ADC)、数模转换器(DAC)、串行UART、一个或多个定时器、,比较器/片内电压基准、捕获/比较/PWM(脉宽调制)模块、SPI(串行外围接口)/I2C(集成电路间)通信的主同步串行端口、USB端口、以太网端口、片内振荡器以及其他外围设备主机。

什么是微处理器(等等,你的意思是实际上有区别)?
微处理器和微控制器一样,只是没有芯片上的程序ROM。程序代码驻留在芯片外的一个单独的外部EPROM芯片。

程序ROM和数据ROM
微控制器上的片内ROM(只读存储器)就像微控制器的硬盘驱动器。它有两个分区。一个分区保留用于存储程序代码,而另一个分区保留用于永久存储芯片在正常程序执行期间使用的数据。在给定的PIC微控制器上,例如程序空间为8K,程序空间将占用ROM地址0x0000 - 0x1FFF(或十进制的0 - 8191)。数据空间将从程序ROM地址0x2100开始。如果数据ROM空间是256字节长,数据ROM空间将占用ROM地址0x2100 - 0x21FF(或十进制的8448 - 8704)。

CPU
CPU代表中央处理单元。它基本上是微控制器的“大脑”。这是什么获取从代码存储器中的指令并执行它取指令。

数据RAM
数据RAM (Random Access Memory)是用来临时存储微控制器在程序正常执行过程中所使用的常量和变量值的数据空间。一个给定的微控制器上的物理RAM空间的数量因微控制器的不同而不同。微控制器上的数据RAM被组织成几个“寄存器”,每个寄存器都有自己独特的“地址”。8位微控制器上的RAM寄存器总共可以容纳8位或一个字节的数据。一个典型的RAM空间规格可能指定为256 x 8。这意味着在RAM中总共有256个寄存器,每个寄存器可以容纳8位。

寄存器只是内存中的一个位置,你可以向它写入数据或从中读取数据。有些人把寄存器称为“位置”。

特殊功能寄存器
微控制器上的特殊功能寄存器(简称SFR)就像数据RAM中的寄存器一样。您可以向它们写入数据,也可以从它们读取数据。它们的不同之处在于,有些SFR直接控制微控制器上的片内硬件,而有些SFR是由微控制器上的片内硬件控制的。

SFR中的每一位都被赋给一个函数。在SFR中,你有控制位和标志位。控制位就像“开关”,打开或关闭一个函数,取决于你是否在SFR中写入1或0位位置。标志位就像“指示灯”,根据标志位是1还是0来指示给定条件是否存在。控制位直接控制硬件。标志位由硬件控制。在任何给定的程序中,我们通常在读取标志位的同时写入控制位(一些标志位必须通过手动写入来清除,这取决于微控制器……后面会详细介绍)。

微控制器上的每一块硬件将至少有一个SFR分配给它。一些硬件可能有几个SFR分配给它。请参阅微控制器的数据表以了解更多关于其特定SFR组织的信息。

配置位
大多数微控制器都有称为“配置位”的特殊位。这些位配置微控制器上的特殊选项,包括但不限于——

*振荡器类型
看门狗定时器开/关
*开启/关闭电源计时器
*掉电复位开/关
*低电压编程开关
*故障安全时钟监视器打开/关闭
*内部/外部切换开关

在PIC微控制器的,存在用于程序代码保护和数据保护代码甚至配置位。这些位防止程序或数据空间从外部编程硬件读取以防止其他人窃取您的密码。上的爱特梅尔AT89S芯片(8051衍生物),这是通过所谓的“锁定位”中设定。

有些将配置位称为“保险丝位”。这源于旧时代的微处理器,芯片上有实际的“保险丝”,如果某些保险丝位控制的功能关闭,保险丝就会熔断。这些保险丝是“一次性可编程的”……一旦熔断,就不会“通电”。然而,随着现代微控制器上闪存的出现,芯片上不再有文字上的“保险丝”。但是,由于配置位基本上提供了与保险丝位相同的控制,因此术语本身也随之产生。

的ALU(算术和逻辑单元)
该硬件主要负责微控制器执行的所有数学和逻辑操作。在大多数微控制器上,ALU将有3个与之相关的标志位-

*零位-当数学运算结果为0时,该标志位被硬件设置为1。当一个数学运算结果为非零时,它将被硬件清除为0。

*携带/借一点-该标志位作为加法操作的进位,而作为减法操作的借位。当加法运算的结果大于寄存器所能容纳的值时,就会出现进位。一个8位寄存器可以容纳255(十六进制FF或二进制11111111)的最大值。

如果一个加法操作的结果大于255,进位标志将被设置为1。如果一个加法操作的结果小于255,则不会发生进位,因此进位标志将被清除为0。

对于减法操作,进位标志作为借位标志。borrow标志的作用与carry标志相反。如果减法操作结果为负,则borrow标志被清除为0。如果减法操作的结果是正的,则borrow标志设置为1。

*该进位/借位-这个标志位和carry/borrow标志做同样的事情,但是它只用于指示carry/borrow是否只发生在第3位和第4位之间。

ALU标志位可以随时读取,以知道数学运算的结果是零、正/负、大于/小于,等等。

零位是一个方便的标志位,可以让我们比较两个值,看看它们是否相等/不相等。如果我们把两个数字并减去他们,结果将是零,如果相等,同时非零值,如果不相等。因此,要比较两个值,看看它们是否相等/不相等,我们减去它们,然后读/检查零位,看看该位是1或0。如果零位= 1,相减的结果是为零,这意味着这两个值是相等的。如果零位= 0,减法的结果为非零,这意味着这两个值不相等。

carry/borrow位是一个方便的标志,它允许我们比较两个值,看看一个值是否大于/小于另一个值。例如,我们有两个值:VALUE1和VALUE2。在代码中,我们执行这个操作-

Value1 - value2 = value3

一旦减法操作的情况下,我们再读取/检查进位/借位的高/低状态。

如果VALUE2大于VALUE1,减法的结果将为负,这将使进位/借用位清除为0。如果VALUE2小于VALUE1,减法的结果将为正,这将使进位/借用位设置为1。

查阅数据表,了解其中SFR包含这些位。在PIC微控制器中,ALU标志位居住在状态SFR。在MCS-51,他们居住在PSW SFR(程序状态字)。

程序计数器
程序计数器是一个“地址指针”,它告诉CPU在哪里找到下一条指令要在程序ROM中执行。CPU将获取当前加载在程序计数器中的程序ROM地址中的指令。

当微控制器复位时,程序计数器初始化为0x0000。CPU将获取驻留在程序ROM地址0x0000的指令。一旦获取了这条指令,程序计数器自动增加到0x0001的值。程序计数器连续自动递增1,这导致CPU依次访问程序ROM中每个寄存器位置的内容。它一直这样做,直到CPU获取并执行了一条修改程序计数器值的指令。这样的指令是跳跃指令(在MCS-51上的ajmp和ljmp,在PIC上的goto),子程序调用(在MCS-51上的调用和lcall,在PIC上的调用),以及任何在程序计数器上加或减一个值的指令。

堆栈
微控制器上的堆栈主要在子程序调用和跳转到中断处理程序期间使用。这是一个“后进先出”的缓冲区,用于存储返回地址。在子例程调用期间,当前程序计数器地址被“推”到堆栈上,并给它加一个+1偏移量,然后用被调用的子例程所在的地址值修改程序计数器。这使得程序计数器跳转到子例程代码以执行子例程。

在子程序结束后,将会有一个“返回”指令(关于MCS-51退役,在PIC的回报)。当返回指令的执行,堆栈“弹出”,并且这是压入堆栈的最后一个ROM地址值被弹出堆栈和回程序计数器的关闭。这使得程序计数器跳回到指令驻留调用该子程序(因此需要为1在该PC地址被压入堆栈中的时间偏移),和程序执行的指令后继续它离开的地方之前的子程序调用。

一些微控制器具有“软件堆栈”(MCS-51)。软件堆栈使用微控制器的一些内部RAM空间作为堆栈空间。其他微控制器有一个硬件堆栈(PIC)。对于硬件堆栈,堆栈是其自己的专用空间,与所有其他片上内存空间分开。

在一些微控制器上,堆栈是可写的。这允许我们在子例程调用和中断处理程序执行期间使用堆栈来临时备份关键寄存器。在执行子例程或中断处理程序之前,要备份的寄存器的内容被压入堆栈。然后,从子程序或中断处理程序返回之前,我们推到堆栈的内容的子例程将被弹出堆栈的一次,然后恢复到原来的位置在相反的顺序从如何推到堆栈(记得…后进先出)。

一个很好的例子是,在执行中断处理程序例程期间,我们如何备份MCS-51上的累加器和PSW寄存器——

代码(文本):

push ACC;将累加器备份到堆栈上
推动PSW;将程序状态字备份到堆栈上

在这里执行中断处理程序代码

POP PSW;恢复程序状态字
pop-ACC;恢复累加器
RETI;返回从中断主代码

如你所见,我们首先将累加器的内容压入堆栈,然后将PSW的内容压入堆栈。然后执行中断处理程序代码。

中断处理程序的执行时,PSW第一弹出后出栈,然后累加器由他们是如何被推弹出后,堆栈...顺序相反。

典型SFR
一个典型的SFR设置如下所示。

代码(文本):

|端口1 SFR |
———————————————————
|7 |6 |5 |4 |3 |2 |1 |0 |
| p1.7 | p1.6 | p1.5 | p1.4 | p1.3 | p1.2 | p1.1 | p1.0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |

这是用于并行端口1的MCS-51微控制器上的端口锁存器SFR。MCS-51上的每个端口是一个8位并行端口,端口SFR的每个位分配到端口上的每个引脚。P1.0是端口1上的引脚0,P1.1是端口1上的引脚1,P1.2是端口1上的引脚2,等等等等。

如图所示,我们将所有的零写到端口1锁存SFR的每个位上。这将把端口1上的所有引脚置于低状态(0伏)。如果我们将1写入任何端口SFR位,这将设置与我们在高状态(+5V)中写入“1”的位位置相关联的引脚。

例如,让我们将值01010101写入端口1 SFR——

代码(文本):

|端口1 SFR |
———————————————————
|7 |6 |5 |4 |3 |2 |1 |0 |
| p1.7 | p1.6 | p1.5 | p1.4 | p1.3 | p1.2 | p1.1 | p1.0 |
| 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |

如图所示,将P1.0、P1.2、P1.4和P1.6引脚置于高状态,而P1.1、P1.3、P1.5和P1.7引脚置于低状态。

数据表上的一个字......以及它们为何如此重要
并非所有的微控制器都是平等的。每一个都在芯片上设计了特定的硬件。不同制造商的微控制器都有不同的体系结构。你会发现PIC微控制器与MCS-51微控制器有很大的不同,正如MCS-51在SFR的实现方式、数据RAM的组织方式、指令集、配置字、并行端口的工作方式等方面与Motorola 65xx有很大的不同。

要确切了解如何使用微控制器及其硬件,唯一的方法是查阅其数据表。数据表解释了每个SFR、每个片上硬件、绝对最大电气额定值、程序/数据存储器组织、并行端口的接线方式及其工作方式、指令集摘要(适用于使用汇编语言编写代码的用户),等等。作为程序员,您需要了解的关于微控制器的几乎所有信息都在微控制器的数据表中。

他们大多是免费提供一个简单的谷歌搜索(我还没有找到一个不是)在线。指出你找不到数据表是不是可以接受的理由,当谈到这一点。唯一的原因,为什么会有人拒绝来查找数据表或者是因为他们太懒惰,他们不理解他们,但不希望别人知道他们不这样做。我现在虽然......关于微控制器可以一直自我最论坛问题解答抽出时间来查找答案的数据表中的人说。

数据表绝对是强制性的。没有它们,您将无法编写自己的代码。

jon-wilder-avatar-smallest关于作者
Jon Wilder是一名自由职业电子工程师和电子爱好者超过20年。他在美国海军当了四年的航空电子技术员。他从13岁开始弹吉他,从15岁开始将电子和音乐结合在一起。乔恩17岁时造出了他的第一个真空管放大器。“音乐电子产品”,乔恩说,是他的爱和激情。

乔恩也是一个频繁的贡献者和热情的成员电动技术在线工程社区。在电动技术在线从微控制器、可再生能源、汽车电子到电路模拟和设计,你可以向你的工程师同事提出问题并得到答案。此外,还有mcu特定的论坛8051/8951,AVR.,手臂,arduino.,Oshonsoft项目, 以及ASA代码存储库成员共享代码片段。

在推特上关注乔恩@PICmcuguy.

帖子微控制器的初学者指南首先出现了微控制器的技巧.


根据以下文件提交:技术+产品,单片机的技巧,微处理器


相关文章阅读更多>

okw
移动案例包括用于安装显示,按钮,LED的平滑顶级版本
密封件有助于电解制氢
as2100
高精度激光距离传感器可跟踪500米以外的目标
attabox
颜色控制视觉注意力

运动设计指南

“运动

ENEWS注册

运动控制教室

设计世界数字版

封面

浏览最新版本设计世界和背部问题,易于使用高质量的格式。立即剪辑,分享和下载领先的设计工程杂志。

EDABoard电子论坛

顶级全球问题解决EE论坛,涵盖微控制器、DSP、网络、模拟和数字设计、RF、电力电子、PCB布线等

EDABoard:电子论坛

赞助内容

  • 超宽带:在你开始之前要考虑的因素
  • 不锈钢,碳钢,还是玻璃纤维?如何为您的申请确定理想的外壳材料
  • 评估和设计多股输送机风格和解决方案的产品处理挑战
  • 使用超宽带的创造方式以及您需要知道的方法即可开始
  • HELUKABEL PVC控制和电机电缆获得ECOLAB认证
  • 电子阀技术

设计世界播客

2021年8月1日
航空航天和汽车添加剂制造的趋势
看到更多>
工程交流

工程交流是一个面向工程师的全球教育网络社区。

连接,分享,今天学习»

@DesignWorld的推文
设计的世界
  • 广告
  • 关于我们
  • 联系
  • 管理您的设计世界订阅
  • 订阅
  • 设计世界数字网络
  • 工程白皮书
  • 飞跃奖

Copyright©2021 WTWH Media LLC. All Rights Reserved。除非事先得到WTWH媒体的书面许可,否则不得复制、分发、传送、缓存或以其他方式使用本网站内容
隐私政策|广告|关于我们

搜索设计世界

  • 家
  • 文章
    • 3 d CAD
    • 电子•电气
    • 紧固和连接
    • 工厂自动化
    • 线性运动
    • 运动控制
    • 测试与测量
    • 传感器
  • 3 d CAD模型
    • 一系列组织
    • TraceParts
  • 领导
    • 2020年的赢家
    • 2019年的赢家
    • 飞跃奖
  • 资源
    • 订阅
    • 数字问题
      • ee世界数字问题
    • 设计工程的未来
    • 飞跃奖
    • MC²运动控制教室
    • 运动设计指南库
    • 播客
    • 供应商
    • 在线研讨会
  • 工程妇女
  • 电子书/技术提示
  • 视频
  • 2019冠状病毒疾病
我们使用cookies来个性化内容和广告,提供社交媒体功能,并分析我们的流量。我们还与我们的社交媒体、广告和分析合作伙伴分享您使用我们网站的信息,这些合作伙伴可能会将这些信息与您提供给他们的其他信息或他们从您使用他们的服务中收集的其他信息相结合。如果您继续使用本网站,您同意使用我们的cookies。 好吧没有阅读更多