1 相关概述
?????????????? 单片微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller Unit), 常用英文字母的缩写MCU表示单片机,单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。单片机由运算器,控制器,存储器,输入输出设备构成,相当于一个微型的计算机(小系统),和计算机相比,单片机缺少了外围设备等。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的佳选择。它早是被用在工业控制领域。
单片机 由于单片机在工业控制领域的广泛应用,单片机由仅有CPU的专用处理器芯片发展而来。早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。
INTEL的8080是早按照这种思想设计出的处理器,当时的单片机都是8位或4位的。其中成功的是INTEL的8051,此后在8051上发展出了MCS51系列单片机系统。因为简单可靠而性能不错获得了很大的好评。尽管2000年以后ARM已经发展出了32位的主频超过300M的高端单片机,直到现在基于8051的单片机还在广泛的使用。在很多方面单片机比专用处理器更适合应用于嵌入式系统,因此它得到了广泛的应用。事实上单片机是世界上数量多处理器,随着单片机家族的发展壮大,单片机和专用处理器的发展便分道扬镳。
现代人类生活中所用的几乎每件有电子器件的产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电子产品中都含有单片机。 汽车上一般配备40多片单片机,复杂的工业控制系统上甚至可能有数百片单片机在同时工作!单片机的数量不仅远超过PC机和其他计算机的总和,甚至比人类的数量还要多。
2 应用分类
????????????? 单片机作为计算机发展的一个重要分支领域,根据发展情况,从不同角度单片机大致可以分为通用型/专用型、总线型/非总线型及工控型/家电型。
通用专用
????????????? 这是按单片机适用范围来区分的。例如,80C51是通用型单片机,它不是为某种专用途设计的;专用型单片机是针对一类产品甚至某一个产品设计生产的,例如为了满足电子体温计的要求,在片内集成ADC接口等功能的温度测量控制电路。
线型
????????????? 这是按单片机是否提供并行总线来区分的。总线型单片机普遍设置有并行地址总线、数据总线、控制总线,这些引脚用以扩展并行外围器件都可通过串行口与单片机连接,另外,许多单片机已把所需要的外围器件及外设接口集成一片内,因此在许多情况下可以不要并行扩展总线,大大减省封装成本和芯片体积,这类单片机称为非总线型单片机。
控制型
?????? 这是按照单片机大致应用的领域进行区分的。一般而言,工控型寻址范围大,运算能力强;用于家电的单片机多为专用型,通常是小封装、低价格,外围器件和外设接口集成度高。 显然,上述分类并不是惟一的和严格的。例如,80C51类单片机既是通用型又是总线型,还可以作工控用。
3 工作过程
单片机 单片机自动完成赋予它的任务的过程,也就是单片机执行程序的过程,即一条条执行的指令的过程,所谓指令就是把要求单片机执行的各种操作用的命令的形式写下来,这是在设计人员赋予它的指令系统所决定的,一条指令对应着一种基本操作;单片机所能执行的全部指令,就是该单片机的指令系统,不同种类的单片机,其指令系统亦不同。为使单片机能自动完成某一特定任务,必须把要解决的问题编成一系列指令(这些指令必须是选定单片机能识别和执行的指令),这一系列指令的集合就成为程序,程序需要预先存放在具有存储功能的部件——存储器中。存储器由许多存储单元(小的存储单位)组成,就像大楼房有许多房间组成一样,指令就存放在这些单元里,单元里的指令取出并执行就像大楼房的每个房间的被分配到了一个房间号一样,每一个存储单元也必须被分配到的地址号,该地址号称为存储单元的地址,这样只要知道了存储单元的地址,就可以找到这个存储单元,其中存储的指令就可以被取出,然后再被执行。
? 程序通常是顺序执行的,所以程序中的指令也是一条条顺序存放的,单片机在执行程序时要能把这些指令一条条取出并加以执行,必须有一个部件能追踪指令所在的地址,这一部件就是程序计数器PC(包含在CPU中),在开始执行程序时,给PC赋以程序中条指令所在的地址,然后取得每一条要执行的命令,PC在中的内容就会自动增加,增加量由本条指令长度决定,可能是1、2或3,以指向下一条指令的起始地址,保证指令顺序执行。
? 单片机介绍
? 单片微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller Unit),常用英文字母的缩写MCU表示单片机,它早是被用在工业控制领域。单片机由芯片内仅有CPU的专用处理器发展而来。早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。INTEL的Z80是早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。
? 早期的单片机都是8位或4位的。其中成功的是INTEL的8031,因为简单可靠而性能不错获得了很大的好评。此后在8031上发展出了MCS51系列单片机系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着消费电子产品大发展,单片机技术得到了巨大提高。随着INTEL i960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。目前,高端的32位单片机主频已经超过300MHz,性能直追90年代中期的专用处理器,而普通的型号出厂价格跌落至1美元,高端的型号也只有10美元。当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。而在作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的Windows和Linux操作系统。
? 单片机比专用处理器更适合应用于嵌入式系统,因此它得到了多的应用。事实上单片机是世界上数量多的计算机。现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。而个人电脑中也会有为数不少的单片机在工作。汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作!单片机的数量不仅远超过PC机和其他计算的总和,甚至比人类的数量还要多。
? 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的佳选择。
? 单片机内部也用和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也是低的,一般不超过10元即可......用它来做一些控制电器一类不是很复杂的工作足矣了。我们现在用的全自动滚筒洗衣机、排烟罩、VCD等等的家电里面都可以看到它的身影!......它主要是作为控制部分的核心部件。
? 它是一种在线式实时控制计算机,在线式就是现场控制,需要的是有较强的抗干扰能力,较低的成本,这也是和离线式计算机的(比如家用PC)的主要区别。
? 单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板!但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别!只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性!
? 由于单片机对成本是敏感的,所以目前占统治地位的软件还是低级汇编语言,它是除了二进制机器码以上低级的语言了,既然这么低级为什么还要用呢?很多高级的语言已经达到了可视化编程的水平为什么不用呢?原因很简单,就是单片机没有家用计算机那样的CPU,也没有像硬盘那样的海量存储设备。一个可视化高级语言编写的小程序里面即使只有一个按钮,也会达到几十K的尺寸!对于家用PC的硬盘来讲没什么,可是对于单片机来讲是不能接受的。 单片机在硬件资源方面的利用率必须很高才行,所以汇编虽然原始却还是在大量使用。一样的道理,如果把巨型计算机上的操作系统和应用软件拿到家用PC上来运行,家用PC的也是承受不了的。
? 可以说,二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。不过,这种电脑,通常是指个人计算机,简称PC机。它由主机、键盘、显示器等组成。还有一类计算机,大多数人却不怎么熟悉。这种计算机就是把智能赋予各种机械的单片机(亦称微控制器)。顾名思义,这种计算机的小系统只用了一片集成电路,即可进行简单运算和控制。因为它体积小,通常都藏在被控机械的“肚子”里。它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。
4 相关历史
单片机诞生于20世纪70年代末,经历了SCM、MCU、SoC三大阶段。
单片机的基本结构
单片机由运算器、控制器、存储器、输入输出设备构成
起初模型
单片机 SCM即单片微型计算机(Single Chip Microcomputer)阶段,主要是寻求佳的单片形态嵌入式系统的佳体系结构。“创新模式”获得成功,奠定了SCM与通用计算机完全不同的发展道路。在开创嵌入式系统独立发展道路上,Intel公司功不可没。
? MCU即微控制器(Micro Controller Unit)阶段,主要的技术发展方向是:不断扩展满足嵌入式应用时,对象系统要求的各种外围电路与接口电路,突显其对象的智能化控制能力。它所涉及的领域都与对象系统相关,因此,发展MCU的重任不可避免地落在电气、电子技术厂家。从这一角度来看,Intel逐渐淡出MCU的发展也有其客观因素。在发展MCU方面,著名的厂家当数Philips公司。
? Philips公司以其在嵌入式应用方面的巨大优势,将MCS-51从单片微型计算机迅速发展到微控制器。因此,当我们回顾嵌入式系统发展道路时,不要忘记Intel和Philips的历史功绩。
嵌入式系统
单片机是嵌入式系统的独立发展之路,向MCU阶段发展的重要因素,就是寻求应用系统在芯片上的大化解决;因此,专用单片机的发展自然形成了SoC化趋势。随着微电子技术、IC设计、EDA工具的发展,基于SoC的单片机应用系统设计会有较大的发展。因此,对单片机的理解可以从单片微型计算机、单片微控制器延伸到单片应用系统。
单片机发展史
1971年intel公司研制出世界上个4位的微处理器;Intel公司的霍夫研制成功世界上块4位微处理器芯片Intel 4004,标志着代微处理器问世,微处理器和微机时代从此开始。因发明微处理器,霍夫被英国《经济学家》杂志列为“二战以来有影响力的7位科学家”之一 。
1971年11月,Intel推出MCS-4微型计算机系统(包括4001 ROM芯片、4002 RAM芯片、4003移位寄存器芯片和4004微处理器 )其中4004(下图)包含2300个晶体管,尺寸规格为3mm×4mm,计算性能远远超过当年的ENIAC,初售价为200美元。
1972年4月,霍夫等人开发出个8位微处理器Intel 8008。由于8008采用的是P沟道MOS微处理器,因此仍属代微处理器。
1973年intel公司研制出8位的微处理器8080;1973年8月,霍夫等人研制出8位微处理器Intel 8080,以N沟道MOS电路取代了P沟道,第二代微处理器就此诞生。
主频2MHz的8080芯片运算速度比8008快10倍,可存取64KB存储器,使用了基于6微米技术的6000个晶体管,处理速度为0.64MIPS(Million Instructions Per Second )。
1975年4月,MITS发布个通用型Altair 8800,售价375美元,带有1KB存储器。这是世界上台微型计算机。
1976年intel公司研制出MCS-48系列8位的单片机,这也是单片机的问世。Zilog公司于1976年开发的Z80微处理器,广泛用于微型计算机和工业自动控制设备。当时,Zilog、Motorola和Intel在微处理器领域三足鼎立。
20世纪80年代初,Intel公司在MCS-48系列单片机的基础上,推出了MCS-51系列8位高档单片机。MCS-51系列单片机无论是片内RAM容量,I/O口功能,系统扩展方面都有了很大的提高。
5 硬件特性
1、单片机集成度高。单片机包括CPU、4KB容量的ROM(8031 无)、128 B容量的RAM、 2个16位定时/计数器、4个8位并行口、全双工串口行口。
? 2、系统结构简单,使用方便,实现模块化;
3、单片机可靠性高,可工作到10^6 ~10^7小时无故障;
4、处理功能强,速度快。
5、低电压,低功耗,便于生产便携式产品
6、控制功能强
7、环境适应能力强。
6 基本结构
1.运算器
运算器由运算部件——算术逻辑单元(Arithmetic & Logical Unit,简称ALU)、累加器和寄存器等几部分组成。ALU的作用是把传来的数据进行算术或逻辑运算,输入来源为两个8位数据,分别来自累加器和数据寄存器。ALU能完成对这两个数据进行加、减、与、或、比较大小等操作,后将结果存入累加器。例如,两个数6和7相加,在相加之前,操作数6放在累加器中,7放在数据寄存器中,当执行加法指令时,ALU即把两个数相加并把结果13存入累加器,取代累加器原来的内容6。[2]
运算器有两个功能:
(1) 执行各种算术运算。
(2) 执行各种逻辑运算,并进行逻辑测试,如零值测试或两个值的比较。
单片机 运算器所执行全部操作都是由控制器发出的控制信号来指挥的,并且,一个算术操作产生一个运算结果,一个逻辑操作产生一个判决。
2.控制器
控制器由程序计数器、指令寄存器、指令译码器、时序发生器和操作控制器等组成,是发布命令的“决策机构”,即协调和指挥整个微机系统的操作。其主要功能有:
(1) 从内存中取出一条指令,并指出下一条指令在内存中的位置。
(2) 对指令进行译码和测试,并产生相应的操作控制信号,以便于执行规定的动作。
(3) 指挥并控制CPU、内存和输入输出设备之间数据流动的方向。
微处理器内通过内部总线把ALU、计数器、寄存器和控制部分互联,并通过外部总线与外部的存储器、输入输出接口电路联接。外部总线又称为系统总线,分为数据总线DB、地址总线AB和控制总线CB。通过输入输出接口电路,实现与各种外围设备连接。
3.主要寄存器
(1)累加器A
图1-2 单片机组成框图
累加器A是微处理器中使用频繁的寄存器。在算术和逻辑运算时它有双功能:运算前,用于保存一个操作数;运算后,用于保存所得的和、差或逻辑运算结果。
(2)数据寄存器DR
数据寄存器通过数据总线向存储器和输入/输出设备送(写)或取(读)数据的暂存单元。它可以保存一条正在译码的指令,也可以保存正在送往存储器中存储的一个数据字节等等。
(3)指令寄存器IR和指令译码器ID
指令包括操作码和操作数。
指令寄存器是用来保存当前正在执行的一条指令。当执行一条指令时,先把它从内存中取到数据寄存器中,然后再传送到指令寄存器。当系统执行给定的指令时,必须对操作码进行译码,以确定所要求的操作,指令译码器就是负责这项工作的。其中,指令寄存器中操作码字段的输出就是指令译码器的输入。
(4)程序计数器PC
PC用于确定下一条指令的地址,以保证程序能够连续地执行下去,因此通常又被称为指令地址计数器。在程序开始执行前必须将程序的条指令的内存单元地址(即程序的首地址)送入PC,使它总是指向下一条要执行指令的地址。
(5)地址寄存器AR
地址寄存器用于保存当前CPU所要访问的内存单元或I/O设备的地址。由于内存与CPU之间存在着速度上的差异,所以必须使用地址寄存器来保持地址信息,直到内存读/写操作完成为止。
显然,当CPU向存储器存数据、CPU从内存取数据和CPU从内存读出指令时,都要用到地址寄存器和数据寄存器。同样,如果把外围设备的地址作为内存地址单元来看的话,那么当CPU和外围设备交换信息时,也需要用到地址寄存器和数据寄存器
7 应用领域
? 目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械以及各种智能机械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。
? 单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴:
? 1.在智能仪器仪表上的应用
单片机 单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。例如精密的测量设备(功率计,示波器,各种分析仪)。
2.在工业控制中的应用
用单片机可以构成形式多样的控制系统、数据采集系统。例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。
??? 3.在家用电器中的应用
? 可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭煲、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在。
??? 4.在计算机网络和通信领域中的应用
? 现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。
??? 5.单片机在医用设备领域中的应用
单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。
6.在各种大型电器中的模块化应用
? 某些专用单片机设计用于实现特定功能,从而在各种电路中进行模块化应用,而不要求使用人员了解其内部结构。如音乐集成单片机,看似简单的功能,微缩在纯电子芯片中(有别于磁带机的原理),就需要复杂的类似于计算机的原理。如:音乐信号以数字的形式存于存储器中(类似于ROM),由微控制器读出,转化为模拟音乐电信号(类似于声卡)。
? 在大型电路中,这种模块化应用极大地缩小了体积,简化了电路,降低了损坏、错误率,也方便于更换。
???? 7.单片机在汽车设备领域中的应用
? 单片机在汽车电子中的应用非常广泛,例如汽车中的发动机控制器,基于CAN总线的汽车发动机智能电子控制器,GPS导航系统,abs防抱死系统,制动系统等等。
? 此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的用途。
8 学习应用
单片机学习应用的六大重要部分
???? ? 总线:
我们知道,一个电路总是由元器件通过电线连接而成的,在模拟电路中,连线并不成为一个问题,因为各器件间一般是串行关系,各器件之间的连线并不很多,但计算机电路却不一样,它是以微处理器为核心,各器件都要与微处理器相连,各器件之间的工作必须相互协调,所以需要的连线就很多了,如果仍如同模拟电路一样,在各微处理器和各器件间单独连线,则线的数量将多得惊人,所以在微处理机中引入了总线的概念,各个器件共同享用连线,所有器件的8根数据线全部接到8根公用的线上,即相当于各个器件并联起来,但仅这样还不行,如果有两个器件同时送出数据,一个为0,一个为1,那么,接收方接收到的究竟是什么呢?这种情况是不允许的,所以要通过控制线进行控制,使器件分时工作,任何时候只能有一个器件发送数据(可以有多个器件同时接收)。器件的数据线也就被称为数据总线,器件所有的控制线被称为控制总线。在单片机内部或者外部存储器及其它器件中有存储单元,这些存储单元要被分配地址,才能使用,分配地址当然也是以电信号的形式给出的,由于存储单元比较多,所以,用于地址分配的线也较多,这些线被称为地址总线。
?????? 数据、地址、指令:
之所以将这三者放在一起,是因为这三者的本质都是一样的——数字,或者说都是一串‘0’和‘1’组成的序列。换言之,地址、指令也都是数据。指令:由单片机芯片的设计者规定的一种数字,它与我们常用的指令助记符有着严格的一一对应关系,不可以由单片机的开发者更改。地址:是寻找单片机内部、外部的存储单元、输入输出口的依据,内部单元的地址值已由芯片设计者规定好,不可更改,外部的单元可以由单片机开发者自行决定,但有一些地址单元是一定要有的(详见程序的执行过程)。数据:这是由微处理机处理的对象,在各种不同的应用电路中各不相同,一般而言,被处理的数据可能有这么几种情况:
? 1、地址(如MOV DPTR,1000H),即地址1000H送入DPTR。
? 2、方式字或控制字(如MOV TMOD,#3),3即是控制字。
? 3、常数(如MOV TH0,#10H)10H即定时常数。
单片机? 4、实际输出值(如P1口接彩灯,要灯全亮,则执行指令:MOV P1,#0FFH,要灯全暗,则执行指令:MOV P1,#00H)这里0FFH和00H都是实际输出值。又如用于LED的字形码,也是实际输出的值。
? 理解了地址、指令的本质,就不难理解程序运行过程中为什么会跑飞,会把数据当成指令来执行了。
?????? P0口、P2口和P3的第二功能用法:
初学时往往对P0口、P2口和P3口的第二功能用法迷惑不解,认为第二功能和原功能之间要有一个切换的过程,或者说要有一条指令,事实上,各端口的第二功能完全是自动的,不需要用指令来转换。如P3.6、P3.7分别是WR、RD信号,当微片理机外接RAM或有外部I/O口时,它们被用作第二功能,不能作为通用I/O口使用,只要一微处理机一执行到MOVX指令,就会有相应的信号从P3.6或P3.7送出,不需要事先用指令说明。事实上‘不能作为通用I/O口使用’也并不是‘不能’而是(使用者)‘不会’将其作为通用I/O口使用。你完全可以在指令中按排一条SETB P3.7的指令,并且当单片机执行到这条指令时,也会使P3.7变为高电平,但使用者不会这么去做,因为这通常会导致系统的崩溃。
?????? 程序的执行过程:
单片机在通电复位后8051内的程序计数器(PC)中的值为‘0000’,所以程序总是从‘0000’单元开始执行,也就是说:在系统的ROM中一定要存在‘0000’这个单元,并且在‘0000’单元中存放的一定是一条指令。
???????堆栈:
堆栈是一个区域,是用来存放数据的,这个区域本身没有任何特殊之处,就是内部RAM的一部份,特殊的是它存放和取用数据的方式,即所谓的‘先进后出,后进先出’,并且堆栈有特殊的数据传输指令,即‘PUSH’和‘POP’,有一个特殊的专为其服务的单元,即堆栈指针SP,每当执一次PUSH指令时,SP就(在原来值的基础上)自动加1,每当执行一次POP指令,SP就(在原来值的基础上)自动减1。由于SP中的值可以用指令加以改变,所以只要在程序开始阶段更改了SP的值,就可以把堆栈设置在规定的内存单元中,如在程序开始时,用一条MOV SP,#5FH指令,就是把堆栈设置在从内存单元60H开始的单元中。一般程序的开头总有这么一条设置堆栈指针的指令,因为开机时,SP的初始值为07H,这样就使堆栈从08H单元开始往后,而08H到1FH这个区域正是8031的第二、三、四工作寄存器区,经常要被使用,这会造成数据的混乱。不同作者编写程序时,初始化堆栈指令也不完全相同,这是作者的习惯问题。当设置好堆栈区后,并不意味着该区域成为一种专用内存,它还是可以象普通内存区域一样使用,只是一般情况下编程者不会把它当成普通内存用了。
?????? 单片机的开发过程:
这里所说的开发过程并不是一般书中所说的从任务分析开始,我们假设已设计并制作好硬件,下面就是编写软件的工作。在编写软件之前,首先要确定一些常数、地址,事实上这些常数、地址在设计阶段已被直接或间接地确定下来了。如当某器件的连线设计好后,其地址也就被确定了,当器件的功能被确定下来后,其控制字也就被确定了。然后用文本编辑器(如EDIT、CCED等)编写软件,编写好后,用编译器对源程序文件编译,查错,直到没有语法错误,除了极简单的程序外,一般应用仿真机对软件进行调试,直到程序运行正确为止。运行正确后,就可以写片(将程序固化在EPROM中)。在源程序被编译后,生成了扩展名为HEX的目标文件,一般编程器能够识别这种格式的文件,只要将此文件调入即可写片。在此,为使大家对整个过程有个认识,举一例说明:
ORG 0000H
LJMP START
ORG 040H
START:
MOV SP,#5FH ;设堆栈
LOOP:
NOP
LJMP LOOP ;循环
END ;结束
学习
目前,很多人对汇编语言并不认可。可以说,掌握用C语言单片机编程很重要,可以大大提高开发的效率。不过初学者可以不了解单片机的汇编语言,但一定要了解单片机具体性能和特点,不然在单片机领域是比较致命的。如果不考虑单片机硬件资源,在KEIL中用C胡乱编程,结果只能是出了问题无法解决!可以肯定的说,好的C语言单片机工程师都是从汇编走出来的编程者,因为单片机的C语言虽然是高级语言,但是它不同于台式机个人电脑上的VC++什么的。单片机的硬件资源不是非常强大,不同于我们用VC、VB等高级语言在台式PC上写程序,毕竟台式电脑的硬件非常强大,所以才可以不考虑硬件资源的问题。还有就是在单片机编程中C语言虽然编程方便,便于人们阅读,但是在执行效率上是要比汇编语言低10%到20%,所以用什么语言编写程序是要看具体用在什么场合下。总的来说做单片机编程要灵活使用汇编语言与C语言,让单片机的强大功能以高是效率展示给用户。
? 以8051单片机为例讲解单片机的引脚及相关功能;
? 40个引脚按引脚功能大致可分为4个种类:电源、时钟、控制和I/O引脚。
⒈ 电源:
? ⑴ VCC - 芯片电源,接+5V;
? ⑵ VSS - 接地端;
? 注:用万用表测试单片机引脚电压一般为0v或者5v,这是标准的TTL电平。但有时候在单片机程序正在工作时候测试结果并不是这个值而是介于0v-5v之间,其实这是万用表的响应速度没这么快而已,在某一个瞬间单片机引脚电压仍保持在0v或者5v。
⒉ 时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。
???⒊ 控制线:控制线共有4根,
? ? ⑴ ALE/PROG:地址锁存允许/片内EPROM编程脉冲
?? ① ALE功能:用来锁存P0口送出的低8位地址
??????② PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。 ⑵ PSEN:外ROM读选通信号。
? ⑶ RST/VPD:复位/备用电源。
① RST(Reset)功能:复位信号输入端。
② VPD功能:在Vcc掉电情况下,接备用电源。
⑷ EA/Vpp:内外ROM选择/片内EPROM编程电源。
① EA功能:内外ROM选择端。
② Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。
⒋ I/O线 80C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。
P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)
5. P3口第二功能
P30 RXD 串行输入口
P31 TXD 串行输出口
P32 INT0 外部中断0(低电平有效)
P33 INT1 外部中断1(低电平有效)
P34 T0 定时计数器0
P35 T1 定时计数器1
P36 WR 外部数据存储器写选通(低电平有效)
P37 RD 外部数据存储器读选通(低电平有效)
9 指令功能
传送操作
助记符代码 说明
MOV A,Rn E8~EF寄存器A
MOV A,direct E5 direct 直接字节送A
MOV A,@Ri ER~E7 间接RAM送A
MOV A,#data 74 data立即数送A
MOV Rn,A F8~FF A送寄存器
MOV Rn,direct A8~AF direct 直接字节送寄存器
MOV Rn,#data 78~7F data立即数送寄存器
MOV direct,A F5 direct A送直接字节
MOV direct,Rn 88~8F direct 寄存器送直接字节
MOV direct1,direct2 85 direct1 direct2 直接字节送直接字节
MOV direct,@Ro 86~87 间接RAM送直接字节
MOV direct,#data 75 direct data立即数送直接字节
MOV @Ri,A F6~F7 A送间接RAM
MOV @Ri,direct 76~77 direct 直接字节送间接RAM
MOV @Ri,#data 76~77 data 立即数送间接RAM
单片机 MOV DPTR,#data16 90 data 15~8 16位常数送数据指针
data7~0
MOVC A,@A+DPTR 93 由((A)+(DPTR))寻址的程序存贮
器字节选A
MOVC A,@A+PC 83 由((A)+(PC));寻址的程序存贮器字节送A
MOVX A,@Ri E2~E3 送外部数据(8位地址)送A
MOVX A,@DPTR E0 送外部数据(16位地址)送A
MOVX @Ri,A F2~F3 A送外部数据(8位地址)
MOVX @DPTR,A F0 A送外部数据(16位地址)
PUSH direct C0 direct 直接字节进栈,SP加1
POP direct D0 direct 直接字节退栈,SP减1
XCH A,Rn C8~CF 交换A和寄存器
XCH A,direct C5 direct 交换A和直接字节
XCH A,@Ri C6~C7 交换A和间接RAM
XCH A,@Ri D6~D7 交换A和间接RAM的低位
SWAP A C4
算术操作
(A的二个半字节交换)
ADD A,Rn 28~2F 寄存器加到A
ADD A,direct 25 direct 直接字节加到A
ADD A,@Ri 26~27 间接RAM加到A
ADD A,#data 24data立即数加到A
ADD A,Rn 38~3F 寄存器和进位位加到A
ADD A,direct 35direct 直接字节和进位位加到A
ADD A,@Ri 36~37 间接字节和进位位加到A
ADD A,data 34 data立即数和进位位加到A
ADD A,Rn 98~9F A减去寄存器和进位位
ADD A,direct 95 direct A减去直接字节和进位位
ADD A,@Ri 36~37 间接RAM和进位位加到A
ADD A,data 34 data 立即数和进位位加到A
SUBB A,Rn 98~9F A减去寄存器和进位位
SUBB A,direct 95 direct A减去直接字节和进位位
SUBB A,@Ri 96~97 A减去间接RAM和进位位
SUBB A,#data 94 data A减去立即数和进位位
INC A 04 A加1
INC Rn 08~0F 寄存器加1
INC direct 05 direct 直接字节加1
INC @Ri 06~07 间接RAM加1
DEC A 14 A减1
DEC Rn 18~1F 寄存器减1
DEC direct 15 direct 直接字节减1
DEC @Ri 16~17 间接RAM减1
INC DPTR A3 数据指针加1
MUL AB A4 A乘以B
DIV AB 84 A除以B
DA A D4 A的十进制加法调整
逻辑操作
ANL A,Rn 58~5F 寄存器“与”到A
ANL A,direct 55 direct 直接字节“与”到A
ANL A,@Ri 56~57 间接RAm“与”到A
ANL A,#data 54 data立即数“与”到A
ANL direct A 52 direct A“与”到直接字节
ANL direct,#data 53 direct data立即数“与”到直接字节
ORL A,Rn 48~4F 寄存器“或”到A
ORL A,direct 45 direct 直接字节“或”到A
ORL A,@Ri 46~47 间接RAM“或”到A
ORL A,#data 44 data立即数“或”到A
ORL direct,A 42 direct A“或”到直接字节
ORL direct,#data 43 direct data立即数“或”到直接字节
XRL A,Rn 68~6F 寄存器“异或”到A
XRL A,direct 65 direct 直接字节“异或”到A
XRL A,@Ri 66~67 间接RAM“异或”到A
XRL A,#data 64 data立即数“异或”到A
XRL direct A 62 direct A“异或”到直接字节
XRL direct,#data 63 direct data立即数“异或”到直接字节
CLR A E4 清零
CPL A F4 A取反
RL A 23 A左环移
RLC A 33 A通过进位左环移
RR A 03 A右环移
RRC A 13 A通过进位右环移
程序转移
ACALL addr 11 *1 addr(a7~a0) 子程序调用
LCALL addr 16 12 addr(15~8) 长子程序调用
addr(7~0)
RET 22子程序调用返回
RETI addr 11 32 中断调用返回
AJMP addr 11 △1 addr(a7~a6) 转移
LJMP addr 16 02addr(15~8) 长转移
addr(7~0)
SJMP rel 80 rel 短转移,相对转移
JMP @A+DPTR 73 相对于DPTR间接转移
JZ rel 60 rel A为零转移
JNZ rel 70 rel A为零转移
CJNE A,direct,rel B5 direct rel 直接字节与A比较,不等则转移
CJNE A,#data,rel B4 data rel立即数与A比较,不等则转移
CJNE A,Rn,#data,rel B8~BF data rel立即数与寄存器比较,不等则转移
CJNE @Ri,#data,rel B6~B7 data rel立即数与间接RAM比较,不等则转移
DJNZ Rn,rel D8~DF rel 寄存器减1,不为零则转移
DJNZ direct,rel B5 direct rel 直接字节减1,不为零则转移
NOP 00 空操作
布尔变量操作
CLR C C3 清零进位
CLR bit C2 清零直接位
SETB C D3 置位进位
SETB bit D2 置位直接位
CPL C B3 进位取反
CPL bit B2 直接位取反
ANL C,bit 82 dit 直接数“与”到进位
ANL C,/bit B0 直接位的反“与”到进位
ORL C,bit 72 bit 直接位“或”到进位
ORL C,/bit A0 bit 直接位的反“或”到进位
MOV C,bit A2 bit 直接位送进位
MOV bit,C 92 bit 进位送直接位
JC rel 40 rel 进位位为1转移
JNC rel 50 rel 进位位为0转移
JB bit,rel 20 bit rel 直接位为1相对转移
JNB bit,rel 30 bit rel 直接位为0相对转移
JBC bit,rel 10 bit rel 直接位为1相对转移,然后清零该位。
10 芯片简介
STC单片机
STC公司的单片机主要是基于8051内核,是新一代增强型单片机,指令代码完全兼容传统8051,速度快8~12倍,带ADC,4路PWM,双串口,有全球ID号,加密性好,抗干扰强.
PIC单片机:
是MICROCHIP公司的产品,其突出的特点是体积小,功耗低,精简指令集,抗干扰性好,可靠性高,有较强的模拟接口,代码保密性好,大部分芯片有其兼容的FLASH程序存储器的芯片.
EMC单片机:
是台湾义隆公司的产品,有很大一部分与PIC 8位单片机兼容,且相兼容产品的资源相对比PIC的多,价格便宜,有很多系列可选,但抗干扰较差.
ATMEL单片机(51单片机):
单片机 ATMEl公司的8位单片机有AT89、AT90两个系列,AT89系列是8位Flash单片机,与8051系列单片机相兼容,静态时钟模式;AT90系列单片机是增强RISC结构、全静态工作方式、内载在线可编程Flash的单片机,也叫AVR单片机.
PHLIPIS 51LPC系列单片机(51单片机):
PHILIPS公司的单片机是基于80C51内核的单片机,嵌入了掉电检测、模拟以及片内RC振荡器等功能,这使51LPC在高集成度、低成本、低功耗的应用设计中可以满足多方面的性能要求.
HOLTEK单片机:
台湾盛扬半导体的单片机,价格便宜,种类较多,但抗干扰较差,适用于消费类产品.
TI公司单片机(51单片机):
德州仪器提供了TMS370和MSP430两大系列通用单片机.TMS370系列单片机是8位CMOS单片机,具有多种存储模式、多种外围接口模式,适用于复杂的实时控制场合;MSP430系列单片机是一种超低功耗、功能集成度较高的16位低功耗单片机,特别适用于要求功耗低的场合
松翰单片机(SONIX):
是台湾松翰公司的单片,大多为8位机,有一部分与PIC 8位单片机兼容,价格便宜,系统时钟分频可选项较多,有PMW ADC 内振 内部杂讯滤波。缺点RAM空间过小,抗干扰较好。
三星单片机
三星单片机有KS51和KS57系列4位单片机,KS86和KS88系列8位单片机,KS17系列16位单片机和KS32系列32位单片机,三星还为ARM公司生产ARM单片机,常见的S344b0等.三星单片机为OTP型ISP在片编程功能.
SST 单片机
美国SST公司推出的SST89系列单片机为标准的51系列单片机,包括SST89E/V52RD2, SST89E/V54RD2,SST89E/V58RD2,SST89E/V554RC,SST89E/V564RD等.它与8052系列单片机兼容.提供系统在线编程(ISP功能).内部flash擦写次数1万次以上,程序保存时间可达100年.
还有很多的单片机生产企业这里没有收集,每个企业都有自己的特点,大家根据需要选择单片机,在完全实现功能的前提下追求低价位,当然并不是这样好,实际中选择单片机跟开发者的应用习惯和开发经验是密不可分的。
11 产业革命
现代计算机技术的产业革命,将世界经济从资本经济带入到知识经济时代。在电子世界领域,从20世纪中的无线电时代也进入到21世纪以计算机技术为中心的智能化现代电子系统时代。现代电子系统的基本核心是嵌入式计算机系统(简称嵌入式系统),而单片机是典型、广泛、普及的嵌入式系统。
? 一、 无线电世界造就了几代英才
? 在20世纪五六十年代,具代表的先进的电子技术就是无线电技术,包括无线电广播、收音、无线通信(电报)、业余无线电台、无线电定位、导航等遥测、遥控、遥信技术。早期就是这些电子技术带领着许多青少年步入了奇妙的电子世界,无线电技术展示了当时科技生活美妙的前景。电子科学开始形成了一门新兴学科。无线电电子学、无线通信开始了电子世界的历程。 无线电技术不仅成为了当时先进科学技术的代表,而且从普及到专业的科学领域,吸引了广大青少年,并使他们从中找到了无穷的乐趣。从床头的矿石收音机到超外差收音机;从无线电发报到业余无线电台;从电话、电铃到无线电操纵模型。无线电技术成为当时青少年科普、科技教育普及、广泛的内容。至今,许多老一辈的工程师、专家、教授当年都是无线电爱好者。无线电技术的无穷乐趣、无线电技术的全面训练,从电子学基本原理、电子元器件基础到无线电遥控、遥测、遥信电子系统制作,培养出了几代科技英才。
二、 从无线电时代到电子技术普及时代
? 早期的无线电技术推动了电子技术的发展,其中主要的是真空管电子技术向半导体电子技术的发展。半导体电子技术使有源器件实现了微小型化和低成本,使无线电技术有了更大普及和创新,并大大地开阔了许多非无线电的控制领域。
半导体技术发展导致集成电路器件的产生,形成了近代电子技术的飞跃,电子技术从分立器件时代走进了电路集成时代。电子设计工程师不再用分立的电子元器件设计电路单元,而直接选择集成化的电路单元器件构成系统。他们从电路单元设计中解放出来,致力于系统设计,大大地解放了科技生产力,促进了电子系统更大范围的普及。
半导体集成电路首先在基本数字逻辑电路上取得突破。大量数字逻辑电路,如门电路、计数器、定时器、移位寄存器以及模拟开关、比较器等,为电子数字控制提供了极佳的条件,使传统的机械控制转向电子控制。功率电子器件以及传感技术的发展使原先以无线电为中心的电子技术开始转向工程领域中的机械系统的数字控制,检测领域中的信息采集,运动机械对象的电气伺服驱动控制。
半导体及其集成电路技术将我们带入了一个电子技术普及时代,无线电技术成为电子技术应用领域的一个部分。
进入20世纪70年代,大规模集成电路出现,促进了常规的电子电路单元的专用电子系统发展。许多专用电子系统单元变成了集成化器件,如收音机、电子钟、计算器等,在这些领域的电子工程师从电路、系统的精心设计、调试转变为器件选择、外围器件适配工作。电子技术发展了,电子产品丰富了,电子工程师的难度减少了,但与此同时,无线电技术、电子技术的魅力却削弱了。半导体集成电路的发展使经典电子系统日趋完善,留在大规模集成电路以外的电子技术日益减少,电子技术没有了往昔无线电时代的无穷乐趣和全面的工程训练。
三、 从经典电子技术时代到现代电子技术时代
? 进入20世纪80年代,世纪经济中重要的变革是计算机的产业革命。而计算机产业革命的重要标志则是计算机嵌入式应用的诞生。近代电子计算机是应数值计算要求诞生的。在很长的时间内,电子计算机都是以发展海量数值计算为己任。但是电子计算机表现出的逻辑运算、处理、控制能力,吸引了电子控制领域的专家,他们要求发展能满足控制对象要求,实现嵌入式应用的计算机系统。如果将满足海量数据处理的计算机系统称为通用计算机系统,那么则可把嵌入到对象体系(如舰船、飞机、机车等)中的计算机系统称作嵌入式计算机。显而易见,两者的技术发展方向是不同的。前者要求海量数据存储、吞吐、高速数据处理分析及传输;而后者要求在对象环境中可靠运行,对外部物理参数的高速采集、逻辑分析处理和对外部对象的快速控制等。早期人们将通用计算机加上数据采集单元、输出驱动电路勉为其难地构成一个热处理炉的温控系统。这样的通用计算机系统不可能为大多数电子系统采用,而且要使通用计算机系统满足嵌入式应用要求,必然影响高速数值处理技术的发展。为了解决计算机技术发展的矛盾,在20世纪70年代,半导体专家另辟蹊径,完全按照电子系统的计算机嵌入式应用要求,将一个微型计算机的基本系统集成在一个芯片上,形成了早期的单片机(Single Chip Microcomputer)。单片机问世后,在计算机领域中开始出现了通用计算机系统和嵌入式系统的两大分支。此后,无论是嵌入式系统,还是通用计算机系统都得到了飞速的发展。
早期虽然有通用计算机改装而成的嵌入式计算机系统,而真正意义上的嵌入式系统始于单片机的出现。因为单片机是专门为嵌入式应用设计的,单片机只能实现嵌入式应用。单片机能好地满足嵌入式应用的环境要求,例如,芯片级的物理空间、大规模集成电路的低价位、良好的外围接口总线和突出控制功能的指令系统。
单片机有计算机系统内核,嵌入到电子系统中,为电子系统智能化奠定了基础。因此,当前单片机在电子系统中的广泛使用,使经典电子系统迅速过渡到智能化的现代电子系统。
四、 单片机开创了现代电子系统时代
1单片机与嵌入式系统
嵌入式系统源于计算机的嵌入式应用,早期嵌入式系统为通用计算机经改装后嵌入到对象体系中的各种电子系统,如舰船的自动驾驶仪,轮机监测系统等。嵌入式系统首先是一个计算机系统,其次它被嵌入到对象体系中、在对象体系中实现对象要求的数据采集、处理、状态显示、输出控制等功能,由于嵌入在对象体系中,嵌入式系统的计算机没有计算机的独立形式及功能。单片机完全是按照嵌入式系统要求设计的,因此单片机是典型的嵌入式系统。早期的单片机只是按嵌入式应用技术要求设计的计算机单芯片集成,故名单片机。随后,单片机为满足嵌入式应用要求不断增强其控制功能与外围接口功能,尤其是突出控制功能,因此国际上已将单片机正名为微控制器(MCU,Microcontroller Unit)。
2单片机构成的现代电子系统将成为主流电子系统
单片机 单片机是器件级计算机系统,它可以嵌入到任何对象体系中去,实现智能化控制。小到微型机械,如手表、助听器。集成器件级的低价位,低到几元、十几元,足以使单片机普及到许多民用家电、电子玩具中去。单片机构成的现代电子系统已深入到各家各户,正改变我们的生活,如家庭中的音响、电视机、洗衣机、微波炉、电话、防盗系统、空调机等。单片机革新了原有电子系统,如微波炉采用单片机控制后,可方便地进行时钟设置、程序记忆、功率控制;空调机采用单片机后不但遥控参数设置方便,运行状态自动变换,还可实现变频控制。目前许多家用电器如VCD、DVD只有单片机出现后才可能实现其功能。
3嵌入式系统带动了整个电子产业
? 目前电子元器件产业除了微处理器、嵌入式系统器件外,大多是围绕现代电子系统配套的元器件产业,例如满足人机交互用的按键,LED/LCD显示驱动、LED/LCD显示单元、语音集成器件等,满足数据采集通道要求的数字传感器、ADC、数据采集模块、信号调理模块等,满足伺服驱动控制的DAC、固体继电器、步进电机控制器、变频控制单元等,满足通信要求的各种总线驱动器、电平转换器等。
? 世界电子元器件在嵌入式系统带动下,沿着充分满足嵌入式应用的现代电子系统要求发展。这就使原来经典电子系统的天地愈来愈小。电子系统中的各类从业人员应尽早转向现代电子系统的康庄大道。
? 五、单片机将造就新一代电子精英
如果说五十年代起,无线电世界造就了几代精英,那么当今的单片机世界将会造就出新一代电子精英。
1单片机带你进入智能化电子领域
若将经典电子系统当作一个僵死的电子系统,那么智能化的现代电子系统则是一个具有“生命”的电子系统。单片机应用系统的硬件结构给予电子系统“身躯”,单片机应用系统的应用程序赋予其“生命”。例如,在设计智能化仪器显示器的显示功能时,可在开机时显示系统自检结果,未进入工作时显示各种待机状态,仪器运行时显示运行过程,工作结束后可显示当前结果、自检结果、原始数据、各种处理报表等。在无人值守时,可给定各种自动运行功能。
? 电子系统的智能化为无止境境界,常常不需硬件资源的增添就能实现各种翻新功能。这也是当前许多家用电器功能大量增设的因素之一。
2单片机带你进入计算机工控领域
21世纪是全人类进入计算机时代的世纪,许多人不是在制造计算机便是在使用计算机。在使用计算机的人们中,只有从事嵌入式系统应用的人才真正地进入到计算机系统的内部软、硬件体系中,才能真正领会计算机的智能化本质并掌握智能化设计的知识。从学习单片机应用技术入手是当今培养计算机应用软、硬件技术人才的佳道路之一。
3单片机带你进入具魅力的电子世界
独具魅力的单片机能使你体会到电脑的真谛,你可以用单片机亲自动手设计智能玩具,可以设计不同的应用程序实现不同的功能。既有硬件制作又有软件设计,既动脑、又动手。初级水平可开发智能玩具,用宏指令编程。中级水平可开发一些智能控制器,如电脑鼠、智能车、各种遥控模型。高级水平可开发机器人,如机器人足球赛,开发工业控制单元,网络通信等,并用汇编语言或高级语言设计应用程序。围绕单片机及嵌入式系统形成的电子产业的未来,将会为电子爱好者提供广阔的天地,一个比当年无线电世界更广阔、更丰富、更持久、更具魅力的电子世界。投身到单片机世界来,将使你一生受益。
12 攻击技术
目前,攻击单片机主要有四种技术,分别是:
(1)软件攻击
该技术通常使用处理器通信接口并利用协议、加密算法或这些算法中的安全漏洞来进行攻击。软件攻击取得成功的一个典型事例是对早期ATMEL AT89C 系列单片机的攻击。攻击者利用了该系列单片机擦除操作时序设计上的漏洞,使用自编程序在擦除加密锁定位后,停止下一步擦除片内程序存储器数据的操作,从而使加过密的单片机变成没加密的单片机,然后利用编程器读出片内程序。
(2) 电子探测攻击
单片机 该技术通常以高时间分辨率来监控处理器在正常操作时所有电源和接口连接的模拟特性,并通过监控它的电磁辐射特性来实施攻击。因为单片机是一个活动的电子器件,当它执行不同的指令时,对应的电源功率消耗也相应变化。这样通过使用特殊的电子测量仪器和数学统计方法分析和检测这些变化,即可获取单片机中的特定关键信息。
?????? (3)过错产生技术
? 该技术使用异常工作条件来使处理器出错,然后提供额外的访问来进行攻击。使用广泛的过错产生攻击手段包括电压冲击和时钟冲击。低电压和高电压攻击可用来禁止保护电路工作或强制处理器执行错误操作。时钟瞬态跳变也许会复位保护电路而不会破坏受保护信息。电源和时钟瞬态跳变可以在某些处理器中影响单条指令的解码和执行。
(4)探针技术
该技术是直接暴露芯片内部连线,然后观察、操控、干扰单片机以达到攻击目的。为了方便起见,人们将以上四种攻击技术分成两类,一类是侵入型攻击(物理攻击),这类攻击需要破坏封装,然后借助半导体测试设备、显微镜和微定位器,在专门的实验室花上几小时甚至几周时间才能完成。所有的微探针技术都属于侵入型攻击。另外三种方法属于非侵入型攻击,被攻击的单片机不会被物理损坏。在某些场合非侵入型攻击是特别危险的,但是因为非侵入型攻击所需设备通常可以自制和升级,因此非常廉价。
大部分非侵入型攻击需要攻击者具备良好的处理器知识和软件知识。与之相反,侵入型的探针攻击则不需要太多的初始知识,而且通常可用一整套相似的技术对付宽范围的产品。
13 加密方法
单片机 科研成果保护是每一个科研人员关心的事情,目的不使自己的辛苦劳动付注东流加密方法有软件加密,硬件加密,软硬件综合加密, 时间加密,错误引导加密,专利保护等措施有矛就有盾,有盾就有矛,有矛有盾,才促进矛盾质量水平的提高加密只讲盾,也希望网友提供更新的加密思路,现先讲一个软件加密:利用MCS-51 中A5 指令加密,(本人85 年发现的,名软件陷阱),其实世界上所有资料,包括英文资料都没有讲这条指令,其实这是很好的加密指令A5 功能是二字节空操作指令加密方法在A5 后加一个二字节或三字节操作码,因为所有反汇编软件都不会反汇编A5 指令,造成正常程序反汇编乱套,执行程序无问题仿制者就不能改变你的源程序,你应在程序区写上你的大名单位开发时间及仿制必究的说法,以备获得法律保护我曾抓到过一位获省优产品仿制者,我说你们为什么把我的名字也写到你的产品中? 硬件加密:8031/8052 单片机就是8031/8052掩模产品中的不合格产品,内部有ROM(本人85年发现的),可以把8031/8052 当8751/8752 来用,再扩展外部程序器,然后调用8031 内部子程序当然你所选的同批8031 芯片的首地址及所需用的中断入口均应转到外部程序区。
硬件加密
用高电压或激光烧断某条引脚,使其读不到内部程序,用高电压会造成一些器件损坏重要RAM 数据采用电池(大电容,街机采用的办法)保护,拔出芯片数据失去机器不能起动,或能初始 化,但不能运行
用真真假假方法加密
擦除芯片标识
把8X52 单片机,标成8X51 单片机,并用到后128B的RAM 等方法,把AT90S8252 当AT89C52,初始化后程序段中并用到EEPROM 内容,你再去联想吧!
? 用激光(或丝印)打上其它标识如有的单片机引脚兼容,有的又不是同一种单片机,可张冠李戴,只能意会了,这要求你知识面广一点
用新出厂编号的单片机,如2000 年后的AT89C 就难解密,或新的单片机品种,如AVR 单片机
DIP 封装改成PLCC,TQFP,SOIC,BGA等封装,如果量大可以做定制ASIC,或软封装,用不需外晶振的单片机工作(如AVR 单片机中的AT90S1200),使用更复杂的单片机,FPGA+AVR+SRAM=AT40K系列
? 硬件加密与软件加密只是为叙说方便而分开来讲, 其实它们是分不开的,互相支撑,互相依存的软件加密:其目的是不让人读懂你的程序,不能修改程序,你可以.......
? 利用单片机未公开,未被利用的标志位或单元,作为软件标志位,如8031/8051 有一个用户标志 位,PSW.1 位,是可以利用的程序入口地址不要用整地址,如:XX00H,XXX0H,可用整地址-1,或-2,而在整地址处加二字节或三字节操作码,在无程序的空单元也加上程序机器码,好要加巧妙一点用大容量芯片,用市场上仿真器不能仿真的芯片,如内部程序为64KB 或大于64KB 的器件,
如:AVR 单片机中ATmega103 的Flash 程序存储器为128KB
AT89S8252/AT89S53 中有EEPROM,关键数据存放在EEPROM 中,或程序初始化时把密码写到EEPROM 中,程序执行时再查密码正确与否,然后....... 当然不能告说人家这是什么器件,尽量不让人家读懂程序,在这里说谎,骗人是正当防卫。
? 用真真假假, 假假真真,把几种不同品种的单片机放在同一设备中,如主芯片用AVR(说是MCS51),键盘显示用AT89C2051(说是GAL),I/O 口扩展驱动用PIC(说是AT90S1200)等,当然要求你知识面广一点如果你用高级语言C 编写程序就简单了,因为C 语言程序移植方便有些国家的产品能做到三年保修,三年保不坏,三年后保坏,或三年后保有故障,可能用什么技术?你去想吧例:每次开机或关机,EEPROM 某单元加1,也可二个三个单元连接起来计数,达到某值停止工作,硬件用软件代替,软件用硬件代替用大规模CPLD 可编程器件,关于单片机加密,讲到这里,就算抛砖引玉,下面请各位高手把玉亮出来吧。
14 基本知识
1.1概述 1.1.1计算机发展概况
????? ?1. 计算机的诞生 1945年底,世界上台使用电子管制造的电子数字计算机在美国宾夕法尼亚大学莫尔学院研制成功,并在1946年2月15日举行了计算机的正式揭幕典礼。
????? ?2. 计算机的发展 代计算机是电子管计算机(1945~1954年)。 第二代计算机是晶体管计算机(1955~1964年)。 第三代计算机是集成电路计算机(1965~1971年)。 第四代计算机是大规模集成电路计算机。 第五代计算机(可能)应用生物技术、纳米技术和量子技术。
??? 使用了18000个电子管,1500个继电器,总体积约90 立方米,重达30吨,占地150平方米,需要用一间30多米 长的大房间才能存放。
??? 1.1.2计算机分类
??? 计算机可分为模拟计算机和数字计算机两大类。 数字计算机按用途又可分为专用计算机和通用计算机。 通用机按规模分为巨型机、大中小型机、微型机及单片机。
??? 1.1.3单片机的特点及主要应用领域
??? 单片机,是指在一块芯片上集成了中央处理器CPU、 随机存储器RAM、程序存储器ROM、EPROM、EEPROM、 定时/计数器、中断控制器以及串行口,并行I/O接口等部件, 构成的一个完整的微型计算机系统 。
??? “ SPCE061A”
??? PROBE
??? PC机
单片机??? 1. 单片机的特点 从结构上看,单片机不但与通用微型计算机一样,是 一个有效的数据处理机,而且是一个功能很强的过程控制机。从某种意义上讲,一块单片机就具有一台微型计算机 的功能,只需要加上所需要的输入/输出设备,就可以构成 一个完整的系统,从而满足各应用领域的需要。 单片机与通用微机的相同功能部分在具体构造中存在 许多不同。正因如此,单片机与通用微机是两个不同的发展分支。
??? ⑴ 通用微机的CPU主要面向数据处理,其发展主要围绕数 据处理功能、计算速度和精度的进一步提高。单片机主要面向 控制,因为控制中的数据类型和数据处理相对简单,所以单片 机的数据处理功能比通用微机相对要弱一些,计算速度和精度 也要相对低一些。 ⑵ 通用微机中存储器组织结构主要是针对增大存储容量和 CPU对数据的存取速度。单片机中存储器的组织结构比较简单, 存储器芯片直接挂接在单片机的总线上,CPU对存储器的读写 直接用物理地址来寻址存储单元,存储器的寻址空间一般都为 64KB。 ⑶ 通用微机中I/O接口主要考虑标准外设(如CRT、标准 键盘、鼠标、打印机、硬盘、光盘等)。用户通过标准总线连 接外设,达到即插即用。但单片机应用系统的外设都是非标准 的,且千差万别,种类很多。
??? 2. 单片机的主要应用领域 因单片机具有体积小、重量轻、价格便宜、功耗低、控制 功能强及运算速度快等特点,故在国民建设、军事及家用电器 等领域均得到广泛的应用。 单机应用: 测控系统:温室控制、生产线控制。 智能仪表:生产自动化、楼宇自动化。 机电一体化:数控机床、电脑雕刻机、医疗器械。 智能接口:数据处理。 智能民用产品:家用电器、玩具、收银机。 多机应用: 智能路灯控制系统。
??? 1.2单片机的发展历史及典型机型 1.2.1单片机的发展历史
??? 自1971年美国Intel公司制造出块4位处理器以来, 在短短的20余年间,单片机技术已发展成为计算机技术中 一个非常有活力的分支,它有自己的技术特征、规范、发 展道路和应用环境。其发展十分迅猛,到目前为止,大致 可分为以下几个阶段。 4位单片机 8位单片机 16位单片机 32位单片机
??? 1. 4位单片机 1971年11月,Intel公司设计了集成度为2000只晶体管/片的 4位微型处理器Intel4004,并配有RAM、ROM和移位寄存器, 构成台4位微处理器。这种微处理器虽仅用于简单控制,但 价格便宜,至今仍不断有多功能的4位机问世。4位单片机主要 用于家用电器、电子玩具等。 2. 8位单片机 1976年9月,美国Intel公司首先推出了MCS-48系列8位单片 机以后,单片机发展进入了一个新阶段,8位单片机纷纷应运而 生。随着集成电路工艺水平的提高,在1978年到1983年期间集 成度提高到几万只管/片,因而一些高性能的8为单片机相继问世, 例如MCS-51系列8位单片机。因此,把这类单片机称为高档8为 单片机。
??? 3. 16位单片机 Intel公司于1983年推出16位单片机8096,其它公司也相继 推出了同档次的产品。由于16位单片机采用了新的制造工艺, 其计算速度和控制功能也大幅度提高,具有很强的实时处理能 力。 4. 32位单片机 近年来,各个计算机生产厂家已经进入更高性能的32位单 片机研制、生产阶段。由于控制领域对32位单片机需求并不十 分迫切,所以32位单片机的应用并不是很多。 单片机的发展并没有出现推陈出新、以新代旧的局面。4位、 8位、16位单片机仍各有应用领域,4位单片机在一些简单家用 电器、高档玩具中仍有应用;8位单片机在中、小规模应用场合 仍占主流地位;16位单片机在比较复杂的控制系统应用。
??? 1.2.2常用单片机的机型
??? 目前单片机产品多达50个系列,300多种型号。国内 单片机应用中常见的有Intel公司的MCS系列,ATMEL公司 的89系列和AVR系列,Philips公司的80C51系列, MicroChip公司的PIC16系列,台湾凌阳61系列,和国内 STC等,其中对Intel公司的MCS系列产品做如下简要介绍。 MCS系列单片机是Intel公司生产的单片机的总称。 Intel公司是生产单片机的创始者,其产品在单片机的各个 发展阶段具有代表性。Intel公司生产的单片机大体上可分 为三大系列:MCS-48系列、MCS-51系列、MCS-96系列。 三大系列产品如表1-1所示。
??? 表1-1 MCS系列单片机主要机型
??? 片内 存储器 (字节) 片外存储器直接寻址(字节)
??? I/O口线 中 断源 并行 串行 定时器/计数器 (个×位)
??? 系列
??? 型号
??? ROM/ EPROM 8048 8748 8035 8049 8749 8039 1K/ /1K — 2K/ /2K —
??? RAM
??? RAM
??? EPROM
??? MCS 48 (8位)
??? 64 64 64 128 128 128
??? 256 256 256 256 256 256
??? 4K 4K 4K 4K 4K 4K
??? 27 27 27 27 27 27
??? —
??? 2 2 2 2 2 2
??? 1×8 1×8 1×8 1×8 1×8 1×8
??? MCS 51 (8位)
??? 8051 8751 8031 8052 8752 8032 80C51 80C31 87C51
??? 4K/ /4K — 8K/ /8K — 4K/ — /4K
??? 128 128 128 256 256 256 128 128 128
??? 64K 64K 64K 64K 64K 64K 64K 64K 64K
??? 64K 64K 64K 64K 64K 64K 64K 64K 64K
??? 32 32 32 32 32 32 32 32 32
??? UART UART UART UART UART UART UART UART UART
??? 5 5 5 6 6 6 5 5 5
??? 2×16 2×16 2×16 3×16 3×16 3×16 2×16 2×16 2×16
??? MCS 96 (16位)
??? 8094 8095 8096 8097
??? — — — —
??? 232 232 232 232
??? 64K 64K 64K 64K
??? 64K 64K 64K 64K
??? 32 32 48 48
??? UART UART UART UART
??? 8 8 8 8
??? 4×16 4×16 4×16 4×16
??? 1.3计算机中的数制及相互转换 1.3.1计算机中的数的表示方法
??? 在日常生活中人们熟悉的是十进制数,但在计算机 中,采用二进制数“0”和“1”可以很方便地表示机内的数据 与信息。在编程时,为了便于阅读和书写,人们还常用八进 制数或十六进制数来表示二进制数。
??? 1. BCD码的定义及运算
??? 人们习惯使用十进制数,为使计算机能识别、存储十 进制数,并能直接识别十进制数进行运算,需要对十进制 数进行编码。将十进制数表示为二进制编码的形式,称为 二—十进制编码,即BCD(Binary Coded Decimal)码。 1位十进制数有0~9共10个不同的数码,至少需要4位 二进制数表示。4位二进制数有16种组合,取其中10种组 合代表10个十进制数码。常用的方法是8421BCD码,其 中8、4、2、1分别为4位二进制数的位权值。表1-3给出了 十进制和8421BCD码的对应关系。
??? 表1-2 8421BCD编码表
??? 十进制数 0 1 2 3 4 8421BCD码 0000 0001 0010 0011 0100 十进制数 5 6 7 8 9 8421BCD码 0101 0110 0111 1000 1001
??? 例如写出69.25的BCD码: 根据表 1-3, 可直接写出相应的BCD码: 69.25 =(01101001.00100101)BCD
??? 2. ASCII码
??? 目前国际上比较通用的是1963年美国标准会ANSI制订 的美国国家信息交换标准字符码(American Standard Code for Information Interchange),简称ASCII码,它的编码如表 1-3所示,从表中可见,ASCII 码采用二进制编码,它包括 26个大写英文字母;26个小写英文字母;10个数字0~9; 32个通用控制符号;34个专用符号,共128个字符。
??? 表 1-3 ASCII 码 表
??? 3. 原码、反码和补码
??? 原码:在符号位中用0表示正、用1表示负的二进制数,称为 原码。例如, x1=+1110111B, [x1]原=01110111B x2=-1110111B, [x2]原=11110111B 数0可是+0或-0。因此,0在原码中形式: [+0]原=0000 0000B, [-0]原=1000 0000B
??? 反码:正数的反码=原码;负数的反码=原码的符号位不变而数 值按位取反。所谓按位取反,即将各位的1变成0,0变成1。 例如,x1=+13, 又如,x2=-13, [x1]反=[+13]原=0 0001101B 。 [x2]原=[-13]原=1 0001101B,
??? [x2]反=[-13]反=1 1110010B。 补码:正数的补码=原码;负数的补码=反码+1。 例如,x1=+1101101B, [x1]补=0 1101101B 。
??? 又如, x2=-1101101B, [x2]反=1 0010010B, [x2]补=10010011B。 在补码表示中,“0”是的。即[±0]补=00000000B
??? 1.3.2进位计数制
??? 按进位原则进行计数的方法,称为进位计数制。 1.十进制 有10个不同的数字符号:0、1、2…、9; 低位向高位进 位的规律是“逢十进一”。 2. 二进制数 在二进制数中,只有两个不同数码:0和1,进位规律为 “逢二进一”。 3. 八进制数 八进制数有0、1、2、…、7共8个不同的数码,采用 “逢八进一”的原则进行计数。 4. 十六进制 十六进制中有0、1、2、…9、A、B、C、D、E、F共16 个不同的数码,进位方法是“逢十六进一”。
??? 表1-4各种进位之间的关系
??? 十进制 0 1 2 3 4 5 6 7 二进制 0 1 10 11 100 101 110 111 八进制 0 1 2 3 4 5 6 7 十六进制 0 1 2 3 4 5 6 7 十进制 9 10 11 12 13 14 15 16 二进制 1001 1010 1011 1100 1101 1110 1111 10000 八进制 11 12 13 14 15 16 17 20 十六进制 9 A B C D E F 10
??? 8
??? 1000
??? 10
??? 8
??? 1.3.3进位计数制之间的转换
??? 1. 二、八、十六进制数转化成十进制数 根据各进制的定义表示方式,按权展开相加,即可将二 进制数、八进制数、十六进制数转化成十进制数。 【例1-1】将数 (10.101), (46.12), (2D.A4) 转换为十进制数。
??? 2. 十进制数转化成二、八、十六进制数 任意十进制数N转化成R进制数,需将整数部分和小数部 分分开,采用不同的方法分别进行转换,然后用小数点将两 个部分连接起来。
??? (1)整数部分:除基取余法。 分别用基数R不断的去除N的整数,直 到商为零为止,每次所得的余数依次排列 即为相应进制的数码。初得到的为低 有效数字,后得到的位高有效数字。 【例1-2】将(168)转换成二、八、十六进制数。
??? (2) 小数部分:乘基取整法。 分别用基数R(R=2、8或16)不断得去乘N的小数, 直到积的小数部分为零(或直到所要求的位数)为止,每次 乘得的整数依次排列即为相应进制的数码。初得到的为 高有效数字,后得到的为低有效数字。 【例1-3】将(0.645)转换成二、八、十六进制数(用小数点 后五位表示)
??? 3. 二进制与八进制之间的相互转换 4. 二进制数与十六进制数之间的转换 由于2X2X2X2=16,故可采用“合四为一”的原则,每 位十六进制数分别向左、右两边各以4位为一组进行二—十 六换算;若不足4位以0补足,即可将二进制数转换为十六进 制数。反之,采用“一分为四”的原则,将每位十六进制数 用四位二进制数表示,便可将十六进制数转化为二进制数。 在程序设计中,为了区分不同进制的数,通常在数的后 面加字母作为标注。其中,字母B表示二进制数;字母D或 不加字母表示十进制数;字母H表示十六进制数。如1101B、 57Q、512D、3AH等。
??? 1.4二进制数的运算
??? 二进制数只有 0和1两个数字,其算术运算较为 简单,加、减法遵循“逢二进一”、“借一当二” 的原则。
??? 1.4.1二进制数的加法
??? 规则: 0+0=0; 0+1=1; 1+0=1; 1+1=10(有进位) 即 1001B+1011B=10100B
??? 1.4.2二进制数的减法 规则: 0-0=0; 1-1=0; 1-0=1; 0-1=1(有借位) 即 1100B-111B=101B
??? 1.4.3二进制数的乘法 规则: 0×0=0; 0×1=1×0=0; 1×1=1 即 1011B×1101B=10001111B
??? 1.4.4二进制数的除 法 规则: 0/1=0; 1/1=1 即 10100101B/1111B= 1011B
??? 1.5单片机的组成及工作过程 1.5.1单片机的组成
??? 一个8位CPU; 4KBROM或EPROM(8031无ROM); 128字节RAM数据存储器; 21个特殊功能寄存器SFR; 4个8位并行I/O口,其中P0、P2为地址/数据线,可寻址 64K的RAM和64K的 ROM; 一个可编程全双工串行口; 具有5个中断源,两个优先级,嵌套中断结构; 两个16位定时器/计数器; 一个片内振荡器和时钟电路。
??? T0 时钟电路
??? T1
??? ROM
??? RAM
??? 定时/计数器
??? CPU
??? 并行接口
??? 串行接口
??? 中断系统
??? P0 P1 P2 P3
??? TXD
??? RXD
??? INT0
??? INT1
??? 图1-1 单片机的基本组成
??? 1.5.2单片机的工作过程
??? 单片机的工作过程实质上是执行用户编制程序的过程。 一般程序的机器码都已固化到存储器中,因此开机复位后, 就可以执行指令。执行指令则是取指令和执行指令的周而复 始的过程。
1
15 抗干扰法
在提高硬件系统抗干扰能力的同时,软件抗干扰以其设计灵活、节省硬件资源、可靠性好越来越受到重视。下面以MCS-51单片机系统为例,对微机系统软件抗干扰方法进行研究。
? 1 软件抗干扰方法的研究
? 在工程实践中,软件抗干扰研究的内容主要是:一、消除模拟输入信号的噪声(如数字滤波技术);二、程序运行混乱时使程序重入正轨的方法。本文针对后者提出了几种有效的软件抗干扰方法。
? 1.1 指令冗余
CPU取指令过程是先取操作码,再取操作数。当PC受干扰出现错误,程序便脱离正常轨道“乱飞”,当乱飞到某双字节指令,若取指令时刻落在操作数上,误将操作数当作操作码,程序将出错。若“飞” 到了三字节指令,出错机率更大。
单片机? 在关键地方人为插入一些单字节指令,或将有效单字节指令重写称为指令冗余。通常是在双字节指令和三字节指令后插入两个字节以上的NOP。这样即使乱飞程序飞到操作数上,由于空操作指令NOP的存在,避免了后面的指令被当作操作数执行,程序自动纳入正轨。
? 此外,对系统流向起重要作用的指令如RET、 RETI、LCALL、LJMP、JC等指令之前插入两条NOP,也可将乱飞程序纳入正轨,确保这些重要指令的执行。
? 1.2 拦截技术
? 所谓拦截,是指将乱飞的程序引向指定位置,再进行出错处理。通常用软件陷阱来拦截乱飞的程序。因此先要合理设计陷阱,其次要将陷阱安排在适当的位置。
(1 )软件陷阱的设计
当乱飞程序进入非程序区,冗余指令便无法起作用。通过软件陷阱,拦截乱飞程序,将其引向指定位置,再进行出错处理。软件陷阱是指用来将捕获的乱飞程序引向复位入口地址0000H的指令。通常在EPROM中非程序区填入以下指令作为软件陷阱:
? NOPNOPLJMP 0000H其机器码为0000020000。
? (2 ) 陷阱的安排
通常在程序中未使用的EPROM空间填0000020000。后一条应填入020000,当乱飞程序落到此区,即可自动入轨。在用户程序区各模块之间的空余单元也可填入陷阱指令。当使用的中断因干扰而开放时,在对应的中断服务程序中设置软件陷阱,能及时捕获错误的中断。如某应用系统虽未用到外部中断1,外部中断1的中断服务程序可为如下形式:
? NOPNOPRETI返回指令可用“RETI”,也可用“LJMP 0000H”。如果故障诊断程序与系统自恢复程序的设计可靠、 完善,用“LJMP 0000H”作返回指令可直接进入故障诊断程序,尽早地处理故障并恢复程序的运行。 考虑到程序存贮器的容量,软件陷阱一般1K空间有2-3个就可以进行有效拦截。
1.3软件“看门狗”技术
若失控的程序进入“死循环”,通常采用“看门狗”技术使程序脱离“死循环”。通过不断检测程序循环运行时间,若发现程序循环时间超过大循环运行时间,则认为系统陷入“死循环”,需进行出错处理。
“看门狗”技术可由硬件实现,也可由软件实现。在工业应用中,严重的干扰有时会破坏中断方式控制字,关闭中断。则系统无法定时“喂狗”,硬件看门狗电路失效。而软件看门狗可有效地解决这类问题。
笔者在实际应用中,采用环形中断监视系统。用定时器T0监视定时器T1,用定时器T1监视主程序,主程序监视定时器T0。采用这种环形结构的软件“看门狗”具有良好的抗干扰性能,大大提高了系统可靠性。对于需经常使用T1定时器进行串口通讯的测控系统,则定时器T1不能进行中断,可改由串口中断进行监控(如果用的是MCS-52系列单片机,也可用T2代替T1进行监视)。这种软件“看门狗”监视原理是:在主程序、T0中断服务程序、T1中断服务程序中各设一运行观测变量,假设为MWatch、T0Watch 、T1Watch,主程序每循环一次,MWatch加1,同样T0、T1中断服务程序执行一次,T0Watch、 T1Watch加1。在T0中断服务程序中通过检测T1Watch的变化情况判定T1运行是否正常,在T1中断服务程序中检测MWatch的变化情况判定主程序是否正常运行,在主程序中通过检测T0Watch的变化情况判别T0是否正常工作。若检测到某观测变量变化不正常,比如应当加1而未加1,则转到出错处理程序作排除故障处理。当然,对主程序大循环周期、定时器T0和T1定时周期应予以全盘合理考虑。限于篇幅不赘述。
? 2 、系统故障处理、自恢复程序的设计
单片机系统因干扰复位或掉电后复位均属非正常复位,应进行故障诊断并能自动恢复非正常复位前的状态。
2.1 非正常复位的识别
? 程序的执行总是从0000H开始,导致程序从 0000H开始执行有四种可能:一、系统开机上电复位;二、软件故障复位;三、看门狗超时未喂狗硬件复位; 四、任务正在执行中掉电后来电复位。四种情况中除种情况外均属非正常复位,需加以识别。
? (1 )硬件复位与软件复位的识别#p#分页标题#e#
此处硬件复位指开机复位与看门狗复位,硬件复位对寄存器有影响,如复位后PC=0000H, SP=07H,PSW=00H等。而软件复位则对SP、SPW无影响。故对于微机测控系统,当程序正常运行时,将SP设置地址大于07H,或者将PSW的第5位用户标志位在系统正常运行时设为1。那么系统复位时只需检测PSW.5标志位或SP值便可判此是否硬件复位。
? 由于硬件复位时片内RAM状态是随机的,而软件复位片内RAM则可保持复位前状态,因此可选取片内某一个或两个单元作为上电标志。设40H用来做上电标志,上电标志字为78H,若系统复位后40H单元内容不等于78H,则认为是硬件复位,否则认为是软件复位,转向出错处理。若用两个单元作上电标志,则这种判别方法的可靠性更高。
? (2 )开机复位与看门狗故障复位的识别
? 开机复位与看门狗故障复位因同属硬件复位, 所以要想予以正确识别,一般要借助非易失性RAM或者EEROM。当系统正常运行时,设置一可掉电保护的观测单元。当系统正常运行时,在定时喂狗的中断服务程序中使该观测单元保持正常值(设为 AAH),而在主程中将该单元清零,因观测单元掉电可保护,则开机时通过检测该单元是否为正常值可判断是否看门狗复位。
? (3 )正常开机复位与非正常开机复位的识别
识别测控系统中因意外情况如系统掉电等情况引起的开机复位与正常开机复位,对于过程控制系统尤为重要。如某以时间为控制标准的测控系统,完成一次测控任务需1小时。在已执行测控50分钟的情况下,系统电压异常引起复位,此时若系统复位后又从头开始进行测控则会造成不必要的时间消耗。因此可通过一监测单元对当前系统的运行状态、系统时间予以监控,将控制过程分解为若干步或若干时间段,每执行完一步或每运行一个时间段则对监测单元置为关机允许值,不同的任务或任务的不同阶段有不同的值,若系统正在进行测控任务或正在执某时间段,则将监测单元置为非正常关机值。那么系统复位后可据此单元判系统原来的运行状态,并跳到出错处理程序中恢复系统原运行状态。
? 2.2 非正常复位后系统自恢复运行的程序设计
? 对顺序要求严格的一些过程控制系统,系统非正常复位否,一般都要求从失控的那一个模块或任务恢复运行。所以测控系统要作好重要数据单元、参数的备份,如系统运行状态、系统的进程值、当前输入、输出的值,当前时钟值、观测单元值等,这些数据既要定时备份,同时若有修改也应立即予以备份。
? 当在已判别出系统非正常复位的情况下,先要恢复一些必要的系统数据,如显示模块的初始化、片外扩展芯片的初始化等。其次再对测控系统的系统状态、运行参数等予以恢复,包括显示界面等的恢复。之后再把复位前的任务、参数、运行时间等恢复, 再进入系统运行状态。
? 应当说明的是,真实地恢复系统的运行状态需 要极为细致地对系统的重要数据予以备份,并加以数据可靠性检查,以保证恢复的数据的可靠性。
其次,对多任务、多进程测控系统,数据的恢复需考虑恢复的次序问题。
? 系统基本初始化是指对芯片、显示、输入输出方式等进行初始化,要注意输入输出的初始化不应造成误动作。而复位前任务的初始化是指任务的执行状态、运行时间等。
对于软件抗干扰的一些其它常用方法如数字滤波、RAM数据保护与纠错等,限于篇幅,本文未作讨论。在工程实践中通常都是几种抗干扰方法并用,互相补充 完善,才能取得较好的抗干扰效果。从根本上来说,硬件抗干扰是主动的,而软件是抗干扰是被动的。细致周到地分析干扰源,硬件与软件抗干扰相结合,完善系统监控程序,设计一稳定可靠的单片机系统是完全可行的。
16 学习方法
??????? 步:基础理论知识学习
? 基础理论知识包括模拟电路、数字电路和C语言知识。模拟电路和数字电路属于抽象学科,要把它学好还得费点精神。在你学习单片机之前,觉得模拟电路和数字电路基础不好的话,不要急着学习单片机,应该先回顾所学过的模拟电路和数字电路知识,为学习单片机加强基础。否则,你的单片机学习之路不仅会很艰难和漫长,还可能半途而废。笔者始终认为,扎实的电子技术基础是学好单片机的关键,直接影响单片机学习入门的快慢。有些同学觉得单片机很难,越学越复杂,后学不下去了。有的同学看书时似乎明白了,可是动起手来却一塌糊涂,究其原因就是电子技术基础没有打好,首先被表面知识给困惑了。[3]
? 单片机属于数字电路,其概念、术语、硬件结构和原理都源自数字电路,如果数字电路基础扎实,对复杂的单片机硬件结构和原理就能容易理解,就能轻松地迈开学习的步,自信心也会树立起来。相反,基础不好,这个看不懂那个也弄不明白,越学问题越多,越学越没有信心。如果你觉得单片机很难,那就应该先放下单片机教材,去重温数字电路,搞清楚触发器、寄存器、门电路、COMS电路、时序逻辑和时序图、进制转换等理论知识。理解了这些知识之后再去看看单片机的结构和原理,我想你会大彻大悟,信心倍增。
单片机? 模拟电路是电子技术基础的学科,她让你知道什么是电阻、电容、电感、二极管、三极管、场效应管、放大器等等以及它们的工作原理和在电路中的作用,这是学习电子技术必须掌握的基础知识。一般是先学习模拟电路再去学习数字电路。扎实的模拟电路基础不仅让你容易看懂别人设计的电路,而且让你的设计的电路更可靠,提高产品质量。
C语言知识并不难,没有任何编程基础的人都可以学,在我看来,初中生、高中生、中专生、大学生都能学会。当然,数学基础好、逻辑思维好的人学起来相对轻松一些。C语言需要掌握的知识就那么3个条件判断语句、3个循环语句、3个跳转语句和1个开关语句。别小看这10个语句,用他们组合形成的逻辑要多复杂有多复杂。学习时要一条语句一条语句的学,学一条活用一条,全部学过用过这些关键语句后,相信你的C基础建立了。
? 当基础打好以后,你会感觉到单片机不再难学了,而且越学越起劲。当单片机乖乖的依照你的逻辑思维和算法去执行指令,实现预期控制效果的时候,成就感会让你信心十足、夜以续日、废寝忘食的投入到单片机的世界里。可以这么说,扎实的电子技术基础和C语言基础能增强学习单片机信心,较快掌握单片机技术。
? 第二步:单片机实践
? 这是真正学习单片机的过程,既让人兴奋又让人疲惫,既让人无奈又让人不服,既让人孤独又让人充实,既让人气愤又让人欣慰,既有失落感又有成就感。。。其中的酸甜苦辣只有学过的人深有体会。思想上要有刻苦学习的决心,硬件上要有一套完整的学习开发工具,软件上要注重理论和实践相结合。
1.有刻苦学习的决心
首先,明确学习目的。先认真回答两个问题:我学单片机来做什么?需要多长时间把它学会?这是你学单片机的动力。没有动力,我想你坚持不了多久。其次,端正学习心态。单片机学习过程是枯燥乏味、孤独寂寞的过程。要知道,学习知识没有捷径,只有循序渐进,脚踏实地,一步一个脚印,才能学到真功夫。再次,要多动脑勤动手。单片机的学习具有很强的实践性,是一门很注重实际动手操作的技术学科。不动手实践你是学不会单片机的。后,虚心交流。在单片机学习过程中每个人都会遇到无数不能解决的问题,需要你向有经验的过来人虚心求教,否则,一味的自己埋头摸索会走许多弯路,浪费很多时间。
? 2.有一套完整的学习开发工具
学习单片机是需要成本的。必须有一台电脑、一块单片机开发板(如果开发板不能直接下载程序代码的话还得需要一个编程器)、一套视频教程、一本单片机教材和一本C语言教材。电脑是用来编写和编译程序,并将程序代码下载到单片机上;开发板用来运行单片机程序,验证实际效果;视频教程就是手把手教你单片机开发环境的使用、单片机编程和调试。对于单片机初学者来说,视频教程必须看,要不然,哪怕把教材看了几遍,还是不知道如何下手,尤其是院校里的单片机教材,学了之后,面对真正的单片机时可能还是束手无策;单片机教材和C语言教材是理论学习资料,备忘备查。不要为了节约成本不用开发板而光用Protur软件仿真调试,这和纸上谈兵没什么区别。
3. 要注重理论和实践相结合
单片机C语言编程理论知识并不深奥,光看书不动手也能明白。但在实际编程的时候就没那么简单了。一个程序的形成不仅需要有C语言知识,更多需要融入你个人的编程思路和算法。编程思路和算法决定一个程序的优劣,是单片机编程的大问题,只有在实际动手编写的时候才会有深切的感悟。一个程序能否按照你的意愿正常运行就要看你的思路和算法是否正确、合理。如果程序不正常则要反复调试(检查、修改思路和算法),直到成功。这个过程耗时、费脑、疲精神,意志不坚强者往往被绊倒在这里半途而废。
学习编写程序应该按照以下过程学习,效果会更好。看到例程题目先试着构思自己的编程思路,然后再看教材或视频教程里的代码,研究人家的编程思路,注意与自己思路的差异;接下来就照搬人家的思路亲自动手编写这个程序,领会其中每一条语句的作用;对有疑问的地方试着按照自己的思路修改程序,比较程序运行效果,领会其中的奥妙。每一个例程都坚持按照这个过程学习,你很快会找到编程的感觉,取其精华去其糟粕,久而久之会形成你独特的编程思想。当然,刚开始,看别人的程序源代码就像看天书一样,只要硬着头皮看,看到不懂的关键字和语句就翻书查阅、对照。只要能坚持下来,学习收获会事半功倍。在实践过程中不仅要学会别人的例程,还要在别人的程序上改进和拓展,让程序产生更强大的功能。同时,还要懂得通过查阅芯片数据手册(DATASHEET)里有关芯片命令和数据的读写时序来核对别人例程的可靠性,如果你觉得例程不可靠就把它修改过来,成为是你自己的程序。不仅如此,自己应该经常找些项目来做,以巩固所学的知识和积累更多的经验。
? 第三步:单片机硬件设计
当编写自己的程序信手拈来、阅读别人的程序能够发现问题的时候,说明你的单片机编程水平相当不错了。接下来就应该研究的硬件了。硬件设计包括电路原理设计和PCB板设计。学习做硬件要比学习做软件麻烦,成本更高,周期更长。但是,学习单片机的终目的是做产品开发----软件和硬件相结合形成完整的控制系统。所以,做硬件也是学习单片机技术的一个必学内容。
电路原理设计涉及到各种芯片的应用,而这些芯片外围电路的设计、典型应用电路和与单片机的连接等在芯片数据手册(DATASHEET)都能找到答案,前提是要看得懂全英文的数据手册。否则,照搬别人的设计永远落在别人的后面,你做的产品就没有创意。电子技术领域的手资料(DATASHEET)都是英文,从手资料里你所获得的知识可能是在教科书、网络文档和课外读物等所没有的知识。虽然有些资料也都是在DATASHEET的基础上撰写的,但内容不全面,甚至存在翻译上的遗漏和错误。当然,阅读DATASHEET需要具备一定的英文阅读能力,这也是阻碍单片机学习者晋级的绊脚石。良好的英文阅读能力能让你在单片机技术知识的海洋里自由遨游。
? 做PCB板就比较简单了。只要懂得使用Protel软件或 AltimDesigner软件就没问题了。但要想做的板子布局美观、布线合理还得费一番功夫了。
? 娴熟的单片机C语言编程、会使用Protel软件或 AltimDesigner软件设计PCB板和具备一定的英文阅读能力,你就是一个遇强则强的单片机高手了。
17 行业前景
?????? 在IT应用领域,嵌入式系统的火爆程度恐怕不低于当下的室外温度,在工业、医疗、家电、通讯等行业中,无所不在的嵌入式系统显现出巨大的发展潜力,然而,嵌入式系统人才的匮乏,已成为限制这个行业进一步发展的主要瓶径,无论是在北京、上海、深圳还是内地,嵌入式企业的人力资源经理们头痛的就是没有办法为企业找到足够的嵌入式系统工程师,与每年几十万找不到工作的应届大学生相比,成为了一个鲜明的差别。
??????? 那么,是什么阻碍了嵌入式系统人才的培养和出现呢?在南京市专业嵌入式培训基地——南京邦元教育咨询有限公司,笔者了解到,由于嵌入式系统属于一门年轻的科学技术,在国内的高等教育机构,还没有形成完善高效的培训机构,很多的理工科大学生虽然看好嵌入式系统,但由于找不到合适的学习途径和学习方法,花费了不少时间,走了不少弯路,却始终不能迈入嵌入式系统的门槛。
??????? 如何成为一名合格的嵌入式系统工程师,邦元教育的培训老师建议,首先,要对C语言进行充分学习和全面了解,这是IT系统开发的基础,特别是要掌握规范的编程技巧和编拟软件开发文档,从一入门就打好良好的编程习惯;再其次,对逻辑电路和模拟电路,也要有足够的了解,弄懂电路设计的来龙去脉,在这方面,并不需要去学习什么高深的应用技术,但基本功一事实上要扎实,对基本原理和设计方法有充分的理解,也就是说,你不需要能够设计出一块电路板,但一定要熟悉目前市场上的主流开发板;有了这些基础,就可以涉及嵌入式操作系统的原理和编程了,虽然这方面,有很多的资料(其中绝大部份是英文的)可供参考,但在一个经验丰富的老师指导下学习是快的途径,在南京邦元已毕业的学员中,绝大部分都可以在授课老师的帮助下用2个半月的时间完成理论知识的掌握,如果是自学的话,时间则至少要在1年以上。
??????? 后,大量的实践操作是学习过程中必不可少的一环,嵌入式系统是一门实践性极强的科学,没有足够的系统开发实践,无法将所学的理论知识应用在实际工作中,则不能称之为合格,这种实践并不是盲目的编程,在邦元教育,指导老师们会根据学习的不同阶段和企业对嵌入式系统工程师的技能要求,有针对性的提出各种不同的实践内容,指导学员们完成,这些实践内容,大多来自企业中的嵌入式实战项目,对于学员们而言,一旦顺利完成这些项目,就意味着成为一名合格的嵌入式系统工程师和拥有进入嵌入式领域的‘敲门砖’。