第1篇 基础认识篇——原来我是个菜鸟
对于我们不认识或认识不深的内容,我们要有自知自明:“原来我是个菜鸟!”。虽然我们目前是菜鸟,但我们不会是永远的菜鸟。
本篇包含6章,从认识什么是单片机到具体的单片机,从对单片机产生疑惑到解开该疑惑,不断深入地讲述单片机,带领菜鸟一步一步地走入单片机这个领域。本篇的具体内容为:第1章到第6章分别讲述单片机、单片机开发工具,AVR的I/O、USART(串口)、ADC(模数转换器)和EEPROM;每章都给出了相应实验的代码及仿真结果。这6章都是使用仿真软件来完成实验的,从中也可以增加读者对相关软件的熟悉程度。
第1章 初识单片机——与单片机第一次接触
当你第一次接触单片机时,看着那些小的芯片,一定很好奇它们是如何工作的?它们是如何将我们设计好的程序烧录进去?又是如何运行起来的?诸如此类的问题萦绕在你的脑海中,你一定渴望得到答案。下面就为此类问题给出答案,揭开属于我们菜鸟自己的篇章。
1.1 什么是单片机
什么是单片机?单片机的全称是单片微型计算机,是典型的嵌入式微控制器(Microcontroller Unit),常用英文字母的缩写MCU表示它。单片机又称为单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上,相当于一个微型的计算机。和计算机相比,单片机只缺少了I/O的对应设备。概括来讲,一片单片机就构成了一台计算机。单片机的体积小、质量轻、价格便宜,为学习、应用和开发提供了便利条件。因此,学习使用单片机是了解计算机原理与结构的最佳选择。
1.1.1 单片机发展的4个阶段
单片机最早被用在工业控制领域。当今,单片机技术已成为计算机技术领域中的一个非常重要的分支。在不断地发展与完善中,单片机技术已经建立起属于自己的技术特征和应用环境等。按照单片机的生产技术水平,单片机的发展可分为以下4个过程。
1.4位单片机阶段
1971年,美国得州仪器公司首次推出4位单片机TMS1000后,各个计算机生产公司也迅速推出了属于自己的4位单片机。例如,大家熟知的美国国家半导体公司(National Semiconductor,NS)的COP4XX系列就是4位单片机系列,日本电气公司(Nippon Electric Company,NEC)的μPD75 XX系列也是4位单片机系列。4位单片机的控制能力比较弱,多用于家用电器、电子玩具等控制器。
2.8位单片机阶段
美国的Inter公司在1976年9月推出了MCS-48系列的8位单片机,将单片机技术引入了8位单片机时代。随着半导体集成工艺的提高,各个MCU生产商纷纷推出了一些高性能的8位单片机。该类单片机集成了8位CPU、并行I/O、全双工串口、8位定时/计数器、A/D转换器,寻址范围超过4KB,并且具有更大的片内RAM和ROM等。其实,各个生产商生产的MCU都大同小异,只是有的MCU增加了D/A转换器、EEPROM及DMA传输功能等而已。8位单片机的控制能力较为出色,因此在各个行业中得到了广泛的应用。
3.16位单片机
16位单片机是在1983年以后发展起来的。顾名思义,此类单片机的CPU是16位的,其运算速度普遍高于8位单片机,并且外设接口更加丰富,支持高级语言等,多用于智能仪表等复杂的应用控制领域。典型的产品有美国得州仪器公司推出的MSP430系列单片机,它是一种16位超低功耗、具有精简指令集(RISC)的混合信号处理器(Mixed Signal Processor),称为混合信号处理器。
4.32位单片机
随着电子系统的迅速发展,32位单片机的应用前景广泛。32位单片机的字长为32位,为单片机中的顶端产品,具有极高的运算速度,其中部分产品还集成了内存管理单元(MMU),多用于嵌入式系统。美国微芯科技公司的PIC32系列,美国爱特梅尔半导体公司(ATMEL)的AVR32系列等都属于该类。
1.1.2 8位单片机的特点
从市场的需要情况看,当前8位单片机的市场依然最大。因此,8位单片机也有了新发展,主要体现在以下几个方面。
1.CPU功能增强
CPU的功能增强体现在CPU的运算速度和运算精度上。一般来说,旧的megaAVR系列单片机的最高频率为16MHz,新的兼容型单片机的最高频率达到20MHz,而ATMEL的Xmage系列单片机的最高频率可达到32MHz。
2.内部资源增加
在单片机硬件系统的设计中,都会考虑是否将资源集成到单片机内部,进而省去外部硬件开销,有效地减小产品的体积,提高产品的可靠性。现在已从集成一些总线的资源,如I2 C、SPI、CAN发展到集成一些特定功能的资源,如LCD驱动、电能计量等。
3.低电压、低功耗
当今社会一直都在提倡环保节能、降低能耗,在工业应用场合更注重这一方面。这对单片机系统的体积和功耗大小的要求是比较高的。单片机厂商改善工艺,纷纷推出了低功耗系列,其可用的最小电压在不断下降,并且提供了更多的模式来应对能耗的需求。
1.2 了解单片机
一般我们接触到的都是8位单片机,而且它是市面上最为常见的。下面介绍几种不同的8位单片机,并且给出一个例子来加以说明。
1.2.1 8051单片机
说起单片机,大家第一时间就会想到51单片机,大部分菜鸟起初接触到或了解到的一定是该类单片机,而805 1单片机又是其中的经典,学电子的朋友对此应该不陌生,很多书籍及教科书都以它为模板来讲述单片机这门课程。在805 1单片机中,又以Inter公司的MCS-5 1系列单片机较为有名。其以稳定的性能、高性价比及良好的兼容性,在各个领域得到了最为广泛的应用。
805 1单片机由于生产厂商和型号的不同,在片内存储器容量、外围功能模块、最高时钟频率及处理器速度等方面有很大的不同,但其内部结构基本相同,均包括算术逻辑单元ALU、片内RAM、片内ROM、I/O端口、定时系统、中断系统等基本的功能单元。如图1.1所示为805 1单片机的内部结构。
图1.1 805 1 单片机的内部结构
1.算术逻辑单元ALU
805 1单片机内部包含一个8位的算术逻辑单元ALU,用于处理各种算术运算和逻辑运算,并且能够完成数据传送、移位、判断和程序转移等操作。
2.片内RAM/ROM
805 1单片机提供了128B的片内RAM和至少4KB的片内ROM。RAM的地址空间为00H~7FH,其中00H~1 FH为4组通用工作存储器区,每个区包含8个编号为R0~R7的8位寄存器。此外,1 FH~2FH为位寻址空间。而ROM用于保存用户的程序指令。
3.I/O端口
805 1单片机共有32个I/O,即4组并行8位接口,分别为P0、P1、P2和P3。
4.定时系统
805 1单片机包含两个16位的定时/计数器,支持4种工作方式。
5.中断系统
805 1单片机的中断系统包含5个中断源,两级中断优先级,其中每个中断源的优先级是可编程的。
1.2.2 FREESCALE(飞思卡尔)单片机
接下来了解另一种单片机——FREESCALE(飞思卡尔)单片机。
飞思卡尔半导体已经成为全球最大的半导体公司之一,其主要的产品有8位微控制器、16位微控制器、32位微控制器与处理器、PowerArchitectureTM/PowerQUICCTM、高性能网络处理器、高性能多媒体处理器、高性能工业控制处理器、模拟和混合信号、ASIC、手机平台、CodeWarriorTM开发工具、数字信号处理器与控制器、电源管理、RF射频功率放大器、高性能线性功率放大器GPA、音视频家电射频多媒体处理器、传感器。在这里了解一下其生产的8位微控制器(以MC9S08AC系列为例进行介绍)。
MC9S08AC系列微控制器采用的是8位HCS08中央处理器,其CPU频率可达到40MHz,内部总线频率可达到20MHz,并且使用的是HC08的指令集。如图1.2所示是MC9S08AC系列MCU的模块结构图。
从图1.2可以看出,与51单片机相比,飞思卡尔单片机提供的外设是相当丰富的,除了一般的定时器、A/D转换器等外,还增加了串行通信接口模块、8位键盘中断模块及循环冗余校验模块。另外,其Flash与RAM更大了。这里具体介绍以下几个模块。
1.内部时钟发生器
内部时钟发生器提供多种时钟源,这使得用户能够非常灵活地根据成本、精确度、电流消耗及性能要求进行选择。该发生器包含四个功能子模块,分别是振荡器子模块、内部参考发生器、锁相环和时钟功能选择子模块。在实际开发中,不同产品对时钟的要求是不同的,不一定时钟高的就是好的。
2.IIC模块
IIC模块提供了接口给不同器件间通信的方法。该模块接口可以在最大的总线负载和时序下,支持最高100kbps的传输速率。器件也可以在较低总线负载下以更高的波特率(最高时钟/20)在该模块接口上运行。IIC模块的最大通信长度和可以连接的器件数量受400pF的最高总线电容限制。IIC模块的实际运用非常广泛,在后面的章节有详细的讲解。
3.串行通信接口模块
串行通信接口(SCI)也被称为通用异步收发器(UART)。该接口是全双工类型的,其发送器和接收器具有各自的双缓冲,并可分别使能。它可根据通信要求设定所需的波特率。
图1.2 MC9S08AC系列MCU的模块结构图
4.串行外设接口
串行外设接口(SPI)也是一个运用非常广泛的接口。它支持主或从工作方式、全双工或半双工、发送比特率可编程、MSB优先移位或LSB优先移位等。
5.循环冗余校验模块
循环冗余检验(CRC)模块是采用16位移位寄存器的硬件CRC发生器电路,其误码检测功能可以检测所有单、双数误码及大多数多位误码,而且还能编程初始速率和进行高速的CRC计算。
1.2.3 其他单片机
了解了以上两种单片机后,再来看看市场上还有哪些主流的单片机——AVR单片机、PIC单片机、STM单片机、MSP430单片机等。AVR单片机将是1.3节介绍的重点。每个单片机厂商生产的单片机都有属于自己的CPU内核,架构不同,寄存器也都不相同,而且每个厂商提供的开发环境也不一样,很少有一个开发环境兼容所有单片机类型。但是总的来说,单片机大体还是一样的,因此只要针对一种比较典型的单片机进行深入学习、实践即可,不需要对每一种单片机都进行从头到尾的学习及实践。对于不同类型的单片机,主要需要花时间学习的部分在于开发环境的熟悉与运用,以及和该单片机相关的寄存器的设置与运用。
1.3 接触AVR单片机
本节重点介绍ATMEL公司生产的AVR单片机,该类单片机是当前市场上比较具有代表性的一款单片机。
1.3.1 AVR概述
1997年,ATMEL公司的挪威设计中心的A先生和V先生出于市场需求的考虑推出了全新配置的8位精减指令集微处理器(RISC-Reduced Instrction Sot CPU),并起名为AVR。
AVR是一种指令内核的统称,其内部又分为ATtiny、AT90S和ATmega三大系列,分别对应AVR的低、中、高档产品。ATtiny系列中常用的有ATtiny10、ATtiny1634、ATtiny25等产品。AT90S系列中常用的有AT90S2313、AT90S8535、AT90S8515等,其中AT90S2313的引脚兼容AT89C2051,而AT90S8515的引脚则兼容51单片机,因此它在设计中很容易替代51单片机。但是到目前,AT90S系列的绝大部分已停产。当某一个AT90S系列的产品停产后,ATMEL公司通常会在ATmega或ATtiny系列中推出一个新的替代产品,在引脚兼容的基础上,该替代产品的内部资源和性能也得到了加强。例如,ATtiny2313作为AT90S2313的替代产品,在AT90S2313的基础上增加了片内标定振荡器、增强型上电复位、可编程的掉电检测等多种功能。类似的,ATmega8515和ATmega8535分别作为AT90S8515和AT90S8535的替代产品继承了很多Mega系列的特性。
ATmega48/88/168、ATmega8、ATmega16/32、ATmega64和ATmega128是ATmega系列的主流产品。值得关注的是ATmega8这一款单片机,它以丰富的片内资源、低廉的价格深受广大设计人员的喜爱,并在国内得到了较好的推广。然而ATmega48/88/168作为ATmega8的兼容产品,为用户提供了更多功能的选择。ATmega16也是一个用量较多的器件,它的引脚兼容AT90S8535,因此可以在某些应用场合用于替代AT90S8535。与ATmega8相比,ATmega16除了I/O引脚多之外,内部还集成了容量是ATmega8的两倍(16K)的Flash程序存储器。
随着国内AVR用户的增多,ATMEL公司也开始了主流器件数据手册的中文翻译工作。从互联网上可以找到ATtiny25、ATmega48/88/168、ATmega8、ATmega16/32、ATmega64等器件的官方翻译的中文数据手册,这给人们学习和使用AVR器件提供了很大的帮助。
目前,AVR又推出了功能更强大的Xmega系列的单片机,它和上述AVR单片机具有同一种内核,只是功能及资源更加强大了。
1.3.2 AVR的特性
前面介绍了AVR的起源、AVR系列及主流产品,相信读者对AVR单片机的总体有了一个大致的了解。接下来介绍AVR单片机的特性,并以ATmega系列中的ATmega88V/168V为例(其中以ATmega88V为主)进行介绍。
1.CPU
ATmega88V是一个具有高性能、低功耗的8位AVR微处理器,采用的是先进的RISC结构,拥有131条指令,并且大多数指令的执行时间为单个时钟周期。当工作时钟为16MHz时,它的指令处理速度高达16 MIPS(Million Instructions Per Second),且拥有32 ×8通用工作寄存器及只需两个时钟周期的硬件乘法器,使得运算更加快速。
2.存储器
ATmega88V拥有系统内可编程8KB的Flash空间,擦写寿命为10 000次,并且具有独立锁定位的可选Boot代码区,可实现系统内编程及真正的同时读/写操作。除了Flash位外,它还具有5 12B的EEPROM及1 KB的片内SRAM。
3.特殊的微控制器特点
ATmega88V可以设置为上电复位及可编程的掉电检测,并可设置几个参考值来应对不同工作电压下的掉电检测。它拥有经过标定的片内RC振荡器、片内/外中断源及5种不同的休眠模式(空闲模式、ADC噪声抑制模式、省电模式、掉电模式和Standby模式)。当产品要求在极低功耗下运行时,ATmega88V提供了以下工作模式来应对该要求:在正常模式下,当工作电压为1.8V、频率为1 MHz时,电流只有300μA;在掉电模式下,当电压为1.8V时,电流仅有0.5 μA。
4.电压范围
ATmega88V可以工作在1.8~5.5V之间,其电压范围大,有利于硬件电路的设计。
1.3.3 AVR的外设
如图1.3所示为AVR的结构方框图,从图中可以看出ATmega88V包括哪些外设资源。以下是对其中一些外设的简单概述。
1.定时器/计数器
ATmega88V具有两个有独立预分频器和比较器功能的8位定时器/计数器和一个有预分频器、比较功能和捕捉功能的16位定时器/计数器,并且支持PWM功能,可以实现可变PWM;它拥有独立的中断源,即比较和溢出两种中断源。有的定时器/计数器还可以实现自动加载。
2.A/D转换器
A/D转换器具有10位精度,最高分辨率时的采样率高达15 kSPS,且有6路复用的单端输入通道。它有连续转换和单次转换两种转换模式。
图1.3 AVR的结构方框图
3.USART模块
USART是一个高度灵活的串行通信设备,可以实现全双工操作,拥有高精度的波特率发生器。它有3个独立的中断:发送结束中断、发送数据寄存器空中断及接收结束中断,更方便运用。
4.串行外设接口(SPI)
SPI允许ATmega88V和其他AVR或其他类型的器件进行高速的同步数据传输。它可选择工作在主机模式还是从机模式,可实现全双工、3线同步数据传输。
5.两线串行接口(I2 C)
I2 C支持主机/从机操作模式。它拥有7位地址空间,其主机模式可支持最大128个从机地址,且数据传输率高达400kHz。
6.看门狗定时器(WDT)
WDT由独立的128kHz片内振荡器驱动,可以触发复位芯片的操作,用来防止程序进入死区。它还可以产生不同时间间隔的中断。
本节大体讲述了AVR的一些外设,关于其具体的设置与运用,将在往后的章节中一一与读者分享。
1.4 小结
本章对单片机的发展及其发展做了一些阐述,并介绍了几种市场主流的单片机类型。在介绍主流单片机时,着重对其结构给出了相应的图片,以便读者更好地了解所述类型的结构。1.3节介绍了本书中推崇的单片机类型——AVR,以让读者对AVR有一定的了解。