AVR单片机应用技术项目化教程(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-26 18:43:54

点击下载

作者:欧阳明星

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

AVR单片机应用技术项目化教程

AVR单片机应用技术项目化教程试读:

前言

单片机具有体积小、价格低、开发周期短等特点,广泛应用于各行各业。随着电子技术的飞速发展,单片机工艺及技术得到长足的进步,向体积更小、性能更好、速度更快、功能更强的方向发展,众多新型单片机应运而生。在众多工程应用领域,新型单片机与传统结构单片机面临竞争,然新型单片机无论在体系结构、内部组成都有其自身的特点,在资源、速度、性能、价格等方面有显著特点,故应用上具有明显的优势。AVR单片机是一种比较流行的新型单片机,自诞生以来,以其速度快、功能强、可靠性好等特点,颇受工程技术人员欢迎,并迅速应用于诸多领域。

随着经济快速发展和技术不断进步,行业企业对人才需求出现新的变化,对从业人员的知识和技能有较高的要求,尤其是在嵌入式编程技术领域,这对高职教育提出新的要求。近来,各高职院校按照教育部的教学改革要求,不断开展各种形式的课程改革与专业建设,使高职教育有了较快发展,企业对职业教育的认知度和认可度逐年提高。本书结合当前职业教育的特点,注重动手能力的培养,以项目为载体,以任务为驱动,系统而深入地介绍AVR单片机编程及应用技术。

本书介绍了单片机的基础知识、AVR单片机内核结构和应用,系统阐述了ATmega16单片机的原理、结构与应用。项目由简入繁,全部在虚拟平台或实物板调试通过,并给出源程序、流程图、原理图、波形图等。内容由浅入深、完整翔实、逻辑清晰、例程丰富,力求使读者易于接受,以便不同层次读者自学。总体而言,本书有以下几个方面特点:

1.结构合理,层次分明,逻辑清晰。本书重构教学内容,在编排上注重结构合理、层次分明,逻辑清晰,以便适合不同层次读者自学。

2.强调动手能力的培养,符合职业教育特点。本书以项目为载体,以任务为驱动,体现职业教育的特点,内容上便于实施“教、学、做”一体化教学。

3.精选项目案例。结合教学内容,精选项目案例以体现教学内容,融入教学目标,项目寓趣味性和实用性于一体,对提高学生技能有明显帮助。结合高职学生特点,在项目选择上,贴近实际,难易适度,大多数项目均具有很强的可操作性,对仪器工具、调试条件没特殊要求。

4.使用C语言编程。全书所有项目、例题均使用编程效率高、可移植性好的C语言编程实现,可读性好。

5.借助虚拟仿真平台辅助教学手段。借助虚拟仿真实验平台无论是在教学还是工程项目开发中都是有效而快捷的手段。通过Proteus软件仿真模拟单片机运行过程,学生能直观地看到程序运行结果,边讲、边做、边练习,是现今比较流行的单片机一体化教学手段。

6.传统与现代结合。无论是“传统教学”还是现代流行的“项目式教学”,均有各自不可忽视的缺点,本书取二者之长处,扬长避短,既不失传统教学的系统连贯性,又不失项目教学的实践性,二者相得益彰。

本书的编写参考了国内外有关单片机及其他相关书籍和资料,在此向有关作者表示感谢,本校电子创新实验室的学生对项目程序的调试做了许多工作,在此表示感谢。限于时间仓促和作者之水平,本书错误之处在所难免,恳请广大读者批评指正。如有意见或建议,请发邮件至kjdx2005@126.com联系。

编 者

2012年6月

于广东松山职业技术学院项目1 单片机基础

单片机是一种集成CPU、存储器、I/O设备的可编程半导体集成电路芯片,属于微型计算机的一种类型。单片机具有体积小、集成度高、功能强、使用灵活、价格低廉、稳定可靠等优点,被广泛应用于家用电器、智能仪器、电子通信、工业控制等领域。微型计算机有传统的冯·诺依曼和哈佛结构,有单时钟周期结构CPU和多时钟指令CPU,流水线指令技术亦在单片机中有应用,这些新技术极大提高了单片机的性能。任务1.1 计算机数学基础1.1.1 数制

所谓数制就是数的制式,是人们利用符号计数的一种科学方法。数制的种类繁多,常用的数制有二进制、十进制、十六进制等。

进位数制的特征概括如下:(1)有一个固定的数基r,数的每一位只能取大于等于0、小于r的数,即符号集为{0,1,2,…,r-1};ii(2)逢r进位,它的第i个数位对应于一个固定的数值r,r称为该数的“权”。小数点左边权值为数基r的正次幂,依次为0,1,2,3,…,m次幂,小数点右边权值为数基r的负次幂,依次为-1,-2,-3,…,-m。在计数过程中,当它的某位计满r时向它的邻近高位进1。一个r进制的数可以按权展开表示为:

1.十进制

十进制(Decimal)是人类日常生产生活最常用的数制,数基为 210,逢十进一,借一当十,有0,1,…,9十个数符,权为…,10,10-110,10,10,…如十进制数1659.56可以表示为3210-1-2

1659.56=1×10+6×10+5×10+9×10+5×10+6×10

2.二进制

二进制(Binary)是一种便于计算机存储和识别的进制,数基为212,逢二进一,借一当二,只有0和1两个数符,权为…,2,2,0-12,2,…二进制数1001.10按权展开可以写成3210-1-2

1001.10=1×2+0×2+0×2+1×2+1×2+0×2

二进制表示比较简单,便于在计算机中存储和运算,因此计算机中均采用二进制数,且这种进制是计算机能唯一识别的。

3.十六进制

十六进制(Hexadecimal)的数基为 16,逢十六进一,借一当十六。十六进制共有 16 个数符号,其中0~9十个符号与十进制相同,另外超出9的6个符号用字母A~F表示(不区分大小写,其中A表示十210进制中的10、B表示11,依此类推),其权为…,16,16,16,-116,…十六进制数AF6.C8按权展开可以写为210-1-2

AF6.C8=A×16+F×16+6×16+C×16+8×16

4.数制表示方法

在实际使用中,参与运算的数应明确标注其所采用的进制方式以避免歧义,从而导致运算结果的错误。实际中以下两种表示数进制的方式比较常用。(1)下标法

将参与运算的数用方括号括起来,并用数制2、10、16等作为下标,如:

[15606789],表示十进制;10

[10011000],表示十进制;10

[10111110],表示二进制;2

[12fc12bc],表示十六进制。16(2)字母尾缀法

在数的后面添加字母来表示不同进制,二进制添加字母B,十进制添加字母D,十六进制添加字母H,如:

1234D,表示十进制1234;

1010D,表示十进制1010;

1010B,表示二进制1010;

1C880H,表示十六进制数1C880。

注意:如果是在C语言编译器中,表示十六进制数在数前面加0x,如0x1C880。十进制是最常用的进制,其后的字母D通常可以省略,如12表示的就是十进制的12。1.1.2 数制间的互相转换

二进制数便于计算机存储和运算,但二进制表示的数不直观,不便于人们记忆和使用,此时可以用十六进制来表示二进制,而人们生产生活已习惯的十进制数最常用,因此通常需要在这三种数制之间进行转换。

1.二/十进制互相转换数(1)二进制数转换成十进制数

将二进制数进行权展开,并按乘权相加的规则进行运算,得到的和即为对应十进制数,如二进制数10110转换成十进制过程如下:43210

[10110]=1×2+0×2+1×2+1×2+0×2=[22]21043210-1-2

10110.11B=1×2+0×2+1×2+1×2+0×2+1×2+1×2=22.75D(2)十进制数转换成二进制数

十进制数转换成二进制数复杂些,需要进行除法取余运算,其规则可以概括为“除二取余倒记数”,即将需要转换的十进制数除以2,取其余数,其商再除以2再取余数,直到除尽为止,将所有余数按逆序排列便可得到其二进制数,如456D转换成二进制数的过程为

456/2,商为228,余数为0

228/2,商为114,余数为0

114/2,商为57,余数为0

57/2,商为28,余数为1

28/2,商为14,余数为0

14/2,商为7,余数为0

7/2,商为3,余数为1

3/2,商为1,余数为1

将余数结果按逆序排列,将最后一次除法运算的商写在最高位,转换之后的二进制数为111001000B。显然,将该二进制数乘权相加其结果为456D。此外,如果二进制数有小数部分,则小数部分和整数部分分开转换,整数部分按“除二取余倒记数”进行转换,小数部分按“乘二取整顺记数”进行转换,即将小数部分乘以2取商的整数部分(小数点右边数),再将商的小数部分(小数点左边)乘以2,依次不断重复,直到满足所需计数精度即可,将限于篇幅不再赘述。

2.二/十六进制互相转换

二进制数与十六进制数之间的转换比较简单。将二进制数转换成十六进制数的方法为将二进制数从右到左,每四个排成一组,不足四个的在左边补零,每组4个二进制数乘权相加即可得到相应的十进制数,如10011011B,转换成十六进制为

1001 10113210

1001=(1×2+0×2+0×2+1×2=9)3210

1011=(1×2+0×2+1×2+1×2=B)

所以结果为9BH。

十六进制数转换成二进制数为二进制数转换成十六进制数的逆过程,将每一位十六进制数转成4位二进制数即可,例如137FH,转换成二进制数为

1=0001B

3=0011B

7=0111B

F=1111B

故结果为0001001101111111B。

3.十/十六进制互相转换

十进制数转换成十六进制数与十进制数转换成二进制数类似,为除16取余数逆记数,将最后一次除法运算的商写在最高位。如500D转换成十六进数制其过程如下:

500/16,商为31,余数为4

31/16,商为1,余数为15

因此其结果为1F4H。

十六进制数转换成十进制数与二进制数转换成十进制数类似,按乘权相加法进行转换,如3F45H转换成十进制的过程为321+0

3×16+F×16+4×165×16=12288+3840+64+5=16197D1.1.3 二进制数运算

二进制运算分为算术运算和布尔逻辑运算。二进制的算术运算与十进制的加减乘除的运算方法和基本规则一样,为逢二进一,借一当二。布尔逻辑运算是二进制特有的一种运算,是计算机中实现编程操作的重要运算,它是基于基本的与或非的数理逻辑运算,以位为基本运算单位,互相之间不受影响。

1.算术运算(1)加法运算

二进制的加法运算的规则为

0+0=0

0+1=1

1+1=10(1为向高位的进位数)【例1-1】求X+Y,其中X=10001110,Y=11001111。

解:按照二进制加法运算规则

结果为101011101,有9位二进制,1为运算结果的第9位进位位。(2)减法运算

二进制减法运算规则为

0-0=0

1-0=1

1-1=0

0-1=1(向高位借1作2)【例1-2】求X-Y,其中X=11000011,Y=00101101。

解:按照二进制加法运算规则,

结果为10010110。(3)乘法运算

乘法运算的规则为

0×0=0

0×1=0

1×1=1【例1-3】求X×Y,其中X=1001,Y=0101。

解:按照二进制乘法规则,

结果为0101101B(4)除法运算

除法运算规则为

0÷1=0

1÷1=1【例1-4】求X÷Y,其中X=10110100,Y=1001。

解:按照二进制除法规则

结果商为101000B,余数为0。

2.逻辑运算

在布尔逻辑中,基本的逻辑关系有与、或、非、异或等。(1)逻辑与运算

一个事件由多个条件决定,如果决定这件事的所有条件均满足该事件才成立,则所有条件之间满足逻辑“与”关系。逻辑与运算用“·”或“&”逻辑运算符表示,其基本运算规则如下

0×1=0

1×1=1

0×1=0

计算机中的逻辑与运算就是将二进制逐位进行逻辑与运算。【例1-5】求X与Y的逻辑与运算,其中X=10110111,Y=00001111。

解:按照二进制逻辑与规则,逐位进行逻辑与,即

其结果为00000111B。(2)逻辑或运算

一个事件由多个条件决定,当决定这个事件的任意一个条件满足,该事件即可成立,则所有条件满足逻辑“或”关系。逻辑或运算使用“+”或“|”逻辑符号表示,其基本运算规则如下

0+1=1

1+1=1

0+0=0

计算机中的逻辑或运算就是将二进制逐位进行逻辑或运算。【例1-6】求A与B的逻辑或运算,其中A=10110111,B=10000110。

解:按照二进制逻辑或运算规则,逐位进行逻辑或,即

其结果为10111111B。(3)逻辑非运算

逻辑“非”即为逻辑“反”,条件满足时事件不成立,条件不满足时事件成立。用X表示条件,用Y表示事件结果,X与Y的逻辑非可以表示为

逻辑非的运算规则为【例1-7】求X的逻辑非,X=11001000。

解:

其结果为00110111B。(4)逻辑异或运算

决定事件结果的两个条件如果相同时事件不成立,只有两个条件不同时事件才成立,这就是逻辑异或,用逻辑符号“⊕”表示。逻辑异或的运算规则如下

0⊕=0

1⊕1=0

0⊕1=1⊕0=1【例1-8】求A和B的逻辑异或运算,A=1000,B=1101。

解:

异或之后的结果为0101B。1.1.4 计算机表示数字的方法

计算机能识别的数只有二进制数,所以在计算机中均是用二进制表示数和进行数的存储及运算。数有定点整数和浮点数,有正数,还有负数。计算机中所使用的二进制数的长度与数的大小和范围有关系。

1.机器数与真值

数值本身大小称为数的真值,如-1CH的真值为-0011100,+63H的真值为+1100011。显然“+”号和“-”号是人为添加的用于识别数的符号的标记,计算机无法识别这些标记。为了能够让计算机识别数的符号,通常在数值中设定一位符号位,且约定符号位为数的最高位。以8位二进制为例,通常将D7位设为数的符号位S,S=0表示正数,S=1表示负数,带上符号位S的数就称为该数的机器数。

所以-1CH的机器数为10011100B(9CH),+63H的机器数为011000011B(63H)。

2.数的原码、反码与补码

计算机中可以用三种码表示数,即原码、反码、补码。(1)原码

原码与机器数相同,最高位为符号位,设有一数X,其原码记为[X]。以8位数为例,-12H,+36H的原码分别为10010010B和原00110110B,表示成

[10010010][00110110]原原

在原码表示法中,0有两个原码:

[+0]=00000000[-0]=10000000原原(2)反码

反码是数的另一种表示方法,在原码基础上保持最高位符号位不变,将其余位逐位取反即可。设有一数X,其反码记为[X],以8位反数为例

X=-12H,[X]=10010010,[X]=11101101原反

X=+0,[X]=00000000,[X]=00000000原反

X=-0,[X]=10000000,[X]=11111111原反

需要特别注意的是,正数的反码与原码相同,反码只对负数有效。(3)补码

补码是数的又一种表示方法,求一个数的补码是在其反码的最低位加上“1”并舍去进位位即可。一个数X的补码表示成[X]。补如-12H,其补码为

[X]=[[X]]+1=[11101101]+1=11101110B(EEH)补原反

[+0]=00000000补

[-0]=11111111+1=00000000(由于受设备字长的限制,最后的补进位丢失)。

可见,正数其原码、反码、补码均相同,负数原码、反码、补码是不同的,且可以互相转换。

3.数的补码运算

用补码进行数的运算比较简单,补码运算的几个重要公式如下:

[-X]为[X]连同符号位一起逐位取反加“1”获得。2补2原【例1-9】求X+X,X=+0011101B=+29,X=0000110B=-6。1212

解:[X]=00001110B,[X]=11111010B1补2补

[X]+[X]为1补2补

其中,“1”为机器字长所限被自动舍去的进位值,运算结果为00010111,真值为+23。(1)补码不能直观表示数的大小,再次求补后可还原得到其原码即机器数;(2)用补码参与运算可以使得运算变得简单,公式1-3说明采用补码运算后减法可以使用加法实现。

4.机器数字长

机器数的字长与表示数的大小和范围有关系。计算机的字长取决于CPU存储数和参与运算的数长度,如8位字长的CPU,说明其进行存取数操作和参与运算的数的机器数长度均为8bit。典型的机器数字长与数的范围如表1-1所示。表1-1 机器数长与表示数范围之间的关系

在实际中,如果字长不足以表示数的范围,可以用增加字长的方式拓展数的范围。如用一个字节最大只能表示255,用两个字节则可以表示65535。

5.定点数与浮点数

定点数是指小数点位置固定的数,由于小数点的具体位置不定,因此定点数的格式有很多种。小数点固定在最右边即只有整数没有小数的定点数是定点数的一种特例,是比较常见的定点数表示方法,这种数由于只有整数部分,没有小数部分,使用方便、计算简单,应用于计算机可以降低其制造成本。但是由于没有小数部分,故表示精度有限,但能表示很大范围的数,在一般的微型计算机中经常使用。

为了兼顾数的范围和精度,可以使用浮点数。为了便于使用,国际上制定了浮点数的表示格式,IEEE 754标准规定浮点数格式有单精度、双精度、扩展精度这三种。以单精度浮点数为例,用4个字节(32bit)表示一个带符号的浮点数,具体表示形式如下:

符号位s取0表示正数,取1表示负数。阶码P是8位,阶码为指数与127(0x7f)相加得到。尾数域b有24位,其中b位隐藏,始终固定0为1,在计算机中不明确表示出来,故实际能见的为23位,小数隐藏。【例1-10】将十进制数178.125表示成单精度浮点数。

解:将178.125表示成二进制实数:178.125=101110010.001B

将二进制实数表示成规格化形式101110010.001=1.011100100017×2

S=0 P=7+127=134=10000110B

b=01100100010000000000000

故178.125按单精度浮点数规格化后为

0 10000110 01100100010000000000000B【例1-11】求单精度浮点数0 01111110 10110000000000000000000B所表示的十进制数是多少?

解:S=0,说明为正数

P=0 1111110B-127=126-127=-1

格化的尾数b=+1.1011-1

所以该浮点数所表示的十进制数为+1.1011×2=0.843751.1.5 计算机中的编码

计算机只能识别“0”和“1”两个二进制符号,而计算机处理的信息却有多种形式,例如数字、标点符号、运算符号、各种命令、文字和图形等。要表示这么多的信息并识别它们,必须使用二进制对这些信息进行编码。计算机中根据信息对象不同,编码的方式也不同。常见的码制有BCD码和ASCII码等。

1.BCD码

通常,数在送入计算机之前,习惯采用十进制,计算机将运算结果也以十进制输出,这就要求在输入时将十进制转换成二进制,而输出时将二进制转换成十进制,以便查看。一种用二进制代码表示十进制数的编码形式非常有用,这种编码方式为用4位二进制代码表示1位十进制,简称BCD(Binary Coded Decimal)。

4位二进制数的权分别为8、4、2、1,所以可以表示0000~1111即0~F共16个数字,取其0~9的10个数字所对应的二进制码作为对应的十进制编码,称为8421BCD码,如表1-2所示。表1-2 BCD码

2.ASCII编码

在计算机内,任何信息都是用代码表示的,字母、数字和符号也是用二进制代码表示的。国际上通用的是美国国家信息交换标准字符码,即ASCII码(American Standard Code for Information Interchange)。

ASCII码是一种8位代码,最高位一般用于奇偶校验,用7位代码对128字符进行编码。其中32个是控制字符,96个是图形字符,7位ASCII码字符表如表1-3所示,最高位未列出,一般表示时以0来代替,列为高3位二进制码,行为低4位二进制码。表1-3 ASCII码字符表续表任务1.2 单片微型计算机原理

世界上第一台计算机于1945年在宾夕法尼亚大学诞生,它基于“二进制”和“程序存储”的思想设计。计算机使用“二进制”计数,CPU由运算器和控制器构成,是计算机的核心部件,二进制编码构成的指令控制计算机完成各种操作,指令代码存放于存储器中,CPU通过存储器逐一取出指令并执行,如图1-1所示。计算机诞生之初,限于电子器件生产技术,其体积硕大,执行指令速度慢,计算速度慢,但开启了人类进入计算机时代的里程碑。随着电子元件技术的发展,计算机逐渐实现小型化和微型化。图1-1 计算机组成1.2.1 单片机组成

在20世纪60年代末与70年代初,微型计算技术取得长足进步,尤其是袖珍型计算器得到普遍应用。作为研制计算器芯片的成果,1971年11月,美国Intel公司首先推出了4位微处理器Intel 4004,它实现了将4位并行运算的单片处理器、运算器和控制器的所有元件全部集成在一片MOS大规模集成电路芯片上,这是第一片微处理器。从此以后,微处理器开始迅速发展。在微处理器的发展过程中,人们试图在高度集成的微处理器芯片中增加存储器、I/O接口电路、定时/计数器、串行通信接口、中断控制、系统时钟及系统总线,甚至A/D、D/A转换器等,以提高其性能。由此产生了各种具有不同功能的微处理器,称为微控制器(Microcontroller),亦称为“单片机”,如图1-2所示。图1-2 单片机原理

1.CPU

CPU是微处理器的核心部件,由运算器和控制器所构成,根据其结构和所采用的技术不同,微处理器的特点和处理能力亦有不同。

CPU通过ROM程序存储器读取指令,并将指令送至指令译码器,经指令译码后执行相应的操作,CPU运算所需的数据及运算结果存于RAM数据存储器中。(1)CICS复杂指令集

长期以来,计算机性能的提高往往通过增加硬件的复杂性来获得。计算机的内部功能器件越多,功能越强大,指令越多编程越方便,寻址方式越多,芯片使用更灵活。复杂的指令系统加上众多灵活的寻址方式,使得计算机能获得更为强大的功能。为实现某种特殊操作,甚至设计有专门的指令,这种计算机被称之为复杂指令集计算机(Complex Instruction Set Computer-CISC)结构。CISC复杂指令集的特点是指令多,寻址功能强大,机器的执行过程更为简单,程序编写简单。但芯片内部的结构较复杂。(2)RSCI精简指令集

采用复杂指令系统的计算机有着较强的处理高级语言的能力,这对提高计算机的性能有益。随着计算机技术的深入发展,日趋庞杂的指令系统已不易实现,而且还可能降低系统性能。1975年IBM公司设在纽约Yorktown的Thomas I Wason研究中心组织力量研究指令系统的合理性问题,1979年以帕特逊教授为首的一批科学家也开始在美国加州大学伯克莱分校开展这一研究。研究结果表明,CISC存在许多缺点。首先,各种指令的使用率相差悬殊,一个典型程序的运算过程所使用的80%指令,只占一个处理器指令系统的20%。事实上最频繁使用的指令是“取、存、加”这些最简单的指令。这样一来,长期致力于复杂指令系统的设计,实际上是设计一种在实践中难以用得上的指令系统,同时,复杂的指令系统必然带来结构的复杂性,这不但增加了设计的时间与成本,还容易造成设计失误。在CISC中,许多复杂指令需要极复杂的操作,这类指令多数是某种高级语言的直接翻版,因而通用性差。因而,针对CISC的这些弊病,帕特逊等人提出了精简指令的设想,即指令系统应当只包含那些使用频率很高的少量指令,并提供一些必要的指令以支持操作系统和高级语言。按照这个原则发展而成的计算机被称为精简指令集计算机RISC(Reduced Instruction Set Computer)结构。RISC结构计算机特点是指令数量少,均为常见的指令,计算机硬件不像CISC那么复杂。(3)单时钟周期CPU

CPU在每一个时钟脉冲驱动下执行一条指令,称为单时钟周期CPU。在RISC精简指令集CPU中,精简了指令的执行过程和指令的寻址方式,这样指令的寻址、译码和操作变得简单,也使CPU能在单个钟脉冲周期执行一条指令。通常,为了提高指令的执行效率,将一条指令分成若干执行过程,每个时钟脉冲可以完成一条指令的其中一个过程。(4)多时钟周期CPU

在多时钟周期CPU中执行一条指令需要多个时钟周期,如MCS-51单片机,每执行完一条单指令至少需要12个时钟周期,对于这种单片机而言如果CPU工作时钟晶振为12M,执行一条NOP指令需要12个振荡周期,执行指令所需要的时间为1μs。(5)流水线执行指令

将一条指令的执行分成若干阶段,每个时钟脉冲指令完成一个阶段操作。如图1-3,将一条指令分成取指、译码、执行3个阶段。第一个时钟脉冲期间,执行第1条指令的“取指令”操作,第2个时钟脉冲期间执行第1条指令的“译码”并取执行第2条指令的“取指令”操作,第3个时钟脉冲期间执行第1条指令的“执行”操作,执行第2条指令的译码操作,执行第3条指令的“取指令”操作。可见经过3个时钟周期后,第1条指令执行完毕,第2条指令执行了2个工步,第3条指令执行了1个工歩。当指令周而复始地执行下去,可以看出,CPU在每个时钟周期里同时进行多条指令的多个操作,上一步的操作结果被下一步使用,下一步的时钟执行结果要依赖于上一步的执行结果,这种现象与工业中的生产“流水线”类似。可见应用了流水线技术的CPU能极大地提高CPU指令执行速度。图1-3 指令流水线(6)CPU体系结构

采用CISC结构的单片机数据和程序存储在同一个存储空间,采用统一编址方对存储器地址进行编址,CPU数据线和程序线分时复用,这就是所谓冯·诺伊曼体系结构。这种它的指令丰富,功能较强,但取指令和取数据不能同时进行,速度受限。

采用RISC结构的单片机数据和程序分别存放于不同的存储器中,采用独立编址方式,CPU的数据线和指令线分离,这就是哈佛体系结构。哈弗结构中取指令和取数据可同时进行,执行效率更高,速度亦更快。同时,这种单片机指令多为单字节,程序存储器的空间利用率大大提高,有利于实现超小型化。

CISC结构的单片机有Intel的8051系列、Motorola的M68HC系列、Atmel的AT89系列、台湾Winbond(华邦)的W78系列、荷兰Philips的PCF80C51系列等;属于RISC结构的有Microchip公司的PIC系列、Atmel的AVR系列、韩国三星公司的KS57C系列4位单片机、台湾义隆的EM-78系列等。一般来说,控制关系较简单的小家电,可以采用RISC型单片机;控制关系较复杂的场合,如通信产品、工业控制系统应采用CISC单片机。

2.存储器

存储器是计算机系统的核心部件之一,单片机内部通常集成了两种类型的存储器,一种是只读存储器ROM(Read Ony Memory),在程序执行过程中,通常只能进行读操作不能进行写操作,用以存放程序代码和常数表格,断电后数据仍旧保存。另一个是随机访问存储器RAM(Radom Access Memory),在程序执行过程中可以随机地进行读和写操作,掉电后数据消失。

随着存储器制造技术和工艺的发展,程序存储器大致经历了以下几个发展历程:(1)Mask ROM

Mask ROM即掩模ROM,其编程只能由制造商通过半导体掩模技术完成,用户无法对其进行改写,所以对用户而言,它是严格意义上的只读存储器,适用于有固定程序且大批量生产的产品中。(2)OTP ROM

一次性可编程ROM(One Time Programmable ROM),用户可通过专门设备对其一次性写入程序,此后便不能改写。这种程序存储器可靠性很高,适合于存放已调试成功的用户程序,投入规模生产,但调试阶段不宜用。(3)EPROM

可擦除可编程ROM(Erasable Programmable ROM),其典型外观标志是芯片上有一个紫外线擦除窗口。这种存储器编程使用一定的直流电源(如+21V电压),而擦除则用紫外线灯光照射芯片窗口(一般需15~30分钟),重新编程后用不透明标签将窗口贴覆遮盖住即可。(4)EEPROM

EEPROM(Electrically Erasable Programmable ROM)电可擦除可编程存储器,是较新型只读存储器,编程速度较快且可在线改写,可在较低压单电源(3~5V)下进行擦除、写入和读出操作,可以用来存放程序或非易失性数据。(5)FLASH Memory

闪速存储器,是新型半导体存储器,其集成度、速度和易用性等远非传统ROM可比。可在较低压单电源(3~5V)下进行擦除、写入和读出操作,这种存储器可以按字节擦除还可以按多个字节的块擦除,访问速度快,理论上可以进行无限次擦除操作,是单片机中集成的主流存储器,可以用来存放程序或非易失性数据。

3.其他功能部件

在单片机中,除CPU、存储器以外的部件习惯上均统称为其他功能部件。不同种类及型号的单片机其CPU技术不同,存储器大小也不同,所集成的功能部件更有所不同,主要包含以下几个功能部件:(1)通用I/O口

输入、输出端口,简称通用I/O口(Input/Output Port)。通用I/O口是用户可以使用的一些芯片引脚,其功能不固定,可以编程作为输入口使用,也可以作为输出口使用。(2)中断系统“中断”意即打断的意思,指计算机中的其他功能部件随机打断CPU正在执行的程序操作,转而去执行该功能部件所请求的操作,“中断系统”是处理中断操作的部件,是计算机中重要的组成部分。“中断”使得计算机具有事件的实时处理能力,提高其响应速度,提高系统可靠性。(3)定时器“定时器”由一个计数器组成,在CPU工作脉冲作用下进行加法或减法计数,当计数脉冲超过计数器寄存器规定长度时会产生计数溢出并向CPU的中断系统申请定时器溢出中断。将计数器寄存器的计数值乘以每一个输入时钟脉冲周期即可得到定时器定时时间,改变计数器寄存器计数初始值即可对定时时间长短进行编程。(4)串行通信口

单片机与单片机、PC机及其他设备之间进行通信时可以通过串行口进行数据的传输,即数据比特位排成一串在时钟作用下通过数据线逐一传输到目的机。为了便于工业中的使用,国际上定义了RS-232、RS-485、IIC、SPI等多种串行通信标准。

以上所介绍的是单片机所必需的功能部件,有的单片机还集成了A/D、PWM发生器等。1.2.2 单片机特点

与通用微处理器不同,单片机从工业测控对象、环境、接口特点出发,朝多功能、多选择、高速度、低功耗、低价格、扩大存储容量和加强I/O功能及结构兼容等方向发展;而通用微处理器向着高速运算、更强大的数据分析与处理能力、大规模容量存储等方向发展,以提高通用计算机的性能。因此,单片机有其自身特点,总结如下:(1)品种多,覆盖面广。各种不同型号单片机可满足各种不同需要。开发者有很大的选择空间。CPU从4、8、16、32到64位,引脚从8脚到100多脚,开发者可以选择适合要求而又兼顾性能与价格的产品,不少单片机采用RISC及流水线技术。(2)性能提高,存储容量增大。单片机的集成度不断提高,总线工作速度越来越快。工作频率达到30MHz甚至40MHz,有些单片机的时钟频率达到甚至超过100MHz。指令执行周期迈入纳秒级。芯片集成的存储器容量不断增大,RAM已发展到1K字节、2K字节,ROM发展到32K字节、64K字节,并集成有非挥发性的EEPROM数据存储器。(3)增加控制功能,向外部接口延伸。现今单片机已发展到在一块含有CPU的芯片上,除嵌入RAM、ROM存储器和I/O接口外,还有A/D、PWM、UART异步串行通信、SPI同步串行通信、定时/计数器、DMA、Watchdog等,还集成有LCD显示驱动、键盘控制、函数发生器、比较器等,构成了一个完整的功能强的单片机应用系统,外围扩展芯片数量大为减少。(4)低电压和低功耗。单片机的供电电压从5V降到3V甚至更低,工作电流从mA级降到μA级。在生产工艺上以CMOS代替NMOS,并向HCMOS过渡,以适合部分电池供电产品的设计。(5)提供应用库函数。大多数单片机都提供了标准应用库函数软件,示范设计方法,使用户开发单片机应用系统时更快速、方便,提高产品开发效率,缩短开发周期。(6)系统扩展与配置。随着外围器件串行接口的发展,单片机的串行接口的普遍化、高速化使得并行扩展接口技术日渐衰退。多串口、内置ΜSB将使设计更为灵活,应用更为广泛!标准协议的外部扩展总线,方便扩展成各种应用系统。此外,还特别配置有传感器,人机对话、网络多通道等接口,以便构成网络和多机系统。1.2.3 常见单片机的介绍“单片机”一词最初源于“Single Chip Microcomputer”,简称SCM,国际上逐渐采用“MCU”(MicroController Unit)来代替之,并形成了工业界公认的、统一的名词。国内因为“单片机”一词已约定俗成,故而继续沿用至今。单片机的发展和个人计算机(PC)中的CPU一样也经历了几代过程,大体分为4位机、8位机、16位机和32位机的发展过程。自1976年第1片单片机诞生以来,单片机被广泛应用在各种领域。随着技术的不断进步和来自工业生产的需求提高,市场上涌现出诸多不同结构特点和性能各异的单片机。这些单片机自成体系,各有特色,应用领域不尽相同,经过多年发展已形成多制造厂家、多系列、多型号的格局,应用领域和范围不断扩大。

自1980年Intel公司推出其高性能的8位单片机8051,并且公布其内核技术后,引来世界许多著名的IC生产厂商纷纷加入单片机的研究队列,并推出自己的单片机产品,并不断在技术上推陈出新,各种新技术被应用在单片机上,且逐渐形成了自己的结构体系,拥有自己的特色和功能,除CPU外,存储器的容量从小到大,所使用的存储器也从早期的ROM发展到现在广为应用的Flash Memory,单片机的速度在不断提高,集成功能部件不断增多,性能越来越强大,使用越来越方便。不同型号的单片机拥有不同的结构构架和技术特点,功能各有特色,典型的如MCS-51单片机、PIC单片机、AVR单片机等。

1.MCS-51单片机

MCS-51单片机是最古老、最为国人所熟悉的单片机,它最早进入中国市场,并以低廉的价格、优良的性能在中国市场得到广泛应用。MCS-51单片机采用多周期、CRSI指令集以及哈佛结构,编程简单,使用方便,但指令执行速度慢。生产MCS-51单片机的厂家有Atmel、Philips、Winbond等。不同公司制造的MCS-51单片机性能各异,芯片功能各有不同。早期多采用EEPROM固化程序代码,后期多改用Flash Memory固化程序代码。RAM存储器容量不大,使用上会有所限制。如今的MCS-51单片机多采用ISP(In System Program)技术下载程序,也有少部分采用RS-232串行口下载程序到目标芯片。

2.PIC单片机

PIC单片机是Micro Chip公司生产的一种高性能单片机。PIC单片机的一个显著特点是考虑应用对象的不同,有多种引脚、功能不同的单片机型号,以满足不同产品和应用层次的需求。实际中,不同的应用对单片机功能和资源的需求也不尽相同。例如,一个摩托车的点火器,使用I/O较少、RAM及程序存储空间亦不大,若采用40脚且功能强大的单片机是极大的浪费。PIC系列从低到高有几十个型号,可以满足各种需要。其中,PIC12C508单片机仅有8个引脚,是世界上最小的单片机,如图1-4所示。

低档PIC12C508单片机有512字节ROM、25字节RAM、一个8位定时器、一根输入线、5根I/O线。这样一款单片机应用在诸如摩托车点火器这样小产品上无疑非常合适。高档的如PIC16C877有40个引脚,其内部资源为8K字节Flash Memory、368字节RAM、8路A/D、3个定时器、2个CCP模块、三个串行口、1个并行口、11个中断源、33个I/O脚。

PIC的8位CMOS单片机采用数据总线和指令总线分离的哈佛(Harvard)总线结构和高性能RISC精简指令集CPU,使指令具有单字长的特性,且允许指令码的位数可多于数据位数(8位),与传统的采用CISC结构的8位单片机相比,它可以达到2:1的代码压缩,速度提高4倍,引脚具有防瞬态能力,通过限流电阻可以直接接至220V交流电源,可直接与继电器控制电路相连,无须光电耦合器隔离,给应用带来极大方便。图1-4 PIC12C508单片机

PIC单片机具有极高的保密性,它以保密熔丝来保护代码,用户在烧入代码后熔断熔丝,其他人再也无法读出,除非恢复熔丝。目前,PIC采用熔丝深埋工艺,恢复熔丝的可能性极小。

3.AVR单片机

AVR系列单片机是Atmel公司于1997年推出的一款全新配置的、采用RISC精简指令结构的新型8位单片机。由于AVR单片机采用单指令操作,所以,在相同时钟的情况下,AVR的指令周期只有8051型单片机的1/12,而且AVR采用两级指令流水线,可以在执行当前指令的同时获取下一条指令,所以具备1MIPS/MHz的指令执行速度。不同于MCS-51单片机的是AVR采用32个通用工作寄存器,克服了单一累加器数据处理带来的瓶颈,从而使得指令代码更加灵活,编码更容易。此外,AVR单片机中还集成了A/D、PWM、EEPROM、FLASH、SPI、WTD、IIC、T/C等功能,使外围电路变得很简单。

4.MSP430单片机

MSP430是TI(Texa Instrument,德州仪器)公司生产的低功耗的16位 RISC结构高性能单片机,其具有丰富的寻址方式(7种源操作数寻址,4种目的操作数寻址)、简洁的27条内核指令以及大量的模拟指令,大量的寄存器以及片内数据存储器都可以参加多种运算;还有高效的查表处理方法;有较高的处理速度,工作在8MHz时钟可获得125ns的指令周期。在1.8~3.6V电压、1MHz的时钟条件下运行,耗电电流(在0.1~400μA之间)视不同的工作模式而不同;具有16个中断源,并且可以任意嵌套,使用灵活方便;用中断请求将CPU唤醒只要6μs,可编制出高实时性的源代码:可将CPU置于省电模式,以用中断方式唤醒程序。MSP430系列单片机的各成员都集成了较丰富的片内外设,它们分别是以下一些外围模块的不同组合:看门狗(WDT)、定时器A(Timer_A)、定时器B(Timer_B)、比较器、串口0(ΜSART0)、串口1(ΜSART1)、硬件乘法器、液晶驱动器、高达10~14bit的ADC,数十个可实现方向设置及中断功能的并行输入输出端口等。MSP430系列单片机型号种类繁多,可以满足不同系统的需求。

以上介绍了常见的4种单片机类型及各自特点,在实际中,还有其他许多单片机被广泛应用在不同的行业。例如一些台湾的单片机在小型家用电器上被广泛应用,如何泰(Hotlek)、义隆等,限于篇幅,不再赘述。任务1.3 单片机应用及开发过程1.3.1 单片机应用

单片机体积小、成本低、运用灵活,能方便地嵌入到自动化仪器和控制设备中,从而广泛地应用于智能家电、汽车自动导航设备、医疗设备、智能仪表、工业控制、航空航天、计算机网络和通信等领域。单片机的应用不仅提升了产品的经济价值,更重要的是改变了传统的电子设计方法及控制策略,使某些理论研究得以在实践中实现和应用,赋予了产品自动和智能,从而推动了社会进步,改善了人类生活。单片机应用范围非常广泛,下面列举一些常见的应用领域。

1.测控系统

用单片机可以构成各种不太复杂的工业控制系统、自适应控制系统、数据采集系统等,达到测量与控制的目的。

2.智能仪表

用单片机改造原有的测量、控制仪表,促进仪表向数字化、智能化、多功能化、综合化方向发展。不仅使仪表集数据测量、采集、数据分析与传输或存储为一体,且测量精度更高、体积更小、成本更低,便于增加显示报警和自诊断功能。

3.工业控制

工业控制领域是比较复杂的应用领域,涉及了机械、电子技术、计算机控制及液压传动等众多学科,要求较高,追求控制的可靠性。在工业控制中,单片机可用于工业机器人、电机电气控制、数控机床等控制,温度、压力、流量和位移等智能型传感器,以及相应的过程控制。

4.家用电器

在冰箱、洗衣机、空调机、微波炉、电视机、音像设备、玩具、游戏机、声像设备、厨房设备等许多产品中,单片机控制器的引入不仅使产品的功能大大增强,性能得到提高,而且获得了良好的使用效果。

5.智能电器

如电子秤、收银机、办公设备等。

6.信息和通信产品产品

如计算机的键盘、打印机、磁盘驱动器;传真机、复印机、电话机、考勤机等。

7.军事应用

如飞机、大炮、坦克、军舰、导弹、火箭、雷达等。

8.智能家居

一卡通、防盗器、门禁系统、GPS定位等。1.3.2 单片机开发过程

单片机开发过程可以分为:前期准备、硬件设计和软件设计等。在前期准备过程中,首先要明确设计的内容和预期要实现的功能或达到的指标。其次可以进行硬件设计,设计完硬件并调试之后可着手设计软件,在硬件平台不断调试和修改,使之达到设计之要求,满足设计各项指标,其流程见图1-5。图1-5 单片机设计流程

1.硬件设计

在硬件设计过程中,首先应确定系统方案,画出系统框图,明确各部分的功能及作用。(1)芯片选型

系统方案确定之后,可以进一步确定每一部分所选用的芯片及电路方案。在选定芯片时,应考虑芯片的引脚、功能、封装等是否满足设计之要求。对于CPU,还应考虑它的速度和内部资源是否够用,内部存储器容量是否够用。所选的芯片价格和市场供货情况等,均需要考虑。(2)电路设计

在硬件设计中,除CPU以外,还有系统中前向或后向通道部分,这些部分通常由模拟或数字电路构成。应该认真设计这些电路的结构,包括元件选取,仔细分析电路原理,如元件参数。在设计过程中,应同时考虑到电路的调试方法、技术和手段,在系统软、硬件联合调试时方能做到心中有数。现在比较流行EDA(Electronic Design Automation)设计手段,使用计算机辅助设计方法能极大提高电路设计的效率,在虚拟平台下完成电路功能的仿真及故障分析,为实际电路调试获得第一手资料。Multisim为常见的EDA辅助设计软件,对于模拟及数字电路的设计具有很强的仿真及分析功能,对诸如此类软件和技术的应用能提高电路设计效率。(3)PCB板设计

确定了系统方案、芯片,设计好系统前后向电路之后,应该设计PCB(印制电路板),使用PCB制板软件绘制原理图,并制成PCB文件,通过业余热转印法或送PCB制板工厂制出PCB板,并对照原理图焊接元件、制作样机。待样机制作结束后便可进行下一步的调试。

2.软件设计

软件程序设计可分为算法设计与验证、绘制流程图、编写程序、仿真调试、联合调试等步骤。(1)算法设计与验证

程序设计中,算法是核心。算法是程序设计的专业术语,可以理解为实现操作或功能的方法。在程序设计中,根据不同的操作或要求,有许多不同的算法,例如多项式插值法、牛顿逼近法、最小二乘法等。如果在编程时需要使用这些算法解决实际问题,应该使用工具验证算法正确与否、稳定与否,或求得算法的参数。可以Matlab来验证算法或求得算法的参数。(2)绘制流程图

程序流程图是用一些框图文字并用线连接起来的具有一定逻辑性的专业图形,其直接表达了程序设计者的编程思维、思考方案、判断依据等。是编程的参考和依据,也是程序调试和错误排查的有力工具。尤其是初学编程者,应该耐心绘制详细而规范的流程图,并依照流程图的逻辑走向和思维编写程序。(3)编写程序

在单片机程序设计中,推荐使用C语言开发单片机程序,具有可识读性强、效率高、可移植性好等优点。初学者从开始编程,就应该形成自己编程的习惯和规范,并养成良好的程序编写风格。例如,全局变量使用大写字母,局部变量使用小写字母等。另外,在编程的过程中还应奉行模块化设计理念,合理划分模块,并使用函数封装模块。在程序的调试和多人分工的模块化程序设计过程中这样做易于交流和资料存档,提高编程效率。(4)程序调试

程序编写完后便可以进行调试。依据模块化程序设计的理念,程序设计者可以先将每一个不同的功能模块调试通过,再进行后续的调试。例如可以先将键盘及显示部分调试通过,再进行后续调试。可以使用Proteus及AVRStudio等虚拟调试和仿真调试软件进行程序的调试。综合利用跟踪、单步、全速执行等方法调试程序。待程序调试通过后,通过下载器,把编译生成的HEX格式机器码下载目标板的CPU中。1.3.3 单片机编程语言

指令是CPU根据人的意图来执行某种操作的命令,计算机中的指令是一串二进制编码,CPU通过执行这些指令可以实现加法、乘法、除法等操作。有规律的指令组合可使CPU能实现某种特定功能,这就是计算机软件编程。

显然,计算机唯一能识别的指令就是二进制指令,又称为机器码指令,或机器语言。由于二进制编码组成的机器语言识别、记忆不方便,人们发明了助记符语言,就是用便于记忆的符号、单词、字母替代机器语言的二进制编码,这样每条指令的意义清晰,给程序的编写、阅读和修改都带来了很大的方便,这种语言称为汇编语言。汇编语言编写的程序计算机无法直接识别,需要通过软件将其“汇编”成机器能识别的二进制代码,此项工作由编程软件自动完成。

汇编语言解决了编程的记忆和使用问题,使计算机编程变得方便。汇编语言与机器语言没有本质的区别,属于“机械表达”,程序在表达和可读性方面存在严重不足,与机器语言一样,汇编语言直接依赖于具体的计算机硬件,增加使用难度。因此人们发明了高级语言,如C语言等。高级语言克服了汇编语言的缺点,它面向问题或过程,是一种接近于自然语言和数学算法的语言,与机器的硬件无关,编程时不必仔细了解计算机的具体性能和指令系统。高级语言不但直观、易学、易懂,而且通用性强,可以在不同的计算机上运行,因此可移植性好,在单片机软件编程中广为使用。任务1.4 AVR单片机简介1.4.1 AVR单片机特点

高可靠性、功能强、高速度、低功耗和低价位,一直是衡量单片机性能的重要指标,也是单片机占领市场、赖以生存的必要条件。AVR采用RICS精简指令集,以字作为指令长度单位,将内容丰富的操作数与操作码安排在一字之中(指令集中占大多数的单周期指令都是如此),取指周期短,又可预取指令,实现流水作业,故可高速执行指令,其指令执行速度可达1MIPS/MHz,克服数据传输瓶颈,同时又减少了对外设管理的开销,相对简化了硬件结构,降低了成本。故AVR单片机在软/硬件开销、速度、性能和成本诸多方面取得了优化平衡,是高性价比单片机。

AVR单片机内嵌高质量的Flash程序存储器,擦写方便,支持ISP和IAP,便于产品的调试、开发、生产、更新。内嵌长寿命的EEPROM非挥发数据存储器,可长期保存关键数据,避免断电丢失。片内大容量的RAM不仅能满足一般场合的使用,同时也更有效地支持使用高级语言开发系统程序,无须像MCS-51单片机一样扩展外部RAM。AVR单片机的I/O线全部带可设置的上拉电阻、可单独设定为输入/输出、可设定(初始)高阻输入、驱动能力强(可省去功率驱动器件)等特性,使得I/O口资源配置灵活、功能强大、可充分利用。AVR单片机片内具备多种独立的时钟分频器,分别供URAT、I2C、SPI使用。AVR单片机独有的锯齿波、三角波计数器可以产生占空比可变、频率可变、相位可变的PWM脉宽调制输出。增强型高速同/异步串口具有硬件产生校验码、硬件检测和校验侦错、两级接收缓冲、波特率自动调整定位(接收时)、屏蔽数据帧等功能,提高了通信的可靠性,方便程序编写,更便于组成分布式网络和实现多机通信系统的复杂应用,串口功能大大超过MCS-51/96单片机的串口,加之AVR单片机高速,中断服务时间短,故可实现高波特率通信。面向字节的高速硬件串行接口TWI(兼容I2C接口)、SPI具备ACK信号硬件发送与识别、地址识别、总线仲裁等功能,能实现主/从机的收/发全部4种组合的多机通信。

AVR单片机有自动上电复位电路、独立的看门狗电路、低电压检测电路BOD,多个复位源(自动上下电复位、外部复位、看门狗复位、BOD复位),可设置的启动后延时运行程序,增强了嵌入式系统

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载