单片机

从本文开始进入单片机入门篇的学习。入门篇主要介绍各种单片机基础知识概念。

入门篇阅读建议:根据个人已经掌握的知识,有重点的去读。如果介绍到你已经学过的知识,你只需要简单阅读一下,或者直接跳过。如果看后面的文章感觉有些知识掌握的还不好,可以在回来看入门篇相关的介绍。

数字的发明

很久以前,人类发明了数字。自此,人类社会发生了巨大的变化。有了数字,人们解决了很多问题。在数字的帮助下,人们学会了度量和计算,人们发明了温度计,发明了钟表,发明了直尺,发明了算盘……生活中原本模糊的概念,变的不再模糊,而是十分精确。


电的广泛应用和各种电子器件的发明

1870年以后,科学技术的发展突飞猛进,各种新技术、新发明层出不穷,并被迅速应用于工业生产,大大促进了经济的发展。第二次工业革命爆发了。在这次工业革命中,电力得到了广泛的应用。

之后人们发明了各种电子元器件,特别是电子管、晶体管以及后来集成电路的发明对人类社会产生了巨大的影响。图中给大家展示了一些常见的集成电路芯片。


计算机的发明

有句话说,懒人推动社会进步。这句话是有一定道理的。在科技不断发展的过程中,一方面,人们希望制造出一种机器,能帮助我们完成处理现实世界中的各种问题,让我们从重复而繁重的脑力劳动中解放出来;另一方面,往往是在军事上,由于种种原因需要在较短的时间内,完成一些像炮弹轨道计算,密码破译之类的任务,而人类的数字运算能力往往远达不到要求。

最初人们发明了算盘之类的计算工具,又有人发明了一些机械式计算机,通过齿轮传动等原理进行运算。而后,在电子技术飞速发展的情况下,人们发明了电子计算机。早期电子计算机采用大量电子管,十分庞大,需要消耗很多电量,操作也非常复杂。如1946年发明的“埃尼阿克”电子计算机,占地面积170平方米,重达30吨,耗电量高达150千瓦,而运算能力却远不及今天智能手机的CPU,尽管如此,它已经比当时的继电器计算机快一千倍。而随着晶体管、集成电路的出现,计算机技术以惊人的速度发展着,到今天各种计算机设备随处可见,甚至我们很多人每天的生活和工作都已经离不开计算机。


帕斯卡和他的齿轮式加法器

数字计算机发明之前,电子计算机都是模拟计算机。模拟计算机通过内部电子器件的电压、电流大小等来表示一个数字或物理量,进行处理。这种计算机处理问题的精度差,而且结构复杂,也很容易受外界干扰。于是后来人们发明了数字计算机。数字计算机把外界的各种信息转换成数字,然后对数字进行运算,最终得到一个确定的结果。我们人类使用的数字一般为十进制,这是因为我们有十个手指。但是由于很多电子器件都只有两种确定的状态,比如开关的开和关,灯的亮和灭,于是数字计算机使用的是二进制的数字,通过控制器件的开和关来表示数字“1”和“0”,实现各种功能。由于它没有模拟计算机的那些缺陷,发展十分迅速,成为今天计算机的主流。

单片机的发明

在计算机发展的同时,另一种大家相对陌生的东西也在悄悄发展着。在1971年,全球第一个计算机微处理器4004由美国Intel公司推出的同时,一种称之为单片机的技术也逐渐发展并得到广泛应用。单片机全称单片微型计算机,又称为微型控制器,英文名MCU(Micro Control Unit),可以理解为精简版的计算机。单片机相当于将计算机中的各个主要部件,CPU、存储器、IO口、中断系统等封装在一个集成电路芯片中。初学者或许对这些名词很陌生,但是不需要担心,关于他们分别是什么,后面会给大家介绍。下面是一些现在常见的单片机。


从左往右,1、2为51单片机,3、4为AVR单片机,5、6、7为MSP430单片机

为什么要发明单片机呢?这个很好理解。俗话说,杀鸡焉用牛刀。生活中有很多事情不很复杂,并不需要计算机那么庞大的机器来处理,于是我们只需要用精简版的计算机——即单片机来完成任务就好了。

单片机的特点

比起大家熟悉的计算机,单片机的配置可就差多了,简直是低的难以想象。我们常用的笔记本电脑CPU处理速度可以达到2GHz以上,还是双核四核甚至更高级,但是拿一款常见的单片机(STC89C52RC,我们即将以这款单片机开始来进行学习)来对比,它的最高处理速度只有几十MHz(其中1GHz = 1000MHz);笔记本电脑硬盘动辄几百GB乃至几TB,而单片机中相当于硬盘的ROM只有几到几十KB(1TB = 1024GB,1GB = 1024MB,1MB = 1024KB,1KB = 1024B);主流笔记本的内存普遍都有几个GB,单片机中相当于内存的RAM只有可怜的几十字节(即单位B)。但是大家千万不要小瞧这么“低端”的单片机,只要给它写进程序,足以控制一台我们经常看到的所谓“智能洗衣机”之类的电器。而且学习了单片机,也会让你对计算机有更深入的了解。

文章来源: Hainter

围观 380

笔者利用51单片机制作了一个LED旋转屏,并利用该旋转屏上制作出炫耀独特的数字钟,在把制作过程分享之前,先贴一张效果图。


效果图——左上角是静止图


看完图片之后大家惊奇的发现,上面显示的字居然是浮在空中的!这到底是怎么回事?其实道理很简单:LED旋转屏只采用一排LED,令其高速旋转,利用视觉残留效应,形成高分辨率的点阵屏,可以显示字符、汉字,甚至图案,而且图案看起来还有悬浮于空中的透明效果,非常炫目。下面跟着笔者一起来制作把!

下面给出一张元器件清单供参考。


开始硬件制作

1、制作电路

由于电路板高速旋转,除了要做好平衡,还要尽快地缩小电路板的体积和重量,这样装置比较小,也容易进行高速旋转。

制作电路时,除了少数插件外,全部采用贴片工艺进行制作,为了减小电路板体积,笔者使用双面PCB进行布线,

下面两张是笔者绘制的PCB图,供参考。


TOP层PCB


BOTTOM层PCB


PCB正面放置AT89S52、12个LED等,背面主要放置晶振、升压电路,整个电路板尺寸为64 mm ×30mm,读者可以根据这个布局自行画PCB,建议画PCB前先确定整机的装配结构,可以参考图9。手工制作双面PCB需要一定的经验,将Top Layer镜像打印,然后和Bottom Layer对齐,把裁好尺寸、打磨好的双面覆铜板放在两层纸中间,确保对齐后进行热转印。

2、装配结构

笔者确定圆柱型旋转屏的整机结构大致如下图所示。


装配结构图


找一个合适的电脑主机散热器的风扇,一般是12V、0.75A,也有0.15A的,这里最好选0.75A的大功率散热风扇,因为电机负荷比较大,小功率风扇可能带不动,然后把风扇的扇叶剪掉(舍不得剪也可以保留,耗电稍大而已),剩下转子和支架,然后按照图9的结构进行“叠罗汉”。找一块大小合适的硬木板,长度等于旋转屏直径,宽度等于电路板的宽度,按照图9把电路板固定在木板上面,至少用2根1cm长的自攻螺丝进行固定,否则高速旋转时电路板可能甩飞,安装时注意光电门的位置。

然后把木板用强力胶粘在电机上面,这个环节很重要,粘合强度一定要足够高,笔者用热熔胶大面积粘合,效果还可以,用AB胶也不错。

然后把电池座、平衡片固定在木板上面,安装电池座时,一定要连同电池放在里面,这样才能调节平衡,平衡片可以用覆铜板,这个环节最重要的是平衡,不断调节电池座的位置和平衡片,一定要调到最佳平衡状态,这需要耐心和运气。

挡光片的安装比较容易,不过位置要调好,恰好能把光电门的光“切断”,又不能碰到光电门。红外接收头本来是焊接在电路板上面的,笔者后来调试发现,接收头高速旋转会使接收到的信号误码率较高,于是把接收头移到旋转中心,问题有所改善。装配好的整机如图下图所示:



装配好的整机图


注入灵魂——编写软件

整机装配好后,上电调试,并写一个流水灯的程序并烧写到单片机,如果12个LED确实能“流水”,那恭喜你,硬件制作大体成功了!如果出现问题,检查升压电路是否输出3.3V和5.0V,检查单片机的复位引脚是不是低电平等。程序采用C51进行编写,不建议采用汇编,因为这个系统比较庞大,用C语言更容易开发。

软件编写的基本思想如流程图如下:


软件中要注意几个比较重要的函数的编写。一个是实现字符显示的函数,也是最重要的函数,编程上与点阵接近,不过相对容易一些。首先必须获得字库,如无字模软件,推荐一款LCD汉字取模软件,笔者使用感觉良好,下载地址:
http://dgdz.cic.tsinghua.edu.cn/dgdz/detail.jsp?seq=576&boardid=2601

另一个是红外遥控解码函数,红外遥控的解码,关键在于了解红外遥控信号的规律,笔者采用KD-29遥控器。

还有,笔者在旋转屏上实现了字符显示后,利用单片机内部定时器编写了一个数字钟,这样一来单片机任务有点多,即使使用了22.1184MHz的晶振,仍然感觉单片机速度不够,表现在显示字符时有抖动现象,这是因为中断函数内部指令稍多,导致延时函数延时不准引起的。

后来笔者用定时器来产生精密延时,效果好了一些,不过仍然有微微抖动,如果用AVR单片机,由于AVR单片机的速度比51单片机快10倍,这个问题就能得到很好地解决了,这也是笔者推荐使用Atmega8进行制作的原因。

这样的一个旋转屏也可以用来显示图案,但因为垂直分辨率不够多,显示普通小图标就可以了,笔者用它来显示静音符号,还有开闹钟的符号。显示图标时有一个小窍门,就是用文字来索引图标,在字库生成软件中,都可以自定义字模,我们把图案用某个用不到汉字来表示,显示的时候,只要显示这个汉字,它对应的图案就显示出来了,十分方便。软件问题智者见智,仁者见仁,读者也可以自行设计软件系统,笔者把源代码全部公开,可以到本刊网站www.radio.com.cn上下载,供读者参考。

结语

这个LED旋转屏的DIY就交流到这里,硬件的制作需要不断提高动手能力才能做得更精致,软件的编写要经历无数调试过程才能达到最终要求,DIY过程是艰辛的,但是收获了成果时的那份喜悦只有经历过才知道,这里再贴几张效果图。


显示时分秒、周四,中英均能显示


闹钟时间08:30,喇叭图标表示闹钟“开”


能显示任何汉字,提取字库放入flash即可

文章来源:无线电杂志

围观 663

常规上ROM是用来存储固化程序的,RAM是用来存放数据的。由于FLASH ROM比普通的ROM读写速度快,擦写方便,一般用来存储用户程序和需要永久保存的数据。譬如说,现在家用的电子式电度表,它的内核是一款单片机,该单片机的程序就是存放在ROM里的。电度表在工作过程中,是要运算数据的,要采集电压和电流,并根据电压和电流计算出电度来。电压和电流时一个适时的数据,用户不关心,它只是用来计算电度用,计算完后该次采集的数据就用完了,然后再采集下一次,因此这些值就没必要永久存储,就把它放在RAM里边。然而计算完的电度,是需要永久保存的,单片机会定时或者在停电的瞬间将电度数存入到FLASH里。

--ROM存放指令代码和一些固定数值,程序运行后不可改动;RAM用于程序运行中数据的随机存取,掉电后数据消失..

code就是指将数据定义在ROM区域,具只读属性,例如一些LED显示的表头数据就可以定义成code存储在ROM。

ROM:(Read Only Memory)程序存储器

在单片机中用来存储程序数据及常量数据或变量数据,凡是c文件及h文件中所有代码、全局变量、局部变量、’const’限定符定义的常量数据、startup.asm文件中的代码(类似ARM中的bootloader或者X86中的BIOS,一些低端的单片机是没有这个的)通通都存储在ROM中。

RAM:(Random Access Memory)随机访问存储器

用来存储程序中用到的变量。凡是整个程序中,所用到的需要被改写的量,都存储在RAM中,“被改变的量”包括全局变量、局部变量、堆栈段。

程序经过编译、汇编、链接后,生成hex文件。用专用的烧录软件,通过烧录器将hex文件烧录到ROM中(究竟是怎样将hex文件传输到MCU内部的ROM中的呢?),因此,这个时候的ROM中,包含所有的程序内容:无论是一行一行的程序代码,函数中用到的局部变量,头文件中所声明的全局变量,const声明的只读常量,都被生成了二进制数据,包含在hex文件中,全部烧录到了ROM里面,此时的ROM,包含了程序的所有信息,正是由于这些信息,“指导”了CPU的所有动作。

可能有人会有疑问,既然所有的数据在ROM中,那RAM中的数据从哪里来?什么时候CPU将数据加载到RAM中?会不会是在烧录的时候,已经将需要放在RAM中数据烧录到了RAM中?

要回答这个问题,首先必须明确一条:ROM是只读存储器,CPU只能从里面读数据,而不能往里面写数据,掉电后数据依然保存在存储器中;RAM是随机存储器,CPU既可以从里面读出数据,又可以往里面写入数据,掉电后数据不保存,这是条永恒的真理,始终记挂在心。

清楚了上面的问题,那么就很容易想到,RAM中的数据不是在烧录的时候写入的,因为烧录完毕后,拔掉电源,当再给MCU上电后,CPU能正常执行动作,RAM中照样有数据,这就说明:RAM中的数据不是在烧录的时候写入的,同时也说明,在CPU运行时,RAM中已经写入了数据。关键就在这里:这个数据不是人为写入的,CPU写入的,那CPU又是什么时候写入的呢?听我娓娓道来。

上回说到,ROM中包含所有的程序内容,在MCU上电时,CPU开始从第1行代码处执行指令。这里所做的工作是为整个程序的顺利运行做好准备,或者说是对RAM的初始化(注:ROM是只读不写的),工作任务有几项:

1、为全局变量分配地址空间---à如果全局变量已赋初值,则将初始值从ROM中拷贝到RAM中,如果没有赋初值,则这个全局变量所对应的地址下的初值为0或者是不确定的。当然,如果已经指定了变量的地址空间,则直接定位到对应的地址就行,那么这里分配地址及定位地址的任务由“连接器”完成。

2、 设置堆栈段的长度及地址---à用C语言开发的单片机程序里面,普遍都没有涉及到堆栈段长度的设置,但这不意味着不用设置。堆栈段主要是用来在中断处理时起“保存现场”及“现场还原”的作用,其重要性不言而喻。而这么重要的内容,也包含在了编译器预设的内容里面,确实省事,可并不一定省心。平时怎么就没发现呢?奇怪。

3、 分配数据段data,常量段const,代码段code的起始地址。代码段与常量段的地址可以不管,它们都是固定在ROM里面的,无论它们怎么排列,都不会对程序产生影响。但是数据段的地址就必须得关心。数据段的数据时要从ROM拷贝到RAM中去的,而在RAM中,既有数据段data,也有堆栈段stack,还有通用的工作寄存器组。通常,工作寄存器组的地址是固定的,这就要求在绝对定址数据段时,不能使数据段覆盖所有的工作寄存器组的地址。必须引起严重关注。

这里所说的“第一行代码处”,并不一定是你自己写的程序代码,绝大部分都是编译器代劳的,或者是编译器自带的demo程序文件。因为,你自己写的程序(C语言程序)里面,并不包含这些内容。高级一点的单片机,这些内容,都是在startup的文件里面。仔细阅读,有好处的。

通常的做法是:普通的flashMCU是在上电时或复位时,PC指针里面的存放的是“0000”,表示CPU从ROM的0000地址开始执行指令,在该地址处放一条跳转指令,使程序跳转到_main函数中,然后根据不同的指令,一条一条的执行,当中断发生时(中断数量也很有限,2~5个中断),按照系统分配的中断向量表地址,在中断向量里面,放置一条跳转到中断服务程序的指令,如此如此,整个程序就跑起来了。决定CPU这样做,是这种ROM结构所造成的。

其实,这里面,C语言编译器作了很多的工作,只是,你不知道而已。如果你仔细阅读编译器自带的help文件就会知道很多的事情,这是对编译器了解最好的途径。

I/O口寄存器:

也是可以被改变的量,它被安排在一个特别的RAM地址,为系统所访问,而不能将其他变量定义在这些位置。

中断向量表:

中断向量表是被固定在MCU内部的ROM地址中,不同的地址对应不同的中断。每次中断产生时,直接调用对应的中断服务子程序,将程序的入口地址放在中断向量表中。

ROM的大小问题:

对于flash类型的MCU,ROM空间的大小通常都是整字节的,即为ak*8bits。这很好理解,一眼就知道,ROM的空间为aK。但是,对于某些OTP类型的单片机,比如holtek或者sonix公司的单片机,经常看到数据手册上写的是“OTP progarming ROM 2k*15bit。。。。。”,可能会产生疑惑,这个“15bit”认为是1个字节有余,2个字节又不足,那这个ROM空间究竟是2k,多于2k,还是4k但是少了一点点呢?

这里要明确两个概念:一个是指令的位宽,另一个是指令的长度。指令的位宽是指一条指令所占的数据位的宽度;有些是8位位宽,有些是15位位宽。指令长度是指每条指令所占的存储空间,有1个字节,有2个字节的,也有3个字节甚至4个字节的指令。这个可以打个形象的比方:我们做广播体操时,有很多动作要做,但是每个复杂的动作都可以分解为几个简单的动作。例如,当做伸展运动时,我们只听到广播里面喊“2、2、3、4、5、6、7、8”,而这里每一个数字都代表一个指令,听到“3”这个指令后,我们的头、手、腰、腿、脚分别作出不同的动作:两眼目视前方,左手叉腰,右手往上抬起,五指伸直自然并拢打开,右腿伸直,左腿成弓步······等等一系列的分解动作,而要做完这些动作的指令只有一个“3”,要执行的动作却又很多,于是将多个分解动作合并成一个指令,而每个分解动作的“位宽”为15bits。实事上也确实如此,当在反汇编或者汇编时,可以看到,复合指令的确是有简单的指令组合起来的。

到此,回答前面那个问题,这个OTP的ROM空间应该是2K,指令位宽为15位。一般的,当指令位宽不是8的倍数时,则说明该MCU的大部分指令长度是一个字节(注:该字节宽度为15位,不是8位),极少数为2个或多个字节,虽然其总的空间少,但是其能容下的空间数据并不少。

文章来源:玩转单片机

围观 357

1、按理说,一个东西的负载电流,应该是它供给外部的电流,这时候也就是流出时,应该为正。

2、外接电阻一般是上拉,通常情况这种接法输出高电平时,内部输出开关管是截止状态,如果该引脚上有负载的话,负载电流经上拉电阻提供,引脚内部基本上不存在电流出入,(所以低功耗)

3、这么讲下去,当该脚输出低电平时(内部开关管导通,电压接近地),电流经电阻流入内部,这时候应该在单片机的相关技术文档中会详细说明单片机的工作电流,但总的来说,每个端口电流不要超过20毫安,否则容易使得器件损坏。描述为负

。IO口的灌电流最大30ma左右,拉电流更小了

一般来说上拉或下拉电阻的作用是增大电流,加强电路的驱动能力

比如说51的

还有,p0口必须接上拉电阻才可以作为io口使用

上拉和下拉的区别是一个为拉电流,一个为灌电流

一般来说灌电流比拉电流要大

也就是灌电流驱动能力强一些

拉电流与灌电流

51系列单片机的拉电流和灌电流是不同的。根据我的使用经验,标准I/O口的拉电流不大于1mA,灌电流最大约为10mA左右,P0口的驱动能力更差一些。

拉电流和灌电流是衡量电路输出驱动能力的参数,这种说法一般用在数字电路中。由于数字电路的输出只有高、低(0,1)两种电平值,高电平输出时,一般是对负载提供电流,其提供电流的数值叫“拉电流”;低电平输出时,一般是要吸收负载的电流,其吸收电流的数值叫“灌电流”。

文章来源:玩转单片机

围观 454

1、什么是AD转换

A是模拟信号的意思,D是数字信号的意思,AD转换就是模数转换,顾名思义,就是把模拟信号转换成数字信号,例如把电压值转化为数字信号。

2、为什么要AD转换

单片机(以及其他处理器)只能处理数字信号,当单片机想要获取电路上某一点的电压值时,就得用到AD转换了,如果你直接把单片机的引脚接到电路这个点上,单片机只知道这个点的电压是低电平还是高电平,又怎么能得到他的电压值呢?例如数字式的万用表,它测量电压时,先有一个AD转换电路,把电压值转换成一个数值,然后把这个值送个单片机(当然万用表里的用的处理芯片不是单片机),单片机经过计算处理后,再把这电压值显示到显示到屏幕上。
不过现在有一些比较强的单片机,其内部已经集成了AD转换器,不需要你再外接AD转换芯片。

3、8位16位的ad转换芯片是什么意思

8位,16位就代表了AD转换芯片的转换分辨率,数字越大,分辨率越高,同时也反映了它的精度,数字越大,精度相对也越高。8位算是最低了,有些单片机里集成的AD转换器一般是10位的。12位和16位的芯片价格就比较贵了。

4、分辨率

举个简单的例子,8位芯片只能转换最小到0.01V的电压,而12位的芯片却能转换最小到0.001V的电压,如果一个电压为3.359V,8位芯片转出来后的数值是3.35V,12位芯片转换出来后是3.359V,精度比8位就高一个档次了。(注:这里数值不是正确的数值,举例用,切勿实际使用)

5、采样

采样是AD转换的速度性能指标,通俗的说就是每秒里能采样多少次,采样次数越高芯片性能越好。如果对采样不理解,也可以用另一种方式理解,就是一个AD转换芯把电压值转换成数字值这个过程所需要的时间,时间越短越好。

6、精度

精度是AD芯片的一个重要参数,表示采集到的数据和真实值之间的相差的程度。

文章来源:玩转单片机

围观 410

首先看看继电器的驱动,这是典型的继电器驱动电路图,这样的图在网络上随处可以搜到,并且标准教科书上一般也是这样的电路图。

为什么要明白这个图的原理?

单片机是一个弱电器件,一般情况下它们大都工作在5V甚至更低.驱动电流在mA级以下。而要把它用于一些大功率场合,比如控制电动机,显然是不行的。所以,就要有一个环节来衔接,这个环节就是所谓的"功率驱动"。继电器驱动就是一个典型的、简单的功率驱动环节。在这里,继电器驱动含有两个意思:一是对继电器进行驱动,因为继电器本身对于单片机来说就是一个功率器件;还有就是继电器去驱动其他负载,比如继电器可以驱动中间继电器,可以直接驱动接触器。所以,继电器驱动就是单片机与其他大功率负载接口。这个很重要,因为,一直让我们的电气工程师(我指的是那些没有学习过相应的电子技术的)感到迷惑不解的是:一个小小的芯片,怎么会有如此强大的威力来控制像电动机这样强大的东西?

怎么样理解这个电路图?

要理解这个电路,其实也比较容易。那么请您按照我的思路来,应该没有问题:

首先的,里面的三极管很重要。三极管是电子电路里很重要的一个元件。怎么样理解三极管呢?

简单的来说三极管有两个作用一个是放大作用,一个是开关作用。(严格来讲开关作用是放大作用的极限情况,不过没关系,把两者分开,更便于理解它的工作原理)。在这里,我们只了解它跟本电路有关的开关作用。

首先把三极管想成一个水龙头。

上面的Vcc就是水池,继电器是一个水轮机,下面的GND是比水池低的任何一点。刚才说过,三极管就是水龙头,它的把手就是那个带有电阻的引脚。

现在,单片机的某一个需要控制这个继电器电路的输出引脚就是一只"手",当单片机的这个引脚输出低电平的时候,就像"手"在打开三极管"水龙头",水就从上往下流,继电器"水轮机"就开始转起来了。反之,如果是输出高电平,"手"就开始关"水龙头",继电器"水轮机"因为没有水流下来,就会停止。

这就是三极管的开关作用。

简单的理解和记忆就是:三极管是一个开关器件,其实你真的可以将它看成是一个开关,只不过它不是用手来控制,而是用电压(电流)来控制的,因此,三极管有些时候也被称做电子开关(与机械开关相区别)。
图上还有一个东西,是保护二极管,如果不需要深入理解的话,你大可不必追就为什么有它存在,但是一定得记住,只要是用三极管驱动继电器的场合,一般都有它的存在。需要特别注意的是它的接法:并联在继电器两端 阴极一定是接Vcc

下附我学习的STC8052RC单片机上的继电器模块电路

哦,原来这就是继电器啊,这是我在百科上查到继电器原理图后的第一感觉,原来我们初中物理就已经学过了,可是那会根本没有这么具体的理解,就是会考试了。

来源:互联网

围观 340

在单片机编程的过程中,如果一名设计者能够同时掌握多门编程语言,那么这名设计者肯定是一位非常优秀的人才。但是想要同时精通汇编、C语言、C++这三门语言实在是太难了,很多初学者在其中一门的学习中就已经到处碰壁,苦不堪言。本文特意为大家整理了拥有嵌入式编程领域多年工作经验的工程师意见,汇总成了一篇能够对嵌入式编程经验有着指导意义的注意事项,感兴趣的朋友快来看一看吧。

在单片机嵌入式编程中,最难的两部分是interrupt和MM(memorymanage),之所以有人觉得并不困难,那是因为太多数情况下芯片制造商都已经直接写好,但是如果设计者本身就在为芯片制造商工作,那就必须自己会写配置文件。

这两个东西之所以比较难是因为要用汇编或类C来写,属于比较低层的东西,中断有外部中断和内部中断,外部中断有两种实现模式,硬件中断模式和软件中断模式,相对来说比较简单,属于应用层面的,相比之下,内部中断就要复杂得多,内部中断主要是发生重起,总线出错、溢出、校验出错等情况产生的,很多软件开发人员基本上不写对应的中断服务程序,因为它太难了而且一般也用不到。但是一旦发生,那就是致命错误,因此从整个系统健壮性来考虑必须要有相应的ISR才行,这也是freescale的专家建议的,因所以下面就谈一下嵌入式编程应该注意的问题。

延时

嵌入式编程经常会涉及到硬件的操作,如ADC,打开或者关闭一个电流源,这些都是需要时间的,因此当在发出这些指令的时候立即读取寄存器的值是得不到想要的结果的,而且还找不出原因,有时候需要的延时还比较长,达到ms级,一般情况下us级就够了,根据各芯片的时钟频率而定,不单指MCU的总线时钟频率。

变量

一般来说如果非常明确某个变量的作用域和生命周期就应该定义相对的变量,如const、static等,这样不容易出错,不建议将所有变量都定义成全局变量,这样管理起来比较麻烦,程序一旦出错,破坏性也比较大,函数也是如此,全局变量和通用函数一定要申明,这样在调用的时候不容易出错,而且有些编译器对于未申明的函数是不会报错的,但在调用的时候又会发出类型隐含转换的警告,在这里就不举例子了,总之这点要特别小心。

宏定义

在程序编写过程对于一些特定的数字应该尽量使用宏定义,这样做有个好处就是比较直观,便于日后维护,要不然时间久了看到那个数字根本就想不起它代表什么意思,宏定义并不会给程序带来任何负担,因为它在编译的时候就已经全部替代了,所以尽可以广而用之。值得一提的是宏定义并不局限于使用常量,它可以定义函数,因为它是直接替换,因此避免了入栈和出栈,提高了程序执行的效率,当时同时增加了代码量,因此一般用比较简单的函数,它还有一个缺点是在替换的过程不检查参数类型是否正常,从而增加了安全隐患,解决此问题的方法是使用一个称之为inline的内联函数,它继承了宏定义的优点,又弥补了它的缺点,是个最佳的选择,但是这个属于C++的范畴,有一定的难度,在这里也不多讲,有兴趣的朋友可以参考一下相关资料。

浮点运算

大多数低档次的单片机都是不支持浮点运算的,因此在实际使用过程中也很少用到,因此为了降低成本,一般都去掉了浮点运算模块,这就带来了一个问题,如果万一要用到浮点运算怎么办?细心的朋友可能会发现,即使不具有浮点运算的单片机在仿真调试过程依然可以使用floatordouble的数据类型进行计算,而且结果也很准确,这是为什么呢?这个因为编译器自动调用了库函数来实现的,一般是通过迭代的方法,因此它的执行效率非常慢,不建议采用此方法,而通常采用的是“定点”的方法来解决这个问题,比如说一个32bit的数据,可以假定它的低8位是小数位,然后移位计算,类似于整数运算,这种方法比较复杂,但是可以非常精确,还有一种方法就是直接放大10的N次方倍进行整数的计算,可以得出近似值,因此为了不增加不必要的麻烦,应该总是尽量避免使用浮点运算,一般情况也都是可以避免的。

watch dog

以三重watch dog为例,watch dog1检查时钟频率,watch dog2监视一小段代码,它必须在一个比较短的时间里喂一次,一般要求在250us到650us之间喂一次,watch dog3监视一大段代码,要求在比较长的时间内喂一次,一般是100ms以内,三个条件必须同时满足才行,这要求对代码的执行过程非常清楚,或者将导致喂狗出错重起。

这里需要向大家强调的是,在单片机嵌入式的编程过程中程序的好坏往往是由细节决定的,一个程序写的是否详细、灵活,是与日积月累的知识积累与实际磨练成正比的。虽然编程是意见非常枯燥甚至乏味的过程,但成功后的喜悦能够让大家相信这份付出是值得的。

文章来源:互联网

围观 246


单片机是指一个集成在一块芯片上的完整计算机系统。尽管它的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。同时集成诸如通讯接口、定时器,实时时钟等外围设备。而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。

单片机也被称为微控制器(Microcontroller),是因为它最早被用在工业控制领域。单片机由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。

早期的单片机都是8位或4位的。其中最成功的是INTEL的8031,因为简单可靠而性能不错获得了很大的好评。此后在8031上发展出了MCS51系列单片机系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着消费电子产品大发展,单片机技术得到了巨大的提高。随着INTELi960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。目前,高端的32位单片机主频已经超过300MHz,性能直追90年代中期的专用处理器,而普通的型号出厂价格跌落至1美元,最高端的型号也只有10美元。当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。而在作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的Windows和Linux操作系统。

单片机比专用处理器更适合应用于嵌入式系统,因此它得到了最多的应用。事实上单片机是世界上数量最多的计算机。现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。而个人电脑中也会有为数不少的单片机在工作。汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作!单片机的数量不仅远超过PC机和其他计算的综合,甚至比人类的数量还要多。

一、单片机诞生于20世纪70年代末,经历了SCM、MCU、SoC三大阶段

1、SCM即单片微型计算机(SingleChipMicrocomputer)阶段,主要是寻求最佳的单片形态嵌入式系统的最佳体系结构。“创新模式”获得成功,奠定了SCM与通用计算机完全不同的发展道路。在开创嵌入式系统独立发展道路上,Intel公司功不可没。

2、MCU即微控制器(MicroControllerUnit)阶段,主要的技术发展方向是:不断扩展满足嵌入式应用时,对象系统要求的各种外围电路与接口电路,突显其对象的智能化控制能力。它所涉及的领域都与对象系统相关,因此,发展MCU的重任不可避免地落在电气、电子技术厂家。从这一角度来看,Intel逐渐淡出MCU的发展也有其客观因素。在发展MCU方面,最著名的厂家当数Philips公司。Philips公司以其在嵌入式应用方面的巨大优势,将MCS-51从单片微型计算机迅速发展到微控制器。因此,当我们回顾嵌入式系统发展道路时,不要忘记Intel和Philips的历史功绩。

3、单片机是嵌入式系统的独立发展之路,向MCU阶段发展的重要因素,就是寻求应用系统在芯片上的最大化解决;因此,专用单片机的发展自然形成了SoC化趋势。随着微电子技术、IC设计、EDA工具的发展,基于SoC的单片机应用系统设计会有较大的发展。因此,对单片机的理解可以从单片微型计算机、单片微控制器延伸到单片应用系统。

4、单片机的发展,单片机作为微型计算机的一个重要分支,应用面很广,发展很快。自单片机诞生至今,已发展为上百种系列的近千个机种。

5、如果将8位单片机的推出作为起点,那么单片机的发展历史大致可分为以下几个阶段:

(1)第一阶段(1976-1978):单片机的控索阶段。以Intel公司的MCS–48为代表。MCS–48的推出是在工控领域的控索,参与这一控索的公司还有Motorola、Zilog等,都取得了满意的效果。这就是SCM的诞生年代,“单机片”一词即由此而来。

(2)第二阶段(1978-1982):单片机的完善阶段。Intel公司在MCS–48基础上推出了完善的、典型的单片机系列MCS–51。它在以下几个方面奠定了典型的通用总线型单片机体系结构。①完善的外部总线。MCS-51设置了经典的8位单片机的总线结构,包括8位数据总线、16位地址总线、控制总线及具有很多机通信功能的串行通信接口。②CPU外围功能单元的集中管理模式。③体现工控特性的位地址空间及位操作方式。④指令系统趋于丰富和完善,并且增加了许多突出控制功能的指令。

(3)第三阶段(1982-1990):8位单片机的巩固发展及16位单片机的推出阶段,也是单片机向微控制器发展的阶段。Intel公司推出的MCS–96系列单片机,将一些用于测控系统的模数转换器、程序运行监视器、脉宽调制器等纳入片中,体现了单片机的微控制器特征。随着MCS–51系列的广应用,许多电气厂商竞相使用80C51为内核,将许多测控系统中使用的电路技术、接口技术、多通道A/D转换部件、可靠性技术等应用到单片机中,增强了外围电路路功能,强化了智能控制的特征。

(4)第四阶段(1990—):微控制器的全面发展阶段。随着单片机在各个领域全面深入地发展和应用,出现了高速、大寻址范围、强运算能力的8位/16位/32位通用型单片机,以及小型廉价的专用型单片机。

二、单片机的发展趋势

目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。

1、下面是单片机的主要发展趋势:

(1)CMOS化

近年,由于CHMOS技术的进小,大大地促进了单片机的CMOS化。CMOS芯片除了低功耗特性之外,还具有功耗的可控性,使单片机可以工作在功耗精细管理状态。这也是今后以80C51取代8051为标准MCU芯片的原因。因为单片机芯片多数是采用CMOS(金属栅氧化物)半导体工艺生产。CMOS电路的特点是低功耗、高密度、低速度、低价格。采用双极型半导体工艺的TTL电路速度快,但功耗和芯片面积较大。随着技术和工艺水平的提高,又出现了HMOS(高密度、高速度MOS)和CHMOS工艺。CHMOS和HMOS工艺的结合。目前生产的CHMOS电路已达到LSTTL的速度,传输延迟时间小于2ns,它的综合优势已在于TTL电路。因而,在单片机领域CMOS正在逐渐取代TTL电路。低功耗化单片机的功耗已从Ma级,甚至1uA以下;使用电压在3~6V之间,完全适应电池工作。低功耗化的效应不仅是功耗低,而且带来了产品的高可靠性、高抗干扰能力以及产品的便携化。

(2)低电压化

几乎所有的单片机都有WAIT、STOP等省电运行方式。允许使用的电压范围越来越宽,一般在3~6V范围内工作。低电压供电的单片机电源下限已可达1~2V。目前0.8V供电的单片机已经问世。低噪声与高可靠性为提高单片机的抗电磁干扰能力,使产品能适应恶劣的工作环境,满足电磁兼容性方面更高标准的要求,各单片厂家在单片机内部电路中都采用了新的技术措施。

(3)大容量化

以往单片机内的ROM为1KB~4KB,RAM为64~128B。但在需要复杂控制的场合,该存储容量是不够的,必须进行外接扩充。为了适应这种领域的要求,须运用新的工艺,使片内存储器大容量化。目前,单片机内ROM最大可达64KB,RAM最大为2KB。

(4)高性能化

主要是指进一步改进CPU的性能,加快指令运算的速度和提高系统控制的可靠性。采用精简指令集(RISC)结构和流水线技术,可以大幅度提高运行速度。现指令速度最高者已达100MIPS(MillionInstructionPerSeconds,即兆指令每秒),并加强了位处理功能、中断和定时控制功能。这类单片机的运算速度比标准的单片机高出10倍以上。由于这类单片机有极高的指令速度,就可以用软件模拟其I/O功能,由此引入了虚拟外设的新概念。

(5)小容量、低价格化

与上述相反,以4位、8位机为中心的小容量、低价格化也是发展动向之一。这类单片机的用途是把以往用数字逻辑集成电路组成的控制电路单片化,可广泛用于家电产品。外围电路内装化这也是单片机发展的主要方向。随着集成度的不断提高,有可能把众多的各种处围功能器件集成在片内。除了一般必须具有的CPU、ROM、RAM、定时器/计数器等以外,片内集成的部件还有模/数转换器、DMA控制器、声音发生器、监视定时器、液晶显示驱动器、彩色电视机和录像机用的锁相电路等。串行扩展技术在很长一段时间里,通用型单片机通过三总线结构扩展外围器件成为单片机应用的主流结构。随着低价位OTP(OneTimeProgramble)及各种类型片内程序存储器的发展,加之处围接口不断进入片内,推动了单片机“单片”应用结构的发展。特别是IC、SPI等串行总线的引入,可以使单片机的引脚设计得更少,单片机系统结构更加简化及规范化。随着半导体集成工艺的不断发展,单片机的集成度将更高、体积将更小、功能将列强。在单片机家族中,80C51系列是其中的佼佼者,加之Intel公司将其MCS–51系列中的80C51内核使用权以专利互换或出售形式转让给全世界许多著名IC制造厂商,如Philips、NEC、Atmel、AMD、华邦等,这些公司都在保持与80C51单片机兼容的基础上改善了80C51的许多特性。这样,80C51就变成有众多制造厂商支持的、发展出上百品种的大家族,现统称为80C51系列。80C51单片机已成为单片机发展的主流。专家认为,虽然世界上的MCU品种繁多,功能各异,开发装置也互不兼容,但是客观发展表明,80C51可能最终形成事实上的标准MCU芯片。

三、单片机的组成及特点

单片机是微型机的一个主要分支,在结构上的最大特点是把CPU、存储器、定时器和多种输入/输出接口电路集成在一块超大规模集成电路芯片上。就其组成和功能而言,一块单片机芯片就是一台计算机。

1、单片机的组成:

它通过内部总线把计算机的各主要部件接为一体,其内部总线包括地址总线、数据总线和控制总线。其中,地址总线的作用是在进行数据交换时提供地址,CPU通过它们将地址输出到存储器或I/O接口;数据总线的作用是在CPU与存储器或I/O接口之间,或存储器与外设之间交换数据;控制总线包括CPU发出的控制信号线和外部送入CPU的应答信号线等。单片机中的CPU、存储器等部件将在后面章节陆续介绍。2.单片机的特点由于单片机的这种结构形式及它所采取的半导体工艺,使其具有很多显著的特点,因而在各个领域都得到了迅猛的发展。

2、单片机主要发如下特点:

(1)有优异的性能价格比。

(2)集成度高、体积小、有很高的可靠性。单片机把各功能部件集成在一块芯片上,内部采用总线结构,减少了各芯片之间的连线,大大提高了单片机的可靠性与抗干扰能力。另外,其体积小,对于强磁场环境易于采取屏蔽措施,适合在恶劣环境下工作。

(3)控制功能强。为了满足工业控制的要求,一般单片机的指令系统中均有极丰富的转移指令、I/O口的逻辑操作以及位处理功能。单片机的逻辑控制功能及运行速度均高于同一档次的微机。

(4)低功耗、低电压,便于生产便携式产品。

(5)外部总线增加了IC(Inter-IntegratedCircuit)及SPI(SerialPeripheralInterface)等串行总线方式,进一步缩小了体积,简化了结构。

(6)单片机的系统扩展和系统配置较典型、规范,容易构成各种规模的应用系统。

四、单片机的分类

单片机作为计算机发展的一个重要领域,应用一个较科学的分类方法。根据目前发展情况,从不同角度单片机大致可以分为通用型/专用型、总线型/非总线型及工控型/家电型。

(1)通用型/专用型这是按单片机适用范围来区分的。例如,80C51是通用型单片机,它不是为某种专用途设计的;专用型单片机是针对一类产品甚至某一个产品设计生产的,例如为了满足电子体温计的要求,在片内集成ADC接口等功能的温度测量控制电路。

(2)总线型/非总线型这是按单片机是否提供并行总线来区分的。总线型单片机普遍设置有并行地址总线、数据总线、控制总线,这些引脚用以扩展并行外围器件都可通过串行口与单片机连接,另外,许多单片机已把所需要的外围器件及外设接口集成一片内,因此在许多情况下可以不要并行扩展总线,大大减省封装成本和芯片体积,这类单片机称为非总线型单片机。

(3)控制型/家电型这是按照单片机大致应用的领域进行区分的。一般而言,工控型寻址范围大,运算能力强;用于家电的单片机多为专用型,通常是小封装、低价格,外围器件和外设接口集成度高。显然,上述分类并不是惟一的和严格的。例如,80C51类单片机既是通用型又是总线型,还可以作工控用。

五、单片机的应用

由于单片机具有显著的优点,它已成为科技领域的有力工具,人类生活的得力助手。它的应用遍及各个领域,主要表现在以下几个方面:

(1)单片机在智能仪表中的应用单片机广泛地用于各种仪器仪表,使仪器仪表智能化,并可以提高测量的自动化程度和精度,简化仪器仪表的硬件结构,提高其性能价格比。

(2)单片机在机电一体化中的应用机电一体化是械工业发展的方向。机电一体化产品是指集成机械技术、微电子技术、计算机技术于一体,具有智能化特征的机电产品,例如微机控制的车床、钻床等。单片机作为产品中的控制器,能充分发挥它的体积小、可靠性高、功能强等优点,可大大提高机器的自动化、智能化程度。

(3)单片机在实时控制中的应用单片机广泛地用于各种实时控制系统中。例如,在工业测控、航空航天、尖端武器、机器人等各种实时控制系统中,都可以用单片机作为控制器。单片机的实时数据处理能力和控制功能,可使系统保持在最佳工作状态,提高系统的工作效率和产品质量。

(4)单片机在分布式多机系统中的应用在比较复杂的系统中,常采用分布式多机系统。多机系统一般由若干台功能各异的单片机组成,各自完成特定的任务,它们通过串行通信相互联系、协调工作。单片机在这种系统中往往作为一个终端机,安装在系统的某些节点上,对现场信息进行实时的测量和控制。单片机的高可靠性和强抗干扰能力,使它可以置于恶劣环境的前端工作。

(5)单片机在人类生活中的应用自从单片机诞生以后,它就步入了人类生活,如洗衣机、电冰箱、电子玩具、收录机等家用电器配上单片机后,提高了智能化程度,增加了功能,倍受人们喜爱。单片机将使人类生活更加方便、舒适、丰富多彩。综合所述,单片机已成为计算机发展和应用的一个重要方面。另一方面,单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。

目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。

单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴:

1、在智能仪器仪表上的应用

单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。例如精密的测量设备(功率计,示波器,各种分析仪)。

2、在工业控制中的应用

用单片机可以构成形式多样的控制系统、数据采集系统。例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。

3、在家用电器中的应用

可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭褒、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在。

4、在计算机网络和通信领域中的应用

现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。

5、单片机在医用设备领域中的应用

单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。

6、在各种大型电器中的模块化应用

某些专用单片机设计用于实现特定功能,从而在各种电路中进行模块化应用,而不要求使用人员了解其内部结构。如音乐集成单片机,看似简单的功能,微缩在纯电子芯片中(有别于磁带机的原理),就需要复杂的类似于计算机的原理。如:音乐信号以数字的形式存于存储器中(类似于ROM),由微控制器读出,转化为模拟音乐电信号(类似于声卡)。

在大型电路中,这种模块化应用极大地缩小了体积,简化了电路,降低了损坏、错误率,也方便于更换。

此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的用途。

文章来源:玩转单片机

围观 468


随着单片机的发展,单片机在家用电器、工业自动化、生产过程控制、智能仪器仪表等领域的应用越来越广泛。然而处于同一电力系统中的各种电气设备通过电或磁的联系彼此紧密相连,相互影响,由于运行方式的改变,故障,开关操作等引起的电磁振荡会波及很多电气设备。

随着单片机的发展,单片机在家用电器、工业自动化、生产过程控制、智能仪器仪表等领域的应用越来越广泛。然而处于同一电力系统中的各种电气设备通过电或磁的联系彼此紧密相连,相互影响,由于运行方式的改变,故障,开关操作等引起的电磁振荡会波及很多电气设备。这对我们单片机系统的可靠性与安全性构成了极大的威胁。单片机测控系统必须长期稳定、可靠运行,否则将导致控制误差加大,严重时会使系统失灵,甚至造成巨大损失。因此单片机的抗干扰问题已经成为不容忽视的问题。

1、干扰对单片机应用系统的影响

1.1测量数据误差加大

干扰侵入单片机系统测量单元模拟信号的输入通道,叠加在测量信号上,会使数据采集误差加大。特别是检测一些微弱信号,干扰信号甚至淹没测量信号。

1.2 控制系统失灵

单片机输出的控制信号通常依赖于某些条件的状态输入信号和对这些信号的逻辑处理结果。若这些输入的状态信号受到干扰,引入虚假状态信息,将导致输出控制误差加大,甚至控制失灵。

1.3 影响单片机RAM存储器和E2PROM等

在单片机系统中,程序及表格、数据存在程序存储器EPROM或FLASH中,避免了这些数据受干扰破坏。但是,对于片内RAM、外扩RAM、E2PROM 中的数据都有可能受到外界干扰而变化。

1.4 程序运行失常

外界的干扰有时导致机器频繁复位而影响程序的正常运行。若外界干扰导致单片机程序计数器PC值的改变,则破坏了程序的正常运行。由于受干扰后的PC 值是随机的,程序将执行一系列毫无意义的指令,最后进入“死循环”,这将使输出严重混乱或死机。

2、如何提高我们设备的抗干扰能力

2.1 解决来自电源端的干扰

单片机系统中的各个单元都需要使用直 流电源,而直流电源一般是市电电网的交流电经过变压、整流、滤波、稳压后产生的,因此电网上的各种干扰便会引入系统。除此之外,由于交流电源共用,各电子设备之间通过电源也会产生相互干扰,因此抑制电源干扰尤其重要。电源干扰主要有以下几类:

2.1.1电源线中的高频干扰(传导骚扰)

供电电力线相当于一个接受天线,能把雷电、电弧、广播电台等辐射的高频干扰信号通过电源变压器初级耦合到次级,形成对单片机系统的干扰;解决这种干扰,一般通过接口防护;在接口增加滤波器、或者使用隔离电源模块解决。

2.1.2 感性负载产生的瞬变噪音(EFT)

切断大容量感性负载时,能产生很大的电流和电压变化率,从而形成瞬变噪音干扰,成为电磁干扰的主要形式;解决这种干扰,一般通过屏蔽线与双胶线,或在电源接口、信号接口进行滤波处理。这二种方法都需要在系统接地良好的情况下进行,滤波器、接口滤波电路都必须良好的接地,这样才能有效的将干扰泄放。

2.2 模拟信号采样抗干扰技术

单片机应用系统中通常要对一个或多个模拟信号进行采样,并将其通过A/D转换成数字信号进行处理。为了提高测量精度和稳定性,不仅要保证传感器本身的转换精度、传感器供电电源的稳定、测量放大器的稳定、A/D转换基准电压的稳定,而且要防止外部电磁感应噪声的影响,如果处理不当,微弱的有用信号可能完全被无用的噪音信号淹没。在实际工作中,可以采用具有差动输入的测量放大器,采用屏蔽双胶线传输测量信号,或将电压信号改变为电流信号,以及采用阻容滤波等技术。

2.3 数字信号传输通道的抗干扰技术

数字输出信号可作为系统被控设备的驱动信号(如继电器等),数字输入信号可作为设备的响应回答和指令信号(如行程开关、启动按钮等)。数字信号接口部分是外界干扰进入单片机系统的主要通道之一。在工程设计中,对数字信号的输入/输出过程采取的抗干扰措施有:传输线的屏蔽技术,如采用屏蔽线、双胶线等;采用信号隔离措施;合理接地,由于数字信号在电平转换过程中形成公共阻抗干扰,选择合适的接地点可以有效抑制地线噪声。

2.4 硬件监控电路

在单片机系统中,为了保证系统可靠、稳定地运行,增强抗干扰能力,需要配置硬件监控电路,硬件监控电路从功能上包括以下几个方面:

(1)上电复位:保证系统加电时能正确地启动;

(2)掉电复位:当电源失效或电压降到某一电压值以下时,产生复位信号对系统进行复位;

(3)电源监测:供电电压出现异常时,给出报警指示信号或中断请求信号;

(4)硬件看门狗:当处理器遇到干扰或程序运行混乱产生“死锁”时,对系统进行复位。

2.5 PCB电路合理布线

PCB板设计的好坏对抗干扰能力影响很大。因此,在进行PCB 设计时,必须遵守PCB 设计的一般原则,并应符合抗干扰设计的要求。下面着重说明两点:

2.5.1关键器件放置

在器件布置方面与其它逻辑电路一样,应把相互有关的器件尽量放得靠近些,这样可以获得较好的抗噪声效果。时钟发生器、晶振和CPU 的时钟输入端都易产生噪声,要相互靠近些;CPU 复位电路、硬件看门狗电路要尽量靠近CPU相应引脚;易产生噪声的器件、大电流电路等应尽量远离逻辑电路。

2.5.2 D/A、A/D 转换电路地线的正确连接

D/A、 A/D 芯片及采样芯片均提供了数字地和模拟地,分别有相应的管脚。在线路设计中,必须将所有器件的数字地和模拟地分别相连,但数字地与模拟地仅在一点上相连。另外,也可以采用屏蔽保护,屏蔽可用来隔离空间辐射。对噪声特别大的部件(如变频电源、开关电源)可以用金属盒罩起来以减少噪声源对单片机的干扰,对容易受干扰的部分,可以增加屏蔽罩并接地,使干扰信号被短路接地。

2.6 软件抗干扰原理及方法

尽管我们采取了硬件抗干扰措施,但由于干扰信号产生的原因错综复杂,且具有很大的随机性,很难保证系统完全不受干扰。因此,往往在硬件抗干扰措施的基础上,采取软件抗干扰技术加以补充,作为硬件措施的辅助手段。软件抗干扰方法具有简单、灵活方便、耗费低等特点,在系统中被广泛应用。

2.6.1 数字滤波方法

数字滤波是在对模拟信号多次采样的基础上,通过软件算法提取最逼近真值数据的过程。数字滤波的的算法灵活,可选择权限参数,其效果往往是硬件滤波电路无法达到的。

2.6.2 输入信号重复检测方法

输入信号的干扰是叠加在有效电平信号上的一系列离散尖脉冲,作用时间很短。当控制系统存在输入干扰,又不能用硬件加以有效抑制时,可用软件重复检测的方法,达到“去伪存真”的目的,直到连续两次或连续两次以上的采集结果完全一致时方为有效。若信号总是变化不定,在达到最高次数限额时,则可给出报警信号。对于来自各类开关型传感器的信号,如限位开关、行程开关、操作按钮等,都可采用这种输入方式。如果在连续采集数据之间插入延时,则能够对付较宽的干扰。

2.6.3 输出端口数据刷新方法

开关量输出软件抗干扰设计,主要是采取重复输出的方法,这是一种提高输出接口抗干扰性能的有效措施。对于那些用锁存器输出的控制信号,这些措施很有必要。在尽可能短的周期内,将数据重复输出,受干扰影响的设备在还没有来得及响应时,正确的信息又到来,这样就可以及时防止误动作的产生。在程序结构的安排上,可为输出数据建立一个数据缓冲区,在程序的周期性循环体内将数据输出。对于增量控制型设备不能这样重复送数,只有通过检测通道,从设备的反馈信息中判断数据传输的正确与否。在执行重复输出功能时,对于可编程接口芯片,工作方式控制字与输出状态字一并重复设置,使输出模块可靠地工作。

2.6.4 软件拦截技术

当窜入单片机系统的干扰作用在CPU 部位时,后果更加严重,将使系统失灵。最典型的故障是破坏程序计数器PC 的状态,导致程序从一个区域跳转到另一个区域,或者程序在地址空间内“乱飞”,或者陷入“死循环”。使用软件拦截技术可以拦截“乱飞”的程序或者使程序摆脱“死循环”,并将运行程序纳入正轨,转到指定的程序入口。

2.6.5 “软件看门狗”技术

PC 受到干扰而失控,引起程序“乱飞”,也可能使程序陷入“死循环”。当软件拦截技术不能使失控的程序摆脱“死循环”的困境时,通常采用程序监视技术WDT TIMER(WDT),又称“看门狗”技术,使程序脱离“死循环”。WDT 是一种软、硬件结合的抗程序跑飞措施,其硬件主体是一个用于产生定时T 的计数器或单稳,该计数器或单稳基本独立运行,其定时输出端接至CPU 的复位线,而其定时清零则由CPU 控制。在正常情况下,程序启动WDT 后,CPU 周期性的将WDT 清零,这样WDT 的定时溢出就不会发生,如同睡眠一般不起任何作用。在受到干扰的异常情况下,CPU 时序逻辑被破坏,程序执行混乱,不可能周期性的将WDT 清零,这样当WDT 的定时溢出时,其输出使系统复位,避免CPU因一时干扰而陷入瘫痪的状态。

3、结束语

随着单片机系统的广泛应用和技术的进步,电磁干扰问题越来越突出,推广现有的、成熟的抗干扰技术,研究抗干扰的新技术、新方向是单片机应用技术的当务之急。在单片机应用系统设计及应用中,只要充分考虑设备的电磁兼容性,并通过各种技术措施来消除干扰,就可以大大提高设备的稳定性和可靠性。

文章来源:互联网

围观 323


引言

常常看到很多网友在讨论51单片机。有人说,51单片机是入门的基础,应该学习;也有人说,ARM系列32位单片机的各种教程已经普及,51单片机早已过时,自然也就失去了学习的必要性。甚至还有一种极端的声音——是时候向51单片机说再见了……

确实,8位MCU和32位MCU,常常被拿来做比较,尤其是在32位MCU的价格不断降低、8位MCU价格优势不那么明显的今天,越来越多地听到关于8位MCU要被淘汰的言论。难道8位MCU真的要退出历史舞台了么?下面就让我们来听听业界的声音吧!

业界声音

飞思卡尔

飞思卡尔微控制器亚太区业务发展总监曹跃瀧这样分析:8位MCU因其成本优势,在未来也具备很大的增长空间,但是它更适合于单独的产品使用。在物联网应用中,很多场合不仅需要实现机械化向电磁化、智能化的转变,而且还要考虑可靠的连接性、安全性和保护性,所有这些功能的实现都需要MCU的参与,因此32位MCU会是物联网应用的主流。

Atmel

在分析物联网应用时,Atmel公司高级产品经理Bjrnge Brandal表示,物联网应用的范围非常广泛,很难说它的主流是8位还是32位。在有些小的应用中,8位的性能已经足以,而且这些小的应用数量也十分可观。就Atmel而言,8位MCU更多地会关注边缘应用,32位产品则侧重高性能应用,两者相结合,争取在物联网应用市场获得更大的发展空间。

HOLTEK

在触摸按键产品领域,HOLTEK已经积累了多年经验, 2014年在MCU竞争异常激烈的情况下还达到了50%的增长率。与笨重的机械式按键相比,HOLTEK以VS系列开头的8位MCU做成的触摸按键更易被客户接受。其PCB板外围电路非常简单,没有大量的电容、电感的设计,大部分运算转换的功能都已被集成到8位的MCU中。配合MCU的开发工具,应用工程师们可以根据自己产品的需求来调试触摸按键的灵敏度,以及根据自己的喜好进行个性化配置,而且价格上相比传统按键也没有提升。目前,此款触控按键MCU出货量为每季1000KK,其中45%被应用到电磁炉和抽油烟机上。

HOLTEK半导体业务总经理蔡荣宗先生认为,随着智能手机和平板电脑的加速成长,加上触控逐步扩散至汽车电子、医疗、家电等领域,相关的应用会越来越多。尽管触控已经不是新技术,但正处于上升期,仍将有一个黄金成长期。

Microchip

8位MCU的销售额水涨船高,Microchip公司正在增加产能满足这种需求。Microchip的首席运营官Ganesh Moorthy在近期电话分析会议上表示,没有想到近三年发布的8位MCU需求如此旺盛,Microchip将扩大产能以满足市场的需求。

瑞萨

由于物联网应用的发展,32位MCU正在快速增长。智能设备和爆发性增长的应用的连接需求,也为MCU的发展推波助澜。瑞萨电子美国市场副总裁Ritesh Tyagi认为,客户意识到,CPU的内核并没有那么重要,它只不过是通过外设组合来与MCU区分。硬件工程师并不会基于位数和内核数来做决定,他们考虑更多的是8位、16位、32位平台的集成度和代码复用性。由于成本和软件复杂程度低的优势,具有更少引脚和存储的8位MCU在未来仍会吸引市场的注意。总的来说,客户正在尝试在一个平台内将其软件标准化,以降低软件开发成本,并且更容易跨高端平台设计。

笙泉

虽然16位、32位单片机市场的竞争异常激烈,但不容忽视的是,客户关注的不仅是性能,还有成本。笙泉公司产品负责人强调,在实际使用中很多客户都会谈到,8051核完全能够满足产品的需求,性价比也很合适,没有必要采用32位MCU,尤其是在对价格非常敏感的应用领域。

宏晶

宏晶科技是国内专注于8位单片机市场的典范。在众多公司迫不及待地转去争夺32位市场之际,宏晶科技仍坚守在8位市场这片依然肥沃的土地上,并凭借丰富的电子产品开发设计经验以及广泛的国际品牌单片机原厂技术资源,成为新一代增强型8位单片微型计算机标准的制定者。其产品不仅广泛地应用在通信、工业控制领域,而且在信息家电、语音、玩具、礼品等领域也有很好的表现,包括手机、交换机、计价器、微型打印机、电子词典、PDA、掌上电脑、数码相机、U盘等。

上海海尔

作为智能电网和智能家居平台的半导体公司,上海海尔的通用MCU产品线目前还是以8位为主。但是公司在专用领域的多款采用ARM Cortex核的专用MCU均已进入量产。虽然,近年来32位产品在整个MCU市场的份额占比在迅速提升,但并不代表8位MCU会在短期内被完全取代。相反,8位MCU由于其应用简单灵活、安全稳定、成本优势等特点,仍会随着整个MCU市场的增长而不断扩增。上海海尔副总经理潘松表示,MCU是个需要长期积累的产业,产品是否稳定,如何达到功能、性能以及成本的最佳平衡,才是产品带给客户的真正价值所在。8位MCU是上海海尔的基础,也是整个MCU行业的基础。而在32位MCU市场,立足细分市场,找到产品附加价值所在,才是真正发展之路。

编辑观点--8位、32位,各有用武之地!

随着全球经济的复苏,工业和汽车行业的微控制器销售额日益攀升,而且这种上升幅度不仅仅限于32位的产品上。其实,8位内核覆盖的产品,在人们的日常生活中随处可见:电视机的遥控器、银行的点钞机、咖啡机、电磁炉……小小8位内核,仍然蕴含着巨大的能量!

(1) 从教学内容看

在单片机百花齐放的时代,51单片机成为经典教学内容。那个时代没有更高级的单片机可供选择,国内也没有更优秀的教材用于参考,老师的水平也是参差不齐,而51单片机正符合当时的需求,不仅有大量的相关教材和广泛的示例,而且工作的实际项目也是以51单片机为主,于是51单片机理所当然成为当时的学习基础。而如今,ARM成为主流,从51单片机转向ARM也是十分自然的事。

如果说学51单片机是误区,那么从学51单片机转向学ARM只是转向了另一个误区,因为其本质上只是以产品为中心的学习内容的正常变化,操作系统的学习也是如此。真正走出误区,应该是将单片机或嵌入式系统的基本原理抽象化,抽去产品外壳或一般性的教学内容,用《嵌入式系统概论》、《操作系统概论》作为高校教材。

(2) 从技术发展看

MCU起源与演化取决于技术与市场两大因素。Intel于1971年推出全球第一个4位微处理器后,迅速转向8位微处理器,此后形成了通用微处理器(MPU)与嵌入式微控制器(MCU)两大分支。在通用微处理器基础上的通用计算机,迅速从8位、16位过渡到32位、64位,没有人质疑这种变化。而在智能化控制领域,MCU长期处于8位机时代,竭尽全力发展与物理对象相关的控制功能。两大分支截然不同的专业分工,形成了IT产业最佳的发展格局。直至今日,在物联网中MCU与通用计算机仍然扮演着不同的角色。

MCU顾名思义是以物理对象智能化控制为己任。在控制功能的优化中,位数不是主要因素,以至于8位MCU长期处于垄断地位,甚至至今还给4位机留下一席之地。

由于某些涉及高速数据处理的应用需要高速运算能力,16位MCU应运而生。但16位MCU的推出并不成功,因为在8位MCU时代后期,已有具备高速处理能力的DSP,致使16位MCU处于尴尬境地。DSP的诞生在一定程度上缓解了8位MCU速度提升的压力。

ARM体系MCU诞生后,由于产业体系变革,使MCU从百花齐放到一枝独秀,致使价位迅速走低,甚至与8位机处于同一量级。ARM体系32位MCU具有综合的控制功能与高速的数据处理能力,技术上覆盖了8位MCU的传统领域。然而,市场因素是复杂的,在无限大的嵌入式系统市场中,8位MCU、32位MCU、64位MCU,乃至4位MCU,都有各自的用武之地,无所谓谁主沉浮,因为在不同的细分领域并不具有可比性。以51单片机为例,在ARM系列挤占8位单片机空间之际,51单片机己进入“智能芯片”这一巨大市场,几乎主宰了无线收发芯片的市场。

至于64位处理器,它是未来发展的一个趋势。目前,就一般用户而言,64位处理器尚无太大的意义。然而,对厂商来说,64位处理器是必备的竞争技术。虽然64位处理器在移动领域还受局限,但在服务器行业已经大展拳脚。或许,只有当未来手机真的需要更大的RAM时,64位处理器及系统应用才能真正发挥其强大的性能,使用户真正体验到64位处理器的强大优势。

文章来源:单机片与嵌入式系统应用

围观 586

页面

订阅 RSS - 单片机