微控制器编程入门外文翻译资料

 2021-12-30 09:12

英语原文共 221 页,剩余内容已隐藏,支付完成后下载完整资料


微控制器编程入门

第一章 什么是微控制器

随着时间的推移,越来越多的消费品中含有微控制器。目前微控制器的成本低至30美分[6],它们被用作以前使用晶体管-晶体管-逻辑的任务的简单解决方案。随着这些设备在工业和业余爱好电子设备中的大量使用,编程它们的能力对于可能尝试的任何项目都非常有用。

本文旨在介绍微控制器,并通过编程微控制器和使用各种外围设备,让新用户首次打开数据表。对于更高级的用户,本文将提供有关如何使代码更具可读性的建议,并提出良好的编码实践。虽然这将集中在单个微控制ATmega644p上,但所提出的想法对于当今可用的大多数微控制器都是有效的。

1.1微处理器、微型计算机和微控制器

虽然微处理器、微型计算机和微控制器都具有某些共同的特性,而且这些术语可以互换使用,但也有一些区别可以将它们分为不同的类别。

1.1.1微处理器

三类中最简单的是微处理器,也称为CPU(中央处理单元),通常位于诸如台式计算机之类的更大系统的核心,并且主要用作数据处理器。它们通常由算术逻辑单元(ALU)、指令解码器、多个寄存器和数字输入/输出(DIO)线组成(见图1.1)。一些处理器还包括诸如高速缓存或堆栈的存储器空间,相对于必须访问系统内存,其可用于更快速的临时存储和数据检索。此外,处理器必须连接到某种形式的数据总线,以访问处理器本身外部的存储器和输入/输出外围设备。

图1.1:微处理器的基本组件

根据存储器结构的不同,微处理器可能只有少数寄存器,例如用于跟踪下一条指令地址的程序计数器和用于加载和存储下一条指令的指令寄存器;或者可能有几十个寄存器。这些附加寄存器称为通用寄存器,用来存储数据。

1.1.2微型计算机

微型计算机在一个小型电路中包含计算机的所有组件,但不在单个芯片上。这一术语通常适用于笔记本电脑和台式计算机,但是已经不再使用这些设备。微型计算机的组件设备包括CPU(例如微处理器)、存储器(或)其他存储设备,以及IO设备(见图1.2)。I/O设备的几个例子包括键盘、显示器、网络等; 也可以是微型计算机用来收集或分发信息的任何设备。

图1.2:微型计算机的基本组件

1.1.3微控制器

在某些方面,微控制器是微处理器和微计算机之间的结合体。与微处理器一样,术语微控制器指的是单个器件,但是它包含单个芯片上的整个微型计算机。因此,微控制器将具有处理器、板载存储器以及各种IO设备。虽然使用微控制器代替微型计算机简化了整体设计,但要实现这一点,就会牺牲灵活性。一台微型计算机可以被设计成具有特定数量的存储器或附加装置。微控制器通常限于制造商规定的存储器大小和外围设备。微控制器及其功能有很多选择,但在某些情况下他们的能力仍然有局限。

由于微控制器更多的是被设计成独立的数据采集和控制设备,而不是微型计算机经常处理的人工交互或网络任务,因此它们的标准IO设备不同。模数转换器(ADCs)、定时器和外部中断是微控制器上常见的外设,而键盘、显示屏和其他用于控制个人计算机的设备则不然。

1.2内存模型

1.2.1冯诺依曼

冯·诺依曼结构以一位参与曼哈顿计划的科学家的名字命名。由于该项目的计算要求,他参与了EDVAC存储程序计算机的开发[12]。在此期间,他撰写了关于EDVAC报告的初稿,该报告成为冯·诺依曼结构的源头[21]。

第一台计算机和计算设备具有固定程序。这些程序以各种方式构建到机器中,要改变程序,机器通常必须重新构建。这包括大多数早期计算机,如ENIAC。这些重建可能需要数周时间,并占用很大比例的机器时间。

冯·诺伊曼结构通过将程序存储在存储器中(因此是存储程序)来解决这个问题。该存储器块在程序存储器和数据存储器之间共享,这允许将数据视为代码,反之亦然。此外,它允许使用自修改代码,这在架构的早期阶段非常有用,可以用来减少内存使用或提高性能[21]。

图1.3包含了冯·诺依曼结构的框图,它显示了控制单元、读取和解释程序的设备以及执行大多数操作的ALU都连接到的单个内存块。与CPU外部存储器通信的必要性导致了吞吐量限制,这称为冯诺依曼瓶颈[3]。由于控制单元和ALU都需要对存储器进行读写,因此共享系统中的有限资源(存储器访问时间),与其他架构相比,这一瓶颈在冯诺依曼结构下尤其严重。

图1.3:冯诺依曼架构的框图

1.2.2哈佛结构

冯·诺依曼瓶颈的一个解决方案是将程序存储器与数据存储器分开(见图1.4),这种分离允许对冯·诺依曼结构进行了一些改进。

第一个也是最明显的改进是可以同时访问程序存储器和数据存储器。在冯·诺依曼结构中,为了将来自寄存器的字通过ALU存储到存储器,控制单元必须首先加载并解释指令,然后ALU可以将数据传输到存储器中,最后控制单元可以转移到下一个指令,这要求沿同一路径进行两次单独的读/写操作。在哈佛架构中,可以同时执行对数据存储器的写入和对程序存储器的读取以用于下一操作,从而减少访问数据存储器的任何指令所需的时间。

一个不太明显的、可以大大提高操作速度的变化是,程序存储器中的字长不再需要是整数字节。这允许在单个指令中包含指令和存储器地址的较长的指令字,因此对程序存储器的每次读取和处理器的每个时钟周期都可以是整条指令。在冯·诺依曼结构中,指令通常是多个字,以包含操作码和所需的任何存储器地址。因此,上面给出的示例将需要三个读/写操作,而不是前面提到的两个或哈佛架结构单个操作。

图1.4:哈佛架构的框图

哈佛结构的主要缺点是它不能修改程序存储器,这限制了它在诸如个人计算机等一般系统中的实用性。 这对于更专用的处理器(例如嵌入式系统中的处理器)不会造成问题,但存储器带宽必须很高,因为每个周期可能有两个操作来访问存储器。Atmel公司生产的AVR系列微控制器和Microchip的PIC系列微控制器均为哈佛架构,虽然它们经过了略微修改,以允许对存储器进行读/写操作。这些操作主要用于引导加载程序。

1.2.3改进的哈佛结构

改进后的哈佛结构是冯·诺依曼结构和哈佛结构的混合体,它尝试获得每个结构的好处。具体而言,数据和程序再次共享一个类似于冯·诺依曼结构工作方式的存储空间,但数据和指令不共享高速缓存存储器或CPU与存储器之间的通路。这相比冯·诺依曼结构而言,内存访问的限制较少,但是哈佛结构缺乏将代码和数据视为一致的能力。使用这种结构的处理器最常见的例子之一是大多数个人计算机中的x86处理器。

1.3 堆栈

堆栈是内存中后进先出(LIFO)的部分,用于存储与过程调用相关的信息以及某些操作的数据。堆栈通常可以是具有固定或可变大小的通用存储器,或者具有固定大小的专用存储器块。在这两种情况下,处理器都有一个堆栈指针寄存器,指向堆栈中最近寻址的位置。在某些处理器中,堆栈从其内存块中的最高地址开始并向下增长,而在其他处理器中,堆栈从最低地址开始并向上增长。

LIFO(后进先出)指的是从存储数据位置读取数据的顺序。在LIFO(后进先出)中,最近存储到存储器的数据是在请求数据时读取的第一个数据。这是堆栈名称的来源,因为当所有可用的是顶级项目时,LIFO(后进先出)与创建某种形式的对象的堆栈之间的相似性。后进先出的替代方法是先进先出或FIFO。在这个范例中,只要请求数据,就会读取存储中最旧的数据。这通常被称为队列,因为它与结账台或等待银行收银员的队伍相似。

图1.5:后进先出存储(左)和先入先出(右)中请求数据的来源

基本堆栈仅支持两个操作:入栈和出栈。Push(入栈)操作将数据添加到堆栈顶部,增加堆栈指针,而Pop(出栈)将减小堆栈指针并返回堆栈顶部的数据。某些依赖堆栈执行其操作的环境偶尔会有另外的操作,例如peek(一个不改变堆栈指针的Pop操作),dup(一次出栈操作读取两个数据)或swap(切换堆栈上的前两项的顺序)。

除了堆栈之外,任何处理器都能够存储多个数据而无需访问系统的内存,尽管不同存储器的存储量不同。这些存储位置称为寄存器,虽然某些存储位置可能具有特定目的,但大多数处理器具有一些用于一般用途的通用寄存器(GPRs)。在专用寄存器中,有一个被称为程序计数器。该寄存器保存下一条要执行的指令的存储器地址。每当执行一条指令时,它就会增加,如果没有它,处理器就不知道在哪里寻找下一条指令。当函数调用发生时会发生什么?必须保留某种形式的返回地址,以便程序从被调用函数在内存中的位置返回到程序计数器之前的位置,这就是堆栈介入的位置。每当调用一个函数时,当前的程序计数器与其他一些数据一起被压入堆栈,被调用的函数存储器地址被输入到程序计数器中。在被调用函数结束时,旧程序计数器值将恢复,处理器将从中断处继续工作。

有人提到在函数调用期间还会将其他数据推送到堆栈。这些数据在某种程度上取决于编译器以及处理器可以执行的指令,因为并非所有处理器都具有相同的指令集。在输入新函数时,必须保存上一个函数的局部变量以进行恢复,并为创建的新变量保留空间。一些编译器和处理器使用的一种方法是在函数调用期间将所有GPRs的当前内容压入堆栈,然后恢复它们。 这在具有“全部入栈”指令的处理器中尤其常见,例如自80186以来的x86处理器(这些是自早期家庭计算以来台式计算机常见的处理器)。

第二种保存变量和寄存器当前状态的方法是,被调用函数只将它其实际使用的寄存器值压入堆栈。这在具有较小内存的处理器上是常见的,因此堆栈尺寸较小,例如大多数微控制器。

有两种与堆栈有关的错误:下溢和溢出。其中,下溢并不常见,最常出现在软件堆栈中,或者是恶意造成的。当堆栈为空时,尝试从堆栈中弹出数值会导致这种问题。另一方面,当尝试超过堆栈的最大大小时,会发生堆栈溢出错误。大多数情况下,当有太多函数调用嵌套在彼此内部时会发生此错误,例如使用递归。可以通过减少函数调用的深度或减少每个函数所需要的内存来解决此错误。

1.4小结

本章的目的是介绍一些术语,并提供了对微控制器实际内容的基本了解。 从现在开始,后面每章将涵盖微控制器的一些方面,包括它们的编程及其更详细的使用。本文主要围绕Atmel生产的ATmega644p微控制器,因此其他公司微控制器的使用者可能需要到其他地方寻找其设备上的特定信息。本文的目标之一是提供足够的背景,使读者至少可以使用任何一款Atmel微控制器,并理解其他公司的微控制器。

如果您对本章所述的病史或其他主题感兴趣,有许多来源可供进一步阅读。在谷歌或当地图书馆进行简短搜索会引起您强烈的兴趣,维基百科也是其他信息的良好来源,但必须谨慎对待可公开编辑的网站。更多的资源可以通过维基百科文章底部的链接获取。

第二章 数据手册、特殊功能寄存器和库

在开始深入研究微控制器之前,有一些重要的主题需要了解。这些主题与微控制器密切相关或直接相关,可帮助读者更好地理解后续章节中究竟发生了什么,以及所提供的信息来自何处。本章分为三个独立的部分,每个部分都有一个独立的章节。

第一部分是数据手册,分析示例数据表并解释其各个部分。特殊功能寄存器部分介绍了什么是SFRs以及如何在微控制器上对它们进行寻址。本章的最后一节提供了关于库的基本知识以及在ATmega644p编程中最常用的库。

2.1数据手册

数据手册是包含制造商提供的所有重要信息的文档,这些信息可以回答有关组件使用和操作的大多数问题。数据手册应该直接来自制造商或最常见的在线获取,可用于任何希望包含在项目中的电子元件。这包括电阻器、电容器和其他基本电气元件。

乍一看,图表、表格和文本页面的数据手册似乎有些令人望而生畏。这是因为数据手册提供了有关操作和使用的各种信息。通常,除非要在极端条件下使用该组件,否则实际上只需要一小部分信息,但搜索重要信息是读取数据手册的技巧所在。本书所讨论的数据手册的每个部分都将附有来自ST半导体公司的M74HCT08四路2输入与门[18]的示例。

同样重要的是要注意,没有标准数据手册这样的东西。以下信息很常见,但并非总是存在。此外,您可能需要多个文档来获得所需信息。如果找到的第一个数据表没有这些信息,请继续查看。可能有涵盖设备的不同方面或整个系列设备的通用方面的其他文档。

2.1.1部件名称

部件名称通常可以告诉人们很多信息。除了说明它是什么类型的设备(电阻器、H桥驱动器、传感器等),部件名称还将透露更多信息。在许多IC的情况下,部件名称将显示芯片上存在多少个设备副本。例如,包含基本逻辑门(AND、OR、NOT等)的IC通常每个芯片具有四个甚至八个门的副本。还可从部件名称中收集的其他信息包括设备精度的位数,例如模数转换器(ADC)或数模转换器(DAC)、电压范围(运算放大器、ADC、DAC)或最大功率(电阻)。这里的经验是始终阅读完整的部件名称,以防一些额外的重要信息包含在其中。

示例-四路2输入与门

此设备的名称指定了许多内容。首先,它的设备包含与逻辑门。其次,器件上有4个独立的通路。最后每个与门都限制在两个输入。与门至少需要两个输入,但是我们可以创建具有三个或更多输入的与门。

2.1.2 描述和操作

数据手册的前几页通常是文本。这几页包含对设备的具体内容的描述,以及它的工作原理,包括各种操作的延迟持续时间、发生情况的描述和错误的解释。这应该至少由不熟悉特定设备的人略读,而那些不熟悉该类型的人应该阅读整个部分。

示例

虽然在这种情况下描述非常短,但它确实提供了有关它可以与哪些类型的其他设备(TTL和NMOS)交互的信息。这涵盖了大多数其他逻辑组件,如果有疑问,也可以检查电气特性。

图2.1 与门数据手册的描述部分

2.1.3 绝对最大额定值

大多数数据手册都包含此部分。它列出了设备可以承受的最大电压

全文共5873字,剩余内容已隐藏,支付完成后下载完整资料


资料编号:[2927]

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。