单片机

所谓“时序”从字面意义上来理解,一是“时间问题”;二是“顺序问题”。

先说一下“顺序问题”,这个相对简单一些。我们在学UART串口通信的时候,先1位起始位,再8位数据位,最后1位停止位,这个先后顺序不能错。我们在学1602液晶的时候,比如写指令,RS=L,R/W=L,D0~D7=指令码,这三者的顺序是无所谓的,但是最终的E=高脉冲,必须是在这三条程序之后,这个顺序一旦错误,写的数据也可会出错。

而“时间问题”内容相对复杂,比如UART通信,每一位的时间宽度是1/baud。我们初中就学过一个概念,世界上没有绝对的准确。那么每一位的时间宽度1/baud要求精确到什么范围内呢?

单片机读取UART的RXD引脚数据的时候,一位数据,单片机平均分成了16份,取其中的7、8、9三次读到的结果,这三次中有2次是高电平那这一位就是1,有2次是低电平,那这一次就是0。如果我们的波特率稍微有些偏差,只要累计下来到最后一位停止位,这7、8、9还在范围内即可。如下图所示:

“UART信号采集时序图"
UART信号采集时序图

我们用三个箭头来表示7、8、9这三次的采集位置,大家可以看到,当采集到 D7的时候,已经有一次采集偏出去了,但我们采集到的数据还是不会错,因为有2次采集正确。至于这个偏差允许多大,大家自己可以详细算一下。实际上UART通信的波特率是允许一定范围内误差存在的,但不能过大,否则就会采集错误。

大家在计算波特率的时候,发现没有整除,有小数部分的时候,就要特别小心了,因为小数部分是一概被舍掉的,于是计算误差就产生了。我们用11.0592M晶振计算的过程中,11059200/12/32/9600得到的是一个整数,如果用12M晶振计算12000000/12/32/9600就会得到一个小数,大家可以算一下误差多少,是否在误差范围内。

1602的时序问题,大家要学会通过LCD1602的数据手册提供的时序图和时序参数表格来进行研究,而且看懂时序图是学习单片机所必须掌握的一项技能,如下图所示:

“1602时序图"
1602时序图

大家看到这种图的时候不要感觉害怕,说句不过分的话,单片机这些逻辑上的问题,只要小学毕业就可以理解的,很多时候是因为大家把问题想象的太难才学不下去的。

我们先来看一下读操作时序的RS引脚和R/W引脚,这两个引脚先进行变化,因为是读操作,所以R/W引脚首先要置为高电平,而不管它原来是什么。读指令还是读数据,都是读操作,而且都有可能,所以RS引脚既有可能是置为高电平,也有可能是置为低电平,大家注意上图的画法。而RS和R/W变化了经过Tsp1这么长时间后,使能引脚E才能从低电平到高电平发生变化。

而使能引脚E拉高经过了tD这么长时间后,LCD1602输出DB的数据就是有效数据了,我们就可以来读取DB的数据了。读完了之后,我们要先把使能E拉低,经过一段时间后RS、R/W和DB才可以变化继续为下一次读写做准备了。

而写操作时序和读操作时序的差别,就是写操作时序中,DB的改变是由单片机来完成的,因此要放到使能引脚E的变化之前进行操作,其它区别大家可以自行对比一下。

细心的话就会发现,这个时序图上还有很多时间标签。比如E的上升时间tR,下降时间时间tF,使能引脚E从一个上升沿到下一个上升沿之间的长度周期tC,使能E下降沿后,R/W和RS变化时间间隔tHD1等等很多时间要求,这些要求怎么看呢?放心,只要是正规的数据手册,都会把这些时间要求给大家标记出来的。

“”

大家要善于把手册中的这个表格和时序图结合起来看,上面表中的数据都是时序参数,大家务必要学会自己看时序图,这个很重要。此外,看以下解释也需要结合时序图来看。

tC:指的是使能引脚E从本次上升沿到下次上升沿的最短时间是400ns,而我们单片机因为速度较慢,一个机器周期就是1us多,而一条C语言指令肯定是一个或者几个机器周期的,所以这个条件完全满足。

tPW:指的是使能引脚E高电平的持续时间最短是150ns,同样由于我们的单片机比较慢,这个条件也完全满足。

tR,tF:指的是使能引脚E的上升沿时间和下降沿时间,不能超过25ns,别看这个数很小,其实这个时间限值是很宽裕的,我们实际用示波器测了一下开发板的这个引脚上升沿和下降沿时间大概是10ns到15ns之间,完全满足。

tSP1:指的是RS和R/W引脚使能后至少保持30ns,使能引脚E才可以变成高电平,这个条件同样也完全满足。

tHD1:指的是使能引脚E变成低电平后,至少保持10ns之后,RS和R/W才能进行变化,这个条件也完全满足。

tD:指的是使能引脚E变成高电平后,最多100ns后,1602就把数据送出来了,那么我们就可以正常去读取状态或者数据了。

tHD2:指的是读操作过程中,使能引脚E变成低电平后,至少保持20ns,DB数据总线才可以进行变化,这个条件也完全满足。

tSP2:指的是DB数据总线准备好后,至少保持40ns,使能引脚E才可以从低到高进行使能变化,这个条件也完全满足。

tHD2:指的是写操作过程中,要引脚E变成低电平后,至少保持10ns,DB数据总线才可以变化,这个条件也完全满足。

好了,LCD1602的时序参数表已经解析完成了,看完之后,是不是感觉比你想象的要简单,没有你想的那么困难。大家自己也得慢慢学会看这种时序图和表格,在今后的学习中,这方面的能力尤为重要。如果以后换用了其它型号的单片机,那么就根据单片机的执行速度来评估你的程序是否满足时序要求。整体来说,器件都是有一个最快速度的限制,而没有最慢限制,所以当换用高速的单片机后,通常都是靠在各步骤间插入软件延时来满足较慢的时序要求。

本文转载自:网络
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:
cathy@eetrend.com)。

围观 25

一、为什么51单片机爱用11.0592MHZ晶振?

其一:因为它能够准确地划分成时钟频率,与UART(通用异步接收器/发送器)量常见的波特率相关。特别是较高的波特率(19600,19200),不管多么古怪的值,这些晶振都是准确,常被使用的。

其二:用11.0592晶振的原因是51单片机的定时器导致的。用51单片机的定时器做波特率发生器时,如果用11.0592Mhz的晶振,根据公式算下来需要定时器设置的值都是整数;如果用12Mhz晶振,则波特率都是有偏差的,比如9600,用定时器取0XFD,实际波特率10000,一般波特率偏差在4%左右都是可以的,所以也还能用STC90C516 晶振12M 波特率9600,倍数时误差率6.99%,不倍数时误差率8.51%,数据肯定会出错。这也就是串口通信时大家喜欢用11.0592MHz晶振的原因,在波特率倍速时,最高可达到57600,误差率0.00%。用12MHz,最高也就4800,而且有0.16%误差率,但在允许范围,所以没多大影响。

二、在设计51单片机系统PCB时,晶振为何被要求紧挨着单片机?

原因如下:晶振是通过电激励来产生固定频率的机械振动,而振动又会产生电流反馈给电路,电路接到反馈后进行信号放大,再次用放大的电信号来激励晶振机械振动,晶振再将振动产生的电流反馈给电路,如此这般。当电路中的激励电信号和晶振的标称频率相同时,电路就能输出信号强大,频率稳定的正弦波。整形电路再将正弦波变成方波送到数字电路中供其使用。

问题在于晶振的输出能力有限,它仅仅输出以毫瓦为单位的电能量。在 IC(集成电路) 内部,通过放大器将这个信号放大几百倍甚至上千倍才能正常使用。

晶振和 IC 间一般是通过铜走线相连的,这根走线可以看成一段导线或数段导线,导线在切割磁力线的时候会产生电流,导线越长,产生的电流越强。现实中,磁力线不常见, 电磁波却到处都是,例如:无线广播发射、电视塔发射、手机通讯等等。晶振和IC之间的连线就变成了接收天线,它越长,接收的信号就越强,产生的电能量就越强,直到接收到的电信号强度超过或接近晶振产生的信号强度时,IC内的放大电路输出的将不再是固定频率的方波了,而是乱七八糟的信 号,导致数字电路无法同步工作而出错。

所以,画PCB(电路板)的时候,晶振离它的放大电路(IC管脚)越近越好。

三、单片机电路晶振不起振原因分析

遇到单片机晶振不起振是常见现象,那么引起晶振不起振的原因有哪些呢?

① PCB板布线错误;
②单片机质量有问题;
③ 晶振质量有问题;
④负载电容或匹配电容与晶振不匹配或者电容质量有问题;
⑤PCB板受潮,导致阻抗失配而不能起振;
⑥ 晶振电路的走线过长;
⑦晶振两脚之间有走线;⑧外围电路的影响。

解决方案,建议按如下方法逐个排除故障:

① 排除电路错误的可能性,因此可以用相应型号单片机的推荐电路进行比较。
② 排除外围元件不良的可能性,因为外围零件无非为电阻,电容,很容易鉴别是否为良品。
③ 排除晶振为停振品的可能性,因为不会只试了一二个晶振。
④试着改换晶体两端的电容,也许晶振就能起振了,电容的大小请参考晶振的使用说明。
⑤在PCB布线时晶振电路的走线应尽量短且尽可能靠近IC,杜绝在晶振两脚间走线。

四、51单片机时钟电路用12MHZ的晶振时那电容的值是怎样得出来的?拿内部时钟电路来说明吧!

其实这两个电容没人能够解释清楚到底怎么选值,因为22pF实在是太小了。这个要说只能说和内部的振荡电路自身特性有关系,搭配使用,用来校正波形,没有人去深究它到底为什么就是这么大的值。

五、单片机晶振电路中两个微调电容不对称会怎样?相差多少会使频率怎样变化?在检测无线鼠标的接受模块时,发现其频率总是慢慢变化(就是一直不松探头的手,发现频率慢慢变小)晶振是新的。

电容不对称也不会引起频率的漂移,说的频率漂移可能是因为晶振的电容的容量很不稳定引起的,可以换了试,换两电容不难,要不就是的晶振的稳定性太差了,或者测量的方法有问题。

六、单片机晶振与速度的疑问,执行一条指令的周期不是由晶振决定的吗。那么比如51单片机和MSP430,给51接高速晶振,430接低速的,是不是51跑的要快?是不是速度单片机速度仅仅与晶振有关,关键是单片机能不能支持那么大的晶振?

每个单片机的速度是受到内部逻辑门电平跳变速度限制的。两个芯片同时使用同样的晶振,比如12M的。因为AVR是RISC指令集,它在同样外部晶振频率下,比51要快。

比如,51最快能接40M,AVR是16M的晶振。

STC89C52大都用12MHz晶振,但由于其12个时钟周期才是一个机器周期,相当于其主频只有1MHz。

MSP430采用RISC精简指令集, 430单片机若采用内部DCO震荡可达21MHz主频。单个时钟周期就可以执行一条指令,相同晶振,速度较51快12倍。

对于一个51,给它用更高的晶振,速度会快些。但是对于高级的单片机就不一样了。高级单片机内部,一般都是有频率控制寄存器的,所以,简单的增加晶振,可能达到单片机的极限,导致跑飞。

七、请问:有什么方法可以确定某一款单片机在某一大小的晶振下是否能正常工作?

晶振选择太高不太合适,具体晶振上限是多少,恐怕测不出来,只能按照人家单片机的要求,一般STC系列单片机上限是35M或40M,stc单凭上写的有,如STC11F16XE 35I-LQFP44G其中35I就是晶振最高35M的工业级芯片。

超过上限会出现什么样的问题,没有测试过,一般晶振选择12M的比较多,如果选择STC 1T指令的,就相当于12*12=144M的晶振。如果用于串口通信,建议选用11.0592M的或22.184M,选择晶振最主要还是参照人家的说明书。

八、4个AT89C51单片机能否用一个12M的晶振使其都正常工作?一个采用内部时钟方式,其余三个用外部方式......那四个都用内部方式可以不(将4个单片机都并联在一个晶振上)?

可以,其中一个正常接晶振,他的XTAL2输出接到另外三个的XTAL1输入上。

九、单片机的运行速度和晶振大小的关系,若单片机的最高工作频率是40M,晶振是否可以选择24M或更高,但不超过40M,这样单片机的运行速度是否大增?长期在此工作频率下对单片机是否有不良影响?单片机对晶振的选择的原则是怎样的?

当然是有影响的,单片机的工作速度越快,功耗也越大,受干扰也会越厉害,总之最高能跑40M的,跑不超过40M的是没有问题的,只是对相关的技术(如PCB的设计元件的选取等)会高去很多。

十、89c51单片机的复位电路中常采用12MHZ的晶振,实际上市场上稍小于12MHZ,为什么呢?

答:需要串口通讯时一般是用11.0582MHZ的,这样波特率才好算。用12MHZ的工作周期就容易计算。

十一、单片机晶振上电不起振,但是手碰一下晶振就起振了,为什么?怎么判断单片机晶振是否起振呀?

看看晶振配的电容焊了没有,值有没有错误?

最简单是用示波器,另外可以看一下电源是否正常。

十二、怎样判断单片机外部晶振有没有起振?STC89C52单片机本来是好好的后来不行了,换了个晶振就好了。但是过了几个小时后又不行了,是怎么回事。还有就是怎样判断晶振是否起振?

①先换一块单片机试试,问题还在则排除单片机;
②可能是虚焊造成的,这点要注意;
③用STC89C52也碰到过类似的问题,换了块晶振就OK 了,好像STC起振不橡AT89S52那么顺。其实对于STC89C52可以直接看30脚(ALE),接个灯,起振一下子就能看出来了。

十三、51单片机晶振上接的电容大小该如何选择?是晶振越大,电容值也要大一些吗,一般常用多大的。有人说常用的从15-33pf,具体如何选择效果最好?比如分别用一个6M和12M的晶振,用多大电容更合适?

15-33pf都可以,一般用的是15P和30P 晶振,大小影响不大。常用的4M和12M以及11.0592M和20M 24M都用的30P,单片机内部有相应的整形电路,不必担心。

十四、没有程序的空白单片机,外部晶振能起振么?

没有内部晶振的单片机,外部晶振可以起振,如传统类MS51系列单片机有内部晶振的单片机,外部晶振不会起振,需要对外部晶振进行配置后才会起振,如果不对外部晶振进行配置仍使用内部晶振,如silicon lab系列C8051F020单片机。

十五、为什么at89c52 P1.0输出2.5v电压,单片机好像未工作,晶振波形是不规则的正弦波可不可以?线路板没有达到预想效果,发光二极管一直亮,感觉还是单片机的问题,P1.0输出2.5v电压,看门狗用的X5045,怎么回事?

将看门狗拿掉,暂时做成最小系统,既只有电源、8952、晶振和两只30P左右的电容。

①将P1.0口置1,测试该口的电压是否在2.5V以上;
②将P1.0口置0,测试改口电压是否约为0V。

是的话就是OK的,否则就要看看电源电压、晶振、8952了。电源电压是5+、-0.25V,且纹波一定要小。

十六、制作max232下载单片机,工作电压都正常,要外加晶振嘛?

当然要加,如果没有外加晶振,那么单片机的时钟电路就没有了,导致单片机串口就不能进行数据传输了,最终这个下载器具就不能下载程序了。

十七、若89c52单片机使用外接晶振,应如何设置?

晶振的两个管脚各接一个20~30pf的电容后分别接入单片机的XTAL1和XTAL2,两个电容的另一端并接后接地即可,不再需要任何设置。

十八、晶振的原理,如何产生正弦信号的,详细一点,从电路方面分析?

晶体可以等效为一个电感,与里面的电容形成振荡回路,能量从电感慢慢到电容,再从电容慢慢到电感,周而复始形成振荡。正半周是电容的充放电过程,负半周是电感的充放电过程。

十九、现在要用52单片机做一个交通灯电路。要求是红灯,绿灯30s,黄灯3s。循环变化。那么外界晶振怎样选择?单指令周期多少比较合适?图中外接的两个电容的作用是什么?大小多少合适?

如果选择晶振的话,那两个电容值可以选择:30加减10PF左右的(频率在0~33MHZ之间);

如果选择陶瓷晶振的话,电容值可以选择:40加减10PF左右的(频率在1.2~12MHZ)振荡器应尽量靠近电容。指令周期是可以算的,这个是有公式的。

二十、89c52单片机 晶振频率才12兆,太小了,怎样能改大晶振频率?

外接18.432或者24MHz的晶振。或者换4T的W77E58单片机,这样相当于把工作频率提高3倍。或者换1T的DS89C4XX单片机,这相当于把工作频率提高8倍。用1T的STC12C5A60S2单片机也有这样的效果。

二十一、单片机不能正常工作,晶振问题?如何去检查晶振正常还是不正常?另外看到说晶振跟两个小电容要离得很近,几乎都没剪引脚(就是买回来多长就多长)就插上去了,这个也有关系吗?

用万用表测量单片机连接晶振的两个引脚,正常起振的状态下电压大概比供电电压的1/2略低一些,如果其中一个或全部引脚为电源电压或零就表明没起振。那个引脚长些一般不会有什么影响,相比之下接地更关键些,两个谐振电容接地端到单片机的电源地要尽量近些。

二十二、22pf或30pf电容到底有什么作用?

刚学单片机的学长告诉我单片机的晶振电路中就是用22pf或30pf的电容就行,听人劝吃饱饭吧,照着焊电路一切ok,从没想过为什么,知其所以然而不知其为什么所以然,真是悲哀。后来,我才懂得反思,调整,我对自己持有怎么的学习态度和应该如何付诸于行动有了新的理解,这远比单纯的交给我一些知识要好很多。

让我们一起来看看到底晶振电路中为什么用22pf或30pf的电容而不用别的了。

其实单片机和其他一些IC的振荡电路的真名叫“三点式电容振荡电路”,如下图

“”

Y1是晶体,相当于三点式里面的电感,C1和C2就是电容,5404非门和R1实现一个NPN的三极管,接下来分析一下这个电路。

5404必需要一个电阻,不然它处于饱和截止区,而不是放大区,R1相当于三极管的偏置作用,让5404处于放大区域,那么5404就是一个反相器,这个就实现了NPN三极管的作用,NPN三极管在共发射极接法时也是一个反相器。

大家知道一个正弦振荡电路要振荡的条件是,系统放大倍数大于1,这个容易实现,相位满足360度,与晶振振荡频率相同的很小的振荡就被放大了。接下来主要讲解这个相位问题:

5404因为是反相器,也就是说实现了180°移相,那么就需要C1,C2和Y1实现180°移相就可以,恰好,当C1,C2,Y1形成谐振时,能够实现180移相,这个大家可以解方程等,把Y1当作一个电感来做。也可以用电容电感的特性,比如电容电压落后电流90°,电感电压超前电流90°来分析,都是可以的。当C1增大时,C2端的振幅增强,当C2降低时,振幅也增强。有些时候C1,C2不焊也能起振,这个不是说没有C1,C2,而是因为芯片引脚的分布电容引起的,因为本来这个C1,C2就不需要很大,所以这一点很重要。接下来分析这两个电容对振荡稳定性的影响。

因为5404的电压反馈是靠C2的,假设C2过大,反馈电压过低,这个也是不稳定,假设C2过小,反馈电压过高,储存能量过少,容易受外界干扰,也会辐射影响外界。C1的作用对C2恰好相反。因为我们布板的时候,假设双面板,比较厚的,那么分布电容的影响不是很大,假设在高密度多层板时,就需要考虑分布电容。

有些用于工控的项目,建议不要用无源晶振的方法来起振,而是直接接有源晶振。也是主要由于无源晶振需要起振的原因,而工控项目要求稳定性要好,所以会直接用有源晶振。在有频率越高的频率的晶振,稳定度不高,所以在速度要求不高的情况下会使用频率较低的晶振。

二十三、单片机晶振电路中两个微调电容不对称会怎样?相差多少会使频率怎样变化?我在检测无线鼠标的接受模块时,发现其频率总是慢慢变化(就是一直不松探头的手,发现频率慢慢变小)晶振是新的。

答:电容不对称也不会引起频率的漂移,你说的频率漂移可能是因为晶振的电容的容量很不稳定引起的,你可以换了试,换两电容不难,要不就是你的晶振的稳定性太差了,或者你测量的方法有问题。

二十四、晶振为何被要求紧挨着IC,单片机晶振不起振?

答:原因如下:

晶振是通过电激励来产生固定频率的机械振动,而振动又会产生电流反馈给电路,电路接到反馈 后进行信号放大,再次用放大的电信号来激励晶振机械振动,晶振再将振动产生的电流反馈给电路,如此这般。当电路中的激励电信号和晶振的标称频率相同时,电 路就能输出信号强大,频率稳定的正弦波。整形电路再将正弦波变成方波送到数字电路中供其使用。

问题在于晶振的输出能力有限,它仅仅输出以毫瓦为单位的电能量。在 IC(集成电路) 内部,通过放大器将这个信号放大几百倍甚至上千倍才能正常使用。

晶振和 IC 间一般是通过铜走线相连的,这根走线可以看成一段导线或数段导线,导线在切割磁力线的时候会产生电流,导线越长,产生的电流越强。

现实中,磁力线不常见,电磁波却到处都是,例如:无线广播发射、电视塔发射、手机通讯等等。晶振和IC之间的连线就变成了接收天线,它越长,接收的信号就 越强,产生的电能量就越强,直到接收到的电信号强度超过或接近晶振产生的信号强度时,IC内的放大电路输出的将不再是固定频率的方波了,而是乱七八糟的信 号,导致数字电路无法同步工作而出错。

所以,画PCB(电路板)的时候,晶振离它的放大电路(IC管脚)越近越好。

二十五、4个AT89C51单片机能否用一个12M的晶振使其都正常工作?一个采用内部时钟方式,其余三个用外部方式...那我四个都用内部方式可以不(将4个单片机都并联在一个晶振上)?

答:可以,其中一个正常接晶振,他的XTAL2输出接到另外三个的XTAL1输入上。

二十六、AT89C51单片机4兆的晶振能不能启动?

答:当然可以,看看datasheet吧,我估计1M的都可以,还有的单片机如2051可能还能低,台系日系有的可以到32.768kHz。

二十七、怎样判断单片机外部晶振有没有起振?我的STC89C52单片机本来是好好的后来不行了,我换了个晶振就好了。但是过了几个小时后又不行了,是怎么回事。还有就是怎样判断晶振是否起振?

答: 第一点:先换一块单片机试试,问题还在则排除单片机;

第二点:可能是虚焊造成的,这点要注意;

第三点:我用STC89C52也碰到过类似的问题,换了块晶振就OK了,好像STC起振不橡AT89S52那么顺。

其实对于STC89C52可以直接看30脚(ALE),接个灯,起振一下子就能看出来了。

二十八、我用msp430的单片机,可是外部的两个晶振总是无法起振,没用。请问是什么原因?线路连接是对的,32768HZ没有接外接电容。8M的晶振接56PF的电容。

答:32.768K的晶振接两个30P的电容试试,还有8M的晶振的电容也换成30P的。

二十九、MSP430单片机8MHz的晶振,计数器TAR增加一次 需要多少时间?

答:MSP430单片机的晶振频率可以自己设置的,是使用外部晶振还是内部振荡器做始终源,还有MCLK,SMCLK,ACLK的选择,分不分频等都有影响 我现在有点忘了,不过你可以看看文档,计数器是使用mclk,smclk,ACLK的哪一个,在判断是否分频设置,一般在1Mhz TAR加一次是1us,那么8M是1/8us自己算吧。

三十、如果MSP430单片机不初始化晶振,那么单片机用什么作为时钟?DCO的频率大概是多少呢?

答:内部DCO,不同系列的DCO默认频率不同,要参看手册。4系列的好像是1M。

三十一、dspic30f6014单片机能够烧写程序,却不能运行。晶振没有起振(换过了也没用),复位电压测量为5v,电源正常,(是成熟产品,只是偶尔会出现这种情况)

答:
01、重新检讨振荡电路所用零件(晶振与电容)及晶振附近的pcb布局
02、检查配置位是否正确
03、还可找 FAE 谘询

三十二、单片机测试晶振电压时会对工作状态有影响吗?

我的51单片机从P2口连了两个发光二极管,正常时是只有一个亮。我插上电源后,结果两个都亮了。于是我就测量晶振电压,但是我黑表笔接地,红表笔一碰晶振引脚时,两个发光二极管中,就有一个会熄灭,一放开就两个都亮。

每次刚插电源的时候,两个晶振引脚分别时1.9V,1.5v,但是稍微过了一会儿,两个引脚就分别成了5.4V和0.02V了。

答:会有一点影响,对频率会有影响,严重的会导致晶振停振。因为你万用表一加上去相当于在振荡电路上又并上或串上了分部电容电阻电感等,就影响到了原来电路的状态。

三十三、静态工作点对晶振振荡有什么影响?

答: 具有高Q值的晶振对放大器的选择并不敏感,但在过驱动时很容易产生频率漂移(甚至可能损坏)。影响振荡器工作的环境因素有:电磁干扰(EMI)、机械震动与冲击。

三十四、我用的是外置4M晶振加两个30pf瓷片电容,用示波器测频率正常,但峰峰值有的板子是6V左右,有的是3V左右,板子功能正常但我怕电压低的不稳定。

答: 没关系的,峰峰值不同是电容和晶振的参数离散导致的。只要正常工作就可以,单片机里面都有放大处理的,它们都是放大展成方波来使用的。峰峰值多高都没用。

你那电压高的倒应该看看,pic一般工作电压是5V,怎么振荡器会进来这么高电压?

我一般都是在CPU晶振输入端串联一个电阻使用的。

三十五、pic单片机 AD采样程序 有源晶振应该如何选择?

如果使用片内振荡器,是不是必须要外接谐振器?我如果外接有源晶振,选用那种频率较好?我听说4MHz的并不理想。外接20MHz的可以吗?这个是怎样选择的啊。

答:用片内振荡器不需要外接谐振器。

如果你的单片机只做AD采集转换,那就不需要太高的频率,内部4Mhz振荡器即可。

但如果还要做其他对时序要求较严的工作比如说总线通信,那就要考虑使用外部振荡器,因为内部振荡器的误差太大(即使校准了还有1%的误差) ,而用多大的晶振要看工作要求,频率越高单片机功耗越大。但只做AD的话,4M够了。

三十六、大家好。我想问个pic单片机的问题:晶振频率不一样。编译器自己带的库延时函数延时一样吗?比如晶振20MHZ delayus(1)和5MHZ delayus(1)是同是1us吗?

答: 应该一样。因为频率不一样,编译时候你的设置不一样,编译时候自然计算需要的倍数,参数就不一样了。但可能因为频率除不尽的缘故,有一点点差异。

三十七、单片机外接24M的晶振,1ms的基准延时函数用C语言怎么写?

答:
定时器T0 工作方式1 晶振频率24MHz
定时器最大定时时间(us):32768
定时器最小定时时间(us):0.5
【1ms精确定时C51代码】

void T0_init(void) //定时器初始化
{
TMOD |= 0x01;
TH0 = 0xf8; //设置定时器计数初值,定时1000us
TL0 = 0x33;
IE |= 0x82; //打开总中断
TR0 = 1; //启动定时器
}
void T0_intservice(void) interrupt 1 //定时器中断服务
{
TH0 = 0xf8; //重装载定时器计数初值
TL0 = 0x33;
//这里可以插入其他处理程序,不会影响定时器工作
}

三十八、单片机24M晶振可以测量20MHZ的信号吗?

答 :要看用什么单片机了。有些单片机执行一条指令需要两个机器周期以上的。那肯定测量不到20MHZ的信号。

三十九、用单片机的晶振电路产生信号和555计时器产生信号哪个更好?

答:一般来说,晶振的稳定性好于RC震荡器。

四十、11.0952的晶振和单片机哪些引脚连接能起作用?电源和18B20应该和单片机的哪些引脚相连呢?RT,要把单片机从实验板上引出来,应该怎么连接?1602LCD的液晶该怎么和单片机相连呢?每次从仿真上连出来都是只有背光和黑点,但是不显示已经烧录的程序。

答:晶振接单片机x1(或者叫XTAL1)和x2(或者叫XTAL2)引脚。

电源接单片机的VCC和GND。

18b20电源脚接电源上,中间的数据线可以单片机的任意io口。具体控制是靠程序完成的。

1602的数据线接单片机io(比如51单片机的P1口),其它的控制线rw,reset,cs等可以接单片机的任意io口。

烧录了程序不能运行,而程序是正确的话,你得看程序怎么定义这些引脚,根据程序定义连接单片机的位置。

四十一、89c52单片机如果不接晶振会有什么后果?

答:单片机不工作了 程序无法烧入等等。

四十二、单片机工作频率的问题,晶振到底怎么选择?

答:
1、最基本的单片机,其机器工作频率为:晶振频率÷12
2、有的单片机(高级一些的)机器工作频率为:晶振频率÷2(或者6等等)
3、以汇编语言为例,单片机执行一条指令需要的时间为1~2个机器周期(机器周期 = 1÷机器工作频率)

4、举例:

一普通单片机晶振12MHz,其机器工作频率为 12MHz÷12 = 1MHz

其机器周期 = 1÷1MHz = 0.000001秒(也就是10的负6次方)

“MOV”指令需要一个机器周期来完成,也就是说执行这条指令需要耗费10的负6次方秒,这么长的时间。

四十三、我给51单片机12M晶振接2200pF电容会怎么样?电路图里貌似是22pF的,但是我没有22pF的...接2200pF会不会不正常工作?

答:不可以,晶体会不工作的。15-33p是合理范围。你可以试试看,对单片机不会有损坏。

本文转载自:网络
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:
cathy@eetrend.com)。

围观 286

本文将和广大工程师分享相关单片机的常用术语与相关知识。

MCS-51系列单片机

MCS-51系列单片机分为两大系列,即51子系列与52子系列。

51子系列:基本型,根据片内ROM的配置,对应的芯片为8031、8051、8751、8951

52子系列:增强型,根据片内ROM的配置,对应的芯片为8032、8052、8752、8952

这两大系列单片机的主要硬件特性如下表:

“”

从上表中可以看到,8031、8031、8032、80C32片内是没有ROM的,对应着上表看,我们可以发现,51系列的单片机的RAM大小为128B,52系列的RAM大小为256B,51系列的计数器为两个16位的,52系列的计数器为三个16位计数器。51系列的中断源为5个,52系列的中断源为6个。

8051与80C51的区别:

80C51单片机是在8051的基础上发展起来的,也就是说在单片机的发展过程中是先有8051,然后才有80C51的。

8051单片机与80C51单片机从外形看是完全一样的,其指令系统、引脚信号、总线等完全一致(完全兼容),也就是说在8051下开发的软件完全可以在80C51上应用,反过来,在89C51下开发的软件也可以在8051上应用。这两种单片机是完全可移植的。

既然这两种单片机外形及内部结构都一样,那它们之间的主要差别在哪里呢?

8051与80C51单片机的主要差别就在于芯片的制造工艺上。80C51的制造工艺是在8051基础上进行了改进。

8051系列单片机采用的是HMOS工艺:高速度、高密度;

80C51系列单片机采用的是CHMOS工艺:高速度、高密度、低功耗;

也就是说80C51单片机是一种低功耗单片机。

单片机常用名词解释

总线: 指能为多个部件服务的信息传送线,在微机系统中各个部件通过总线相互通信。

地址总线(AB):地址总线是单向的,用于传送地址信息。地址总线的宽度为16位,因此基外部存储器直接寻址64K,16位地址总线由P0口经地址锁存器提供低8位地址(A0~A7),P2口直接提供高8位地址(A8~A15)。

数据总线(DB):一般为双向,用于CPU与存储器,CPU与外设、或外设与外设之间传送数据信息(包括实际意义的数据和指令码)。数据总线宽度为8位,由P0口提供。

控制总线(CB):是计算机系统中所有控制信号的总称,在控制总线中传送的是控制信息。由P3口的第二功能状态和4根独立的控制总线,RESET、EA、ALE、PSEN组成。

存储器:用来存放计算机中的所有信息:包括程序、原始数据、运算的中间结果及最终结果等。

只读存储器(ROM):只读存储器在使用时,只能读出而不能写入,断电后ROM中的信息不会丢失。因此一般用来存放一些固定程序,如监控程序、子程序、字库及数据表等。ROM按存储信息的方法又可分为以下几种:

1、掩膜ROM:

掩膜ROM也称固定ROM,它是由厂家编好程序写入ROM(称固化)供用户使用,用户不能更改内部程序,其特点是价格便宜。

2、可编程的只读存储器(PROM):

它的内容可由用户根据自已所编程序一次性写入,一旦写入,只能读出,而不能再进行更改,这类存储器现在也称为OTP(Only Time Programmable)。

3、可改写的只读存储器EPROM:

前两种ROM只能进行一次性写入,因而用户较少使用,目前较为流行的ROM芯片为EPROM。因为它的内容可以通过紫外线照射而彻底擦除,擦除后又可重新写入新的程序。

4、可电改写只读存储器(EEPROM):

EEPROM可用电的方法写入和清除其内容,其编程电压和清除电压均与微机CPU的5V工作电压相同,不需另加电压。它既有与RAM一样读写操作简便,又有数据不会因掉电而丢失的优点,因而使用极为方便。现在这种存储器的使用最为广泛。

5、随机存储器(RAM):

这种存储器又叫读写存储器。它不仅能读取存放在存储单元中的数据,还能随时写入新的数据,写入后原来的数据就丢失了。断电后RAM中的信息全部丢失。因些,RAM常用于存放经常要改变的程序或中间计算结果等信息。

RAM按照存储信息的方式,又可分为静态和动态两种。

①静态SRAM:其特点是只要有电源加于存储器,数据就能长期保存。

②动态DRAM:写入的信息只能保存若干ms时间,因此,每隔一定时间必须重新写入一次,以保持原来的信息不变。

6、可现场改写的非易失性存储器:

这种存储器的特点是:从原理上看,它们属于ROM型存储器,从功能上看,它们又可以随时改写信息,作用又相当于RAM。所以,ROM、RAM的定义和划分已逐渐的失去意义。

①快擦写存储器(FLASH)

这种存储器是在EPROM和EEPROM的制造基础上产生的一种非易失性存储器。其集成度高,制造成本低于DRAM,既具有SRAM读写的灵活性和较快的访问速度,又具有ROM在断电后可不丢失信息的特点,所以发展迅速。

②铁电存储器FRAM

它是利用铁电材料极化方向来存储数据的。它的特点是集成度高,读写速度快,成本低,读写周期短。

时钟周期:计算机在时钟信号的作用下,以节拍方式工作。因此必须有一个时钟发生电路,输入微处理器的时钟信号的周期称为时钟周期。

机器周期:机器完成一个动作所需的时间称为机器周期,一般由一个或一个以上的时钟周期组成。在我们讲述的MCS-51系列单片机中,一个机器周期由12个时钟周期组成。

指令周期:执行一条指令(如“MOV A,#34H”,该指令的含义是将立即数34H传送到微处理器内的累加器A中)所需时间称为指令周期,它由一个到数个机器周期组成。指令周期的长短取决于指令的类型,即指令将要进行的操作步聚及复杂程度。

汇编: 是能完成一定任务的机器指令的集合。

二进制数: 只有0和1两个数码,基数为二。

16进制数: 采用0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F等16个数码,其中A-F相应的十进数为10-15,基数是16。

指令: 是计算机所能执行的一种基本操作的描述,是计算机软件的基本单元。

字节:8位二进制数组成一个字节,在存储器中以字节为单位存储信息。

字:2个字节组成一个字。

双字:2个字组成一个双字。

补码:机器数可用不同的码制来表示,补码表示法是最常用的一种,正数采用符号-绝对值表示,即数的最高有效位为0,数的其余部分则表示数的绝对值;负数的表示要麻烦一些,先写出与该负数相对应的正数的补码表示,然后将其按位求反,最后在末位加1,就可以得到该负数的补码表示了。

段地址:8086CPU将1MB的存储器空间分成许多逻辑段,每个段最大限制为64KB,段地址就是逻辑段在主存中的起始位置。为了能用16位寄存器表示段地址,8086规定段地址必须是模16地址,即为xxxx0H形式,省略低4位0,段地址就可以用16位数据表示,它通常被保存在16位的段寄存器中。

偏移地址:存单元距离段起始位置的偏移量简称偏移地址,由于限定每段不超过64KB,所以偏移地址也可以用16位数据表示。

物理地址:在1M字节的存储器里,每一个存储单元都有一个唯一的20位地址,称为该存储单元的物理地址,把段地址左移4位再加上偏移地址就形成物理地址。

代码段:程序员在编制程序时要把存储器划分成段,代码段用来存放程序的指令序列,代码段的段地址存放在CS中,指令指针寄存器IP指示代码段中指令的偏移地址,处理器利用CS:IP取得下一条要执行的指令。

数据段:数据段存放当前运行程序所用的数据,数据段的段地址存放在DS中。

附加段:附加段是附加的数据段,也用于数据的保存,另外,串操作指令将附加段作为其目的操作数的存放区域。附加段的段地址存放在ES中。

堆栈段:堆栈段是堆栈所在的主存区域,堆栈段的段地址存放在SS中,堆栈指针寄存器SP指示堆栈栈顶的偏移地址,处理器利用SS:SP操作堆栈中的数据。

堆栈:堆栈是一个"后进先出"的主存区域,位于堆栈段中,使用SS段寄存器记录其段地址。它只有一个出入口,即当前栈顶,栈顶是地址较小的一端(低端),它用堆栈指针寄存器SP指定。堆栈有两种以字为单位的基本操作,对应两条基本指令:进栈指令PUSH和出栈指令POP。

伪指令:汇编语言程序的语句除指令外还包括伪指令和宏指令,伪指令又称为伪操作,它不象机器指令那样是在程序运行期间由计算机来执行的,它是在汇编程序对源程序汇编期间由汇编程序处理的操作,完成诸如数据定义、分配存储区、指示程序结束等功能。

宏指令:宏是源程序中一段有独立功能的程序代码,它只需要在源程序中定义一次,就可以多次调用,调用时只需要用一个宏指令语句就可以了。宏指令是用户自定义的指令,在编程时将多次使用的功能用一条宏指令来代替。

子程序:子程序又称为过程,它相当于高级语言中的过程和函数。在一个程序的不同部分,往往要用到类似的程序段,这些程序段的功能和结构形式都相同,只是某些变量的赋值不同,此时就可以把这些程序段写成子程序形式,以便需要时可以调用它;某些常用的特定功能的程序段也可编制成子程序的形式供用户使用。

中断:中断是一种使CPU中止正在执行的程序而转去处理特殊事件的操作,这些引起中断的事件称为中断源,它们可能是来自外设的输入输出请求,也可能是计算机的一些异常事故或其它内部原因。

中断处理程序:当中断发生时,处理器中止当前正在运行的程序,而转到处理特殊事件的程序段中去执行,这种处理中断的子程序就是中断处理程序,又称为中断服务程序。中断处理程序的入口地址被安排在中断向量表中。

BIOS中断:在存储器系统中,从地址0FE000H开始的8K ROM中装有BIOS(Basic Input/Output System)例行程序。驻留在ROM中的基本输入输出程序BIOS提供了系统加电自检、引导装入、主要I/O设备的处理程序以及接口控制等功能模块来处理所有的系统中断。BIOS中断给程序员编程带来很大方便,程序员不必了解硬件I/O接口的特性,可直接用指令设置参数,然后中断调用BIOS中的程序。

暂存器: 用来暂存由数据总线或通用寄存器送来的操作数,并把它作为另一个操作数。

中断: 中断是单片机实时地处理内部或外部事件的一种内部机制。当某种内部或外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理,中断处理完毕后,又返回被中断的程序处,继续执行下去。

掉电保护: 指在正常供电电源掉电时,迅速用备用直流电源供电,以保证在一段时间内信息不会丢失,当主电源恢复供电时,又自动切换为主电源供电。

寄存器寻址: 操作数在寄存器中,由指令操作码中的rrr三位的值和PSW中RS1及RS0的状态,选中某个工作寄存器区的某个寄存器,然后进行相应的指令操作。

波特率: 即每秒钟传送二进制数的位数, 波特率越高,数据传输的速度越快。

D/A转换: 即将二进制数量转换成与其量值成正比的电流信号或电压信号。

A/D转换: 即将模拟量转换成相应的数字量,然而送计算机处理。

串行方式: 指数据的各位分时传送,只需一条数据线,外加一条公共信号地线和若干条控制信号线。

并行方式: 指数据的各位同时传送,每一条数据都需要一条传输线。

伪指令: 用于告诉汇编程序如何进行汇编的指令,它既不控制机器的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行。

linking 连接: 把编译后生成的 *.obj 文件与其它 *.obj文件合并成机器能识别的机器文件。

I2C:输入与输出共用一条传输线,而时钟由另一条线控制的一种串行传输方式。

SFR 特殊功能寄存器区: 8051 把 CPU 中的专用寄存器、并行端口锁存器、串行口与定时器/计数器内的控制寄存器集中安排到一个区域,离散地分布在地址从 80H 到 FFH 范围内,这个区域称为特殊功能寄存器区 SFR。

常用逻辑电路

在逻辑电路中,输入和输出只有两种状态,即高电平和低电平。通常以逻辑“1”和“0”表示电平高低。

1、与门

是一个能够实现逻辑乘运算的、多端输入、单端输出的逻辑电路。

“”

逻辑解释:

即如右边图所示,当开关A与B当中只有全部闭合(即为高电平1)时,才会有输出(即灯泡才会亮)所以在与门电路中,只有输入的全部条件为高电平“1”时输会有输出。

语言表达为:“有0出0,全1出1”

2、或门

是一个能够实现逻辑加运算的、多端输入、单端输出的逻辑电路。

“”

逻辑解释:

即如右边图所示,当开关A与B当中只要有一个开关闭合(即为高电平1)时,就会有输出(即灯泡才会亮)所以在或门电路中,只要输入的为高电平“1”就会有输出。

语言表达为:“有1出1,全0出0”。

3、非门

是一个能够实现逻辑非运算的、单端输入、单端输出的逻辑电路。非就是反,就是否定,也就是输入与输出的状态总是相反。

“”

逻辑解释:

如右边图所示,当开关K断开时灯亮,开关闭合时灯灭。如以开关断开为灯亮,开关接通为灭为结果,则开关K与灯泡的因果关系为非逻辑关系。

语言表达为:“有0出1,有1出0”。

复合逻辑门电路

(1)与非门

将一个与门与一个非门联接起来就构成了一个与非门。

根据与门和非门的逻辑功能,可以列出与非门逻辑关系真值表。其逻辑功能的特点是:“当输入全为1,输出为0;只要输入有0,输出就为1”。

真值表如下:

(2)或非门

将一个或门与一个非门联接起来就构成了一个或非门。

根据或门和非门的逻辑功能,可以列出与非门逻辑关系真值表。其逻辑功能的特点是:“当输入全为0,输出为1;只要输入有1,输出就为0”。

真值表如下:

“”

(3)异或门

异或门只有两个输入端和一个输出端。

其逻辑功能的特点是:“当两个输入端一个为0,另一个为1时,当两个输入端均为1或均为0时,输出为0”。

真值表如下:

异或门的作用是:把两路信号进行比较,判断是否相同。当两路输入信号不同,即一个为高电平,一个为低电平时,输出为高电平。反之当两个输出端信号相同时,即为高电平或低电平时,输出为低电平”。

触发器

触发器是计算机记忆装置的基本单元,它具有把以前的输入‘记忆’下来的功能,一个触发器能储存一位二进制代码。下面我们简单的来介绍计算机中常用的几中触发器。

(1)R-S触发器

R-S触发器的逻辑符号如下图所示,它有两个输入端,两个输出端。其中,S为置位信号输入端,R为复位信号输入端;Q和Q非为输出端。规定Q为高、Q非为低时,该触发器为1状态;反之为0状态。其真值表如下。

“”

(2)D触发器

D触发器又称数据触发器,它的逻辑符号如下图所示,R、S分别为强制置0、置1端,触发器的状态是由时钟脉冲CLK上升沿到来时D端的状态决字。当D=1时,触发器为1状态;反之为0状态。其真值表如下

“”

(3)J-K触发器

J-K触发器的逻辑符号如下,R、S分别为强制置0、置1端。K为同步置0输入端,J为同步置1输入端。触发器的状态是由时钟脉冲CLK下降沿到来时J、K端的状态决定,其真值表如下

“”

J-K触发器的逻辑功能比较全面,因此在各种寄存器、计算器、逻辑控制等方面应用最为广泛。但在某些情况,如二进制计数、移位、累加等,多用D触发器。由于D触发器线路简章,所以大量应用于移位寄存器等方面。

寄存器

寄存器是由触发器组成的,一个触发器是一个一位寄存器。多个触发器就可以组成一个多位的寄存器。由于寄存器在计算机中的作用不同,从而被命名不同,常用的有缓冲寄存器、移位寄存器、计数器等。下面我们就简单的来介绍下这些寄存器的电路结构及工作原理。

(1)缓冲寄存器

它是用来暂存某个数据,以便在适当的时间节拍和给定的计算步骤将数据输入或输出到其它记忆单元中去,下图是一个并行输入、并行输出的4位缓冲器的电路原理图,它由4个D触发器组成。

“”

启动时,先在清零端加清零脉冲,把各触发器置0,即Q端为0。然后,把数据加到触发器的D输入端,在CLK时钟信号作用下,输入端的信息就保存在各触发器中(D0~D3)。

(2)移位寄存器

移位寄存器能将所储存的数据逐位向左或向右移动,以达到计算机运行过程中所需的功能,请看下图

“”

启动时,先在清零端加清零脉冲,使触发器输出置0。然后,第一个数据D0加到触发器1的串行输入端,在第一个CLK脉冲的上升沿Q0=Q0,Q1=Q2。Q3=Q0。其后,第二个数据D1加到串行输入端,在第二个CLK脉冲到达时,Q0=Q1,Q1=Q0,Q2=Q3=0。以此类推,当第四个CLK来到之后,各输出端分别是Q0=Q3,Q1=Q2,Q2=Q1,Q3=Q0。输出数据可用串行的形式取出,也可用并行开式取出。

(3)计数器

计数器也是由若干个触发器组成的寄存器,它的特点是能够把存款在其中的数据加1或减1。计数器的种类也很多,有行波计数器、同步计数器等,下面我们就以行波计数器向大家作个介绍。

下图就是一个由J-K触发器组成的行波计数器的工作原理图。这种计数器的特点是:第一个时钟脉冲促使其最低有效位加1,使其由0变1;第二个时钟脉冲促使最低有效位由1变0。同时推动第二位,使其由0变1;同理,第二位由1变0时又去推动第三位,使其由0变1,这样有如水波前进一样逐位进位下去。

“”

上图中各位的J、K输入端都是悬浮的,这相当于J、K输入端都是置1的状态,即各位都处于准备翻转的状态。只要时钟脉冲边沿一到,最右边的触发器就会翻转,即Q由0转为1或由1转为0。

上图中的这个计数器是4位的,因此可以计0~15的数。如果要计更多的数,需要增加位数,如8位计数器可计0~255的数,16位则可计0~65535的数。

(4)三态门(三态缓冲器)

为减少信息传输线的数目,大多数计算机中的信息传输线均采用总线形式,即凡要传输的同类信息都走同一组传输线,且信息是分时传送的。在计算机中一般有三组总线,即数据总线、地址总线和控制总线。为防止信息相互干扰,要求凡挂在总线上的寄存器或存储器等,它的传输端不仅能呈现0、1两个信息状态,而且还应能呈现第三种状态——高阻抗状态(又称高阻状态),即此时好像它们的输出被断开,对总线状态不起作用,此时总线可由其它器件占用。三态门即可实现上述的功能,它除具有输入输出端之外,还有一控制端,请看下图。

“”

当控制端E=1时,输出=输入,此时总线由该器件驱动,总线上的数据由输入数据决定;

当控制端E=0时,输出端呈高阻抗状态,该器件对总线不起作用。当寄存器输出端接至三态门,再由三态门输出端与总线连接起来,就构成三态输出的级冲寄存器。如下图所示就是一个4位的三态输出缓冲寄存器。由于这里采用的是单向三态门,所以数据只能从寄存器输出到数据总线。如果要实现双向传送,则要用双向三态门。

“”

本文转载自:网络
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:
cathy@eetrend.com)。

围观 59

首先,“嵌入式”这是个概念,准确的定义没有,各个书上都有各自的定义。但是主要思想是一样的,就是相比较PC机这种通用系统来说,嵌入式系统是个专用系统,结构精简,在硬件和软件上都只保留需要的部分,而将不需要的部分裁去。所以嵌入式系统一般都具有便携、低功耗、性能单一等特性。

然后,MCU、DSP、FPGA这些都属于嵌入式系统的范畴,是为了实现某一目的而使用的工具。

MCU俗称”单片机“经过这么多年的发展,早已不单单只有普林斯顿结构的51了,性能也已得到了很大的提升。因为MCU必须顺序执行程序,所以适于做控制,较多地应用于工业。而ARM本是一家专门设计MCU的公司,由于技术先进加上策略得当,这两年单片机市场份额占有率巨大。

ARM的单片机有很多种类,从低端M0(小家电)到高端A8、A9(手机、平板电脑)都很吃香,所以也不是ARM的单片机一定要上系统,关键看应用场合。

DSP叫做数字信号处理器,它的结构与MCU不同,加快了运算速度,突出了运算能力。可以把它看成一个超级快的MCU。低端的DSP,如C2000系列,主要是用在电机控制上,不过TI公司好像称其为DSC(数字信号控制器)一个介于MCU和DSP之间的东西。高端的DSP,如C5000/C6000系列,一般都是做视频图像处理和通信设备这些需要大量运算的地方。

FPGA叫做现场可编程逻辑阵列,本身没有什么功能,就像一张白纸,想要它有什么功能完全靠编程人员设计(它的所有过程都是硬件,包括VHDL和Verilog HDL程序设计也是硬件范畴,一般称之为编写“逻辑”。)。

如果你够NB,你可以把它变成MCU,也可以变成DSP。由于MCU和DSP的内部结构都是设计好的,所以只能通过软件编程来进行顺序处理,而FPGA则可以并行处理和顺序处理,所以比较而言速度最快。

那么为什么MCU、DSP和FPGA会同时存在呢?那是因为MCU、DSP的内部结构都是由IC设计人员精心设计的,在完成相同功能时功耗和价钱都比FPGA要低的多。而且FPGA的开发本身就比较复杂,完成相同功能耗费的人力财力也要多。

所以三者之间各有各的长处,各有各的用武之地。但是目前三者之间已经有融合的态势,ARM的M4系列里多加了一个精简的DSP核,TI的达芬奇系列本身就是ARM+DSP结构,ALTERA和XINLIX新推出的FPGA都包含了ARM的核在里面。所以三者之间的关系是越来越像三基色的三个圆了。

一言以蔽之“你中有我,我中有你”。

硬件工程师学习从何开始?

单片机:通常

dsp:用于复杂的计算,像离散余弦变换、快速傅里叶变换,常用于图像处理,在数码相机等设备中使用。

arm:一个英国的芯片设计公司,但是不生产芯片。只卖知识产权。

fpga:现场可编程门阵列,以硬件描述语言(Verilog 或 VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至 FPGA 上进行测试,是现代 IC 设计验证的技术主流。

嵌入式 是相对于台式电脑而言,系统可裁剪,形态各异,可能体积、功耗、成本受限、实时性要求高,如示波器,手机,平板电脑,全自动洗衣机,路由器、数码相机,这些设备中,虽然看不到台式机的存在,但是都有一个或多个嵌入式系统在工作。

根据对象体系的功能复杂性和计算处理复杂性,提供的不同选择。对于简单的家电控制嵌入式系统,采用简单的8位单片机就足够了,价廉物美,对于手机和游戏机等,就必须采用32位的ARM和DSP等芯片了。FPGA是一种更偏向硬件的实现方式。

所以要通过学习成为硬件工程师,要从单片机开始,然后学习ARM和DSP之类。

市面上七大主流单片机的详细介绍

单片机现在可谓是铺天盖地,种类繁多,让开发者们应接不暇,发展也是相当的迅速,从上世纪80年代,由当时的4位8位发展到现在的各种高速单片机。

各个厂商们也在速度、内存、功能上此起彼伏,参差不齐~~同时涌现出一大批拥有代表性单片机的厂商:Atmel、TI、ST、MicroChip、ARM…国内的宏晶STC单片机也是可圈可点…

下面为大家带来51、MSP430、TMS、STM32、PIC、AVR、STC单片机之间的优缺点比较及功能体现……

51单片机

“”

应用最广泛的8位单片机当然也是初学者们最容易上手学习的单片机,最早由Intel推出,由于其典型的结构和完善的总线专用寄存器的集中管理,众多的逻辑位操作功能及面向控制的丰富的指令系统,堪称为一代“经典”,为以后的其它单片机的发展奠定了基础。

51单片机之所以成为经典,成为易上手的单片机主要有以下特点:

特性:

  • 从内部的硬件到软件有一套完整的按位操作系统,称作位处理器,处理对象不是字或字节而是位。不但能对片内某些特殊功能寄存器的某位进行处理,如传送、置位、清零、测试等,还能进行位的逻辑运算,其功能十分完备,使用起来得心应手。
  • 同时在片内RAM区间还特别开辟了一个双重功能的地址区间,使用极为灵活,这一功能无疑给使用者提供了极大的方便,
  • 乘法和除法指令,这给编程也带来了便利。很多的八位单片机都不具备乘法功能,做乘法时还得编上一段子程序调用,十分不便

缺点:(虽然是经典但是缺点还是很明显的)

  • AD、EEPROM等功能需要靠扩展,增加了硬件和软件负担
  • 虽然I/O脚使用简单,但高电平时无输出能力,这也是51系列单片机的最大软肋
  • 运行速度过慢,特别是双数据指针,如能改进能给编程带来很大的便利
  • 51保护能力很差,很容易烧坏芯片

应用范围:

目前在教学场合和对性能要求不高的场合大量被采用。

使用最多的器件:8051、80C51。

MSP430单片机

“”

MSP430系列单片机是德州仪器1996年开始推向市场的一种16位超低功耗的混合信号处理器,给人们留下的最大的亮点是低功耗而且速度快,汇编语言用起来很灵活,寻址方式很多,指令很少,容易上手。

主要是由于其针对实际应用需求,把许多模拟电路、数字电路和微处理器集成在一个芯片上,以提供“单片”解决方案。其迅速发展和应用范围的不断扩大,主要取决于以下的特点…

特性:

  • 强大的处理能力,采用了精简指令集(RISC)结构,具有丰富的寻址方式( 7 种源操作数寻址、 4 种目的操作数寻址)、简洁的 27 条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可参加多种运算;还有高效的查表处理指令;有较高的处理速度,在 8MHz 晶体驱动下指令周期为 125 ns 。这些特点保证了可编制出高效率的源程序
  • 在运算速度方面,能在 8MHz 晶体的驱动下,实现 125ns 的指令周期。16 位的数据宽度、 125ns 的指令周期以及多功能的硬件乘法器(能实现乘加)相配合,能实现数字信号处理的某些算法(如 FFT 等)。
  • 超低功耗方面,MSP430 单片机之所以有超低的功耗,是因为其在降低芯片的电源电压及灵活而可控的运行时钟方面都有其独到之处。电源电压采用的是 1.8~3.6V 电压。因而可使其在 1MHz 的时钟条件下运行时, 芯片的电流会在 200~400uA 左右,时钟关断模式的最低功耗只有 0.1uA

缺点:

  • 个人感觉不容易上手,不适合初学者入门,资料也比较少,只能跑官网去找
  • 占的指令空间较大,因为是16位单片机,程序以字为单位,有的指令竟然占6个字节。虽然程序表面上简洁, 但与pic单片机比较空间占用很大

应用范围:

在低功耗及超低功耗的工业场合应用的比较多

使用最多的器件:MSP430F系列、MSP430G2系列、MSP430L09系列

TMS单片机

“”

这里也提一下TMS系列单片机,虽不算主流。由TI推出的8位CMOS单片机,具有多种存储模式、多种外围接口模式,适用于复杂的实时控制场合。虽然没STM32那么优秀,也没MSP430那么张扬,但是TMS370C系列单片机提供了通过整合先进的外围功能模块及各种芯片的内存配置,具有高性价比的实时系统控制。

同时采用高性能硅栅CMOS EPROM和EEPROM技术实现。低工作功耗CMOS技术,宽工作温度范围,噪声抑制,再加上高性能和丰富的片上外设功能,使TMS370C系列单片机在汽车电子,工业电机控制,电脑,通信和消费类具有一定的应用。

STM32单片机

“”

由ST厂商推出的STM32系列单片机,行业的朋友都知道,这是一款性价比超高的系列单片机,应该没有之一,功能及其强大。其基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M内核。

同时具有一流的外设:1μs的双12位ADC,4兆位/秒的UART,18兆位/秒的SPI等等,在功耗和集成度方面也有不俗的表现,当然和MSP430的功耗比起来是稍微逊色的一些,但这并不影响工程师们对它的热捧程度,由于其简单的结构和易用的工具再配合其强大的功能在行业中赫赫有名…

特性:

  • 内核:单周期乘法和硬件除法
  • 存储器:片上集成32-512KB的Flash存储器。6-64KB的SRAM存储器
  • 时钟、复位和电源管理:2.0-3.6V的电源供电和I/O接口的驱动电压。POR、PDR和可编程的电压探测器(PVD)。4-16MHz的晶振。内嵌出厂前调校的8MHz RC振荡电路。内部40 kHz的RC振荡电路。用于CPU时钟的PLL。带校准用于RTC的32kHz的晶振
  • 调试模式:串行调试(SWD)和JTAG接口。最多高达112个的快速I/O端口、最多多达11个定时器、最多多达13个通信接口
  • 使用最多的器件:STM32F103系列、STM32 L1系列、STM32W系列

PIC单片机

“”

PIC单片机系列是美国微芯公司(Microship)的产品,共分三个级别,即基本级、中级、高级,是当前市场份额增长最快的单片机之一,CPU采用RISC结构,分别有33、35、58条指令,属精简指令集。

同时采用Harvard双总线结构,运行速度快,它能使程序存储器的访问和数据存储器的访问并行处理。这种指令流水线结构,在一个周期内完成两部分工作,一是执行指令,二是从程序存储器取出下一条指令。这样总的看来每条指令只需一个周期,这也是高效率运行的原因之一,此外PIC单片机之所以成为一时非常热的单片机不外乎以下特点:

特点:

  • 具有低工作电压、低功耗、驱动能力强等特点。PIC系列单片机的I/O口是双向的,其输出电路为CMOS互补推挽输出电路。I/O脚增加了用于设置输入或输出状态的方向寄存器,从而解决了51系列I/O脚为高电平时同为输入和输出的状态。
  • 当置位1时为输入状态,且不管该脚呈高电平或低电平,对外均呈高阻状态;置位0时为输出状态,不管该脚为何种电平,均呈低阻状态,有相当的驱动能力,低电平吸入电流达25mA,高电平输出电流可达20mA。相对于51系列而言,这是一个很大的优点。
  • 它可以直接驱动数码管显示且外电路简单。它的A/D为10位,能满足精度要求。具有在线调试及编程(ISP)功能。

不足之处:

其专用寄存器(SFR)并不像51系列那样都集中在一个固定的地址区间内(80~FFH),而是分散在四个地址区间内。只有5个专用寄存器PCL、STATUS、FSR、PCLATH、INTCON在4个存储体内同时出现,但是在编程过程中,少不了要与专用寄存器打交道,得反复地选择对应的存储体,也即对状态寄存器STATUS的第6位(RP1)和第5位(RP0)置位或清零。

数据的传送和逻辑运算基本上都得通过工作寄存器W(相当于51系列的累加器A)来进行,而51系列的还可以通过寄存器相互之间直接传送,因而PIC单片机的瓶颈现象比51系列还要严重,这在编程中的朋友应该深有体会。

使用最多的器件:PIC16F873、PIC16F877

AVR单片机

“”

AVR单片机是Atmel公司推出的较为新颖的单片机,其显著的特点为高性能、高速度、低功耗。它取消机器周期,以时钟周期为指令周期,实行流水作业。

AVR单片机指令以字为单位,且大部分指令都为单周期指令。而单周期既可执行本指令功能,同时完成下一条指令的读取。通常时钟频率用4~8MHz,故最短指令执行时间为250~125ns。

特点:

  • AVR系列没有类似累加器A的结构,它主要是通过R16~R31寄存器来实现A的功能。在AVR中,没有像51系列的数据指针DPTR,而是由X(由R26、R27组成)、Y(由R28、R29组成)、Z(由R30、R31组成)三个16位的寄存器来完成数据指针的功能(相当于有三组DPTR)。
  • 而且还能作后增量或先减量等的运行,而在51系列中,所有的逻辑运算都必须在A中进行;而AVR却可以在任两个寄存器之间进行,省去了在A中的来回折腾,这些都比51系列出色些

  • AVR的专用寄存器集中在00~3F地址区间,无需像PIC那样得先进行选存储体的过程,使用起来比PIC方便。AVR的片内RAM的地址区间为0~00DF(AT90S2313) 和0060~025F(AT90S8515、AT90S8535),它们占用的是数据空间的地址,这些片内RAM仅仅是用来存储数据的,通常不具备通用寄存器的功能。
  • 当程序复杂时,通用寄存器R0~R31就显得不够用;而51系列的通用寄存器多达128个(为AVR的4倍),编程时就不会有这种感觉。

  • AVR的I/O脚类似PIC,它也有用来控制输入或输出的方向寄存器,在输出状态下,高电平输出的电流在10mA左右,低电平吸入电流20mA。这点虽不如PIC,但比51系列还是要优秀的…

缺点:

  • 没有位操作,都是以字节形式来控制和判断相关寄存器位。
  • C语言与51的C语言在写法上存在很大的差异,这让从开始学习51单片机的朋友很不习惯。
  • 通用寄存器一共32个(R0~R31),前16个寄存器(R0~R15)都不能直接与立即数打交道,因而通用性有所下降。而在51系列中,它所有的通用寄存器(地址00~7FH)均可以直接与立即数打交道,显然要优于前者。

使用最多的器件:ATUC64L3U、ATxmega64A1U、AT90S8515

STC单片机

“”

说到STC单片机有人会说到,STC也能算主流,估计要被喷了~~我们基于它是国内还算是比较不错的单片机来说。

STC单片机是宏晶生产的单时钟/机器周期的单片机,说白了STC单片机是51与AVR的结合体,有人说AVR是51的替代单片机,但是AVR单片机在位控制和C语言写法上存在很大的差异。而STC单片机恰恰结合了51和AVR的优点,虽然功能不及AVR那么强大,但是在AVR能找到的功能,在STC上基本都有,同时STC单片机是51内核,这给以51单片机为基础的工程师们提供了极大的方便,省去了学习AVR的时间,同时也不失AVR的各种功能…

STC单片机是高速、低功耗、超强抗干扰的新一代8051单片机51单片机,指令代码完全兼容传统8051,但速度快8~12倍,内部集成MAX810专用复位电路。4路PWM 、8路高速10位A、D转换,针对电机电机 的供应商控制,强干扰场合,成为继51单片机后一个全新系列单片机…

特性:

  • 下载烧录程序用串口方便好用,容易上手,拥有大量的学习资料及视频,最著名的要属于杜老师的那个视频了,好多对单片机有兴趣的朋友都是通过这个视频入门的,同时具有宽电压:5.5~3.8V,2.4~3.8V, 低功耗设计:空闲模式,掉电模式(可由外部中断唤醒)
  • STC单片机具有在应用编程,调试起来比较方便;带有10位AD、内部EEPROM、可在1T/机器周期下工作,速度是传统51单片机的8~12倍,价格也较便宜
  • STC12C2052AD系列为2通道,也可用来再实现4个定时器或4个外部中断,2个硬件16位定时器,兼容普通8051的定时器。4路PCA还可再实现4个定时器,具有硬件看门狗、高速SPI通信端口、全双工异步串口,兼容普通8051的串口,同时还具有先进的指令集结构,兼容普通8051指令集。

PS:STC单片机功能虽不及AVR、STM32强大,价格也不及51和ST32便宜,但是这些并并不重要,重要的是这属于国产单片机比较出色的单片机,但愿国产单片机能一路长虹…

使用最多的器件:STC12C2052AD

Freescale单片机

“”

主要针对S08,S12这类单片机,当然Freescale单片机远非于此。Freescale系列单片机采用哈佛结构和流水线指令结构,在许多领域内都表现出低成本,高性能的的特点,它的体系结构为产品的开发节省了大量时间。此外Freescale提供了多种集成模块和总线接口,可以在不同的系统中更灵活的发挥作用!Freescale单片机的特有的特点如下:

  • 全系列:从低端到高端,从8位到32位全系列应有尽有,其推出的8位/32位管脚兼容的QE128,可以从8位直接移植到32位,弥补单片机业界8/32 位兼容架构中缺失的一环
  • 多种系统时钟模块:三种模块,七种工作模式。多种时钟源输入选项,不同的mcu具有不同的时钟产生机制,可以是RC振荡器,外部时钟或晶振,也可以是内部时钟,多数CPU同时具有上述三种模块!可以运行在FEI,FEE,FBI,FBILP,FBE,FBELP,STOP这七种工作模式
  • 多种通讯模块接口:Freescale单片机几乎在内部集成各种通信接口模块:包括串行通信接口模块SCI,多主I2C总线模块,串行外围接口模块 SPI,MSCAN08控制器模块,通用串行总线模块(USB/PS2)
  • 具有更多的可选模块:具有LCD驱动模块,带有温度传感器,具有超高频发送模块,含有同步处理器模块,含有同步处理器的MCU还具有屏幕显示模块OSD,还有少数的MCU具有响铃检测模块RING和双音多频/音调发生器DMG模块
  • 可靠性高,抗干扰性强,多种引脚数和封装选择
  • 低功耗、也许Freescale系列的单片机的功耗没有MSP430的低,但是他具有全静态的“等待”和“停止”两种模式,从总体上降低您的功耗!新近推出的几款超低功耗已经与MSP430的不相上下!

使用最多的器件:MC9S12G系列

如果真要在这些单片机中分个一二三等,那么如果你想跟随大众,无可厚非51单片机还是首选;如果你追求超高性价比,STM32将是你理想选择;如果你渴望超低功耗,MSP430肯定不会让你失望;如果你想支持国产,STC会让你兴奋…

本文转载自:电子发烧友
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:
cathy@eetrend.com)。

围观 178

单片机是可编程器件,开发者把程序写好、编译完之后,需要烧录到单片机中,单片机才能按照开发者的逻辑去执行。在这个烧录的过程中需要用到专用的烧录工具。比如51单片机的USB/TTL、STM单片机的STlink等。使用过单片机开发板的同学都清楚,程序编写完了后,在调试的过程中可能会烧录很多次程序,尽管照这样,单片机还是能一直烧录,那么单片机的烧写次数是不是无限的呢?

单片机烧写程序的次数是一定的,不是无限次,这取决于单片机的程序存储器ROM。有的单片机只能烧写一次,有的可以烧写1k次,还有的可以烧写100k次,不同的ROM类型了导致了烧写次数的不同。

固定不可烧写的掩膜ROM

这类单片机在出厂的时候,单片机厂家根据用户提供的程序文件一次性写入,即客户收到的就是烧写好程序的单片机,用户无法修改。这种一般是低成本的解决方案,而且需求数量非常大。

只能烧写一次的PROM

这种PROM类型的单片机只能烧写一次,其存贮器内部默认全0或者全1,用户只能烧写一次,烧写完毕后,保险丝熔断。这种方案价格也非常便宜,适合大量出货,国内很多单片机厂商提供这种单片机。

紫外线可擦除的EPROM

EPROM采用的是浮栅技术,用户如果需要修改程序,需要用紫外线擦除,这类单片机一般会有一个窗口用于接受紫外线的照射,照射的过程大概20-30分钟作用,用起来不方便,这种单片机在市场上很少看到了。

可多次烧录的EEPROM和Flash型ROM

这两种类型的ROM都可以很多次擦除,其中flash型的烧录次数可以多达100万,完全满足了人们的使用,目前市面上出货的单片机多数是这种。相对而言,Flash型的烧写速度更快,容量更大,烧录次数更多。

本文转载自:网络
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:
cathy@eetrend.com)。

围观 223

作为一名电子技术从业人员,你学过单片机吗?你会运用单片机吗?我想你一定学过,但不一定会运用。

因为学习单片机比学习其他学科需要付出更多的努力和代价,不仅要学习理论知识还要练习实际操作,而且主要是在实际操作中才能真正学到单片机技术。

因主修专业的不同以及电子基础的深浅不同,对于不同的人可能采用不同的学习方法,根据笔者的亲身学习经验,提出笔者的学习方法和步骤。

Part 1、基础理论知识学习

基础理论知识包括模拟电路、数字电路和C语言知识,模拟电路和数字电路属于抽象学科,要把它学好还得费点精神。

在你学习单片机之前,觉得模拟电路和数字电路基础不好的话,不要急着学习单片机,应该先回顾所学过的模拟电路和数字电路知识,为学习单片机加强基础。

否则,你的单片机学习之路不仅会很艰难和漫长,还可能半途而废。笔者始终认为,扎实的电子技术基础是学好单片机的关键,直接影响单片机学习入门的快慢。

单片机属于数字电路,其概念、术语、硬件结构和原理都源自数字电路,如果数字电路基础扎实,对复杂的单片机硬件结构和原理就能容易理解,就能轻松地迈开学习的第一步,自信心也会树立起来。

一般是先学习模拟电路再去学习数字电路。扎实的模拟电路基础不仅让你容易看懂别人设计的电路,而且让你的设计的电路更可靠,提高产品质量。

C语言知识并不难,没有任何编程基础的人都可以学,在我看来,初中生、高中生、中专生、大学生都能学会,当然,数学基础好、逻辑思维好的人学起来相对轻松一些。

当基础打好以后,你会感觉到单片机不再难学了,而且越学越起劲。

当单片机乖乖的依照你的逻辑思维和算法去执行指令,实现预期控制效果的时候,成就感会让你信心十足、夜以继日、废寝忘食的投入到单片机的世界里。

可以这么说,扎实的电子技术基础和C语言基础能增强学习单片机信心,较快掌握单片机技术。

Part 2、单片机实践

1.有刻苦学习的决心

首先,明确学习目的,先认真回答两个问题:我学单片机来做什么?需要多长时间把它学会?这是你学单片机的动力,没有动力,我想你坚持不了多久。

其次,端正学习心态,单片机学习过程是枯燥乏味、孤独寂寞的过程,要知道,学习知识没有捷径,只有循序渐进,脚踏实地,一步一个脚印,才能学到真功夫。

再次,要多动脑勤动手,单片机的学习具有很强的实践性,是一门很注重实际动手操作的技术学科,不动手实践你是学不会单片机的。

最后,虚心交流,在单片机学习过程中每个人都会遇到无数不能解决的问题,需要你向有经验的过来人虚心求教,否则,一味的自己埋头摸索会走许多弯路,浪费很多时间。

2.有一套完整的学习开发工具

学习单片机是需要成本的,必须有一台电脑、一块单片机开发板(如果开发板不能直接下载程序代码的话还得需要一个编程器)、一套视频教程、一本单片机教材和一本C语言教材。

电脑是用来编写和编译程序,并将程序代码下载到单片机上;开发板用来运行单片机程序,验证实际效果;视频教程就是手把手教你单片机开发环境的使用、单片机编程和调试。

对于单片机初学者来说,视频教程必须要看,尤其是院校里的单片机教材,学了之后,面对真正的单片机时可能还是束手无策;单片机教材和C语言教材是理论学习资料,备忘备查。

不要为了节约成本不用开发板而光用Protur软件仿真调试,这和纸上谈兵没什么区别。

3. 要注重理论和实践相结合

单片机C语言编程理论知识并不深奥,光看书不动手也能明白,但在实际编程的时候就没那么简单了,一个程序的形成不仅需要有C语言知识,更多需要融入你个人的编程思路和算法。

编程思路和算法决定一个程序的优劣,是单片机编程的大问题,只有在实际动手编写的时候才会有深切的感悟,一个程序能否按照你的意愿正常运行就要看你的思路和算法是否正确、合理。

如果程序不正常则要反复调试(检查、修改思路和算法),直到成功,这个过程耗时、费脑、疲精神,意志不坚强者往往被绊倒在这里半途而废。

学习编写程序应该按照以下过程学习,效果会更好,看到例程题目先试着构思自己的编程思路,然后再看教材或视频教程里的代码,研究人家的编程思路,注意与自己思路的差异。

接下来就照搬人家的思路亲自动手编写这个程序,领会其中每一条语句的作用;对有疑问的地方试着按照自己的思路修改程序,比较程序运行效果,领会其中的奥妙。

每一个例程都坚持按照这个过程学习,你很快会找到编程的感觉,取其精华去其糟粕,久而久之会形成你独特的编程思想。

当然,刚开始,看别人的程序源代码就像看天书一样,只要硬着头皮看,看到不懂的关键字和语句就翻书查阅、对照,只要能坚持下来,学习收获会事半功倍。

在实践过程中不仅要学会别人的例程,还要在别人的程序上改进和拓展,让程序产生更强大的功能。

同时,还要懂得通过查阅芯片数据手册里有关芯片命令和数据的读写时序来核对别人例程的可靠性,如果你觉得例程不可靠就把它修改过来,成为是你自己的程序。

Part 3、单片机硬件设计

当编写自己的程序信手拈来、阅读别人的程序能够发现问题的时候,说明你的单片机编程水平相当不错了。

接下来就应该研究的硬件了,硬件设计包括电路原理设计和PCB板设计,学习做硬件要比学习做软件麻烦,成本更高,周期更长。

但是,学习单片机的最终目的是做产品开发----软件和硬件相结合形成完整的控制系统,所以,做硬件也是学习单片机技术的一个必学内容。

电路原理设计涉及到各种芯片的应用,而这些芯片外围电路的设计、典型应用电路和与单片机的连接等在芯片数据手册都能找到答案,前提是要看得懂全英文的数据手册。

否则,照搬别人的设计永远落在别人的后面,你做的产品就没有创意,电子技术领域的第一手资料都是英文,从第一手资料里你所获得的知识可能是在教科书、网络文档和课外读物等所没有的知识。

虽然有些资料也都是在DATASHEET的基础上撰写的,但内容不全面,甚至存在翻译上的遗漏和错误。
当然,阅读DATASHEET需要具备一定的英文阅读能力,这也是阻碍单片机学习者晋级的绊脚石,良好的英文阅读能力能让你在单片机技术知识的海洋里自由遨游。

做PCB板就比较简单了,只要懂得使用Protel软件或 AltimDesigner软件就没问题了。但要想做的板子布局美观、布线合理还得费一番功夫了。

娴熟的单片机C语言编程、会使用Protel软件或 AltimDesigner软件设计PCB板和具备一定的英文阅读能力,你就是一个遇强则强的单片机高手了。

本文转载自:网络
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:
cathy@eetrend.com)。

围观 45

单片机主要作用是控制外围的器件,并实现一定的通信和数据处理。但在某些特定场合,不可避免地要用到数学运算,尽管单片机并不擅长实现算法和进行复杂的运算。

下面主要是介绍如何用单片机实现数字滤波。

在单片机进行数据采集时,会遇到数据的随机误差,随机误差是由随机干扰引起的,其特点是在相同条件下测量同一量时,其大小和符号会现无规则的变化而无法预测,但多次测量的结果符合统计规律。
为克服随机干扰引起的误差,硬件上可采用滤波技术,软件上可采用软件算法实现数字滤波。滤波算法往往是系统测控算法的一个重要组成部分,实时性很强。

1、采用数字滤波算法克服随机干扰的误差具有以下优点:

数字滤波无需其他的硬件成本,只用一个计算过程,可靠性高,不存在阻抗匹配问题。尤其是数字滤波可以对频率很低的信号进行滤波,这是模拟滤波器做不到的。

数字滤波使用软件算法实现,多输入通道可共用一个滤波程序,降低系统开支。

只要适当改变滤波器的滤波程序或运算,就能方便地改变其滤波特性,这对于滤除低频干扰和随机信号会有较大的效果。

在单片机系统中常用的滤波算法有限幅滤波法、中值滤波法、算术平均滤波法、加权平均滤波法、滑动平均滤波等。

2、限幅滤波算法

该运算的过程中将两次相邻的采样相减,求出其增量,然后将增量的绝对值,与两次采样允许的最大差值A进行比较。

A的大小由被测对象的具体情况而定,如果小于或等于允许的最大差值,则本次采样有效;否则取上次采样值作为本次数据的样本。

算法的程序代码如下:

1#define A //允许的最大差值
 2
 3char data; //上一次的数据
 4
 5char filter()
 6
 7{
 8
 9    char datanew; //新数据变量
10
11    datanew=get_data(); //获得新数据变量
12
13    if((datanew-data)>A||(data-datanew>A))
14
15        return data;
16
17    else
18
19        return datanew;
20
21}

说明:

限幅滤波法主要用于处理变化较为缓慢的数据,如温度、物体的位置等。使用时,关键要选取合适的门限制A。通常这可由经验数据获得,必要时可通过实验得到。

3、中值滤波算法

该运算的过程是对某一参数连续采样N次(N一般为奇数),然后把N次采样的值按从小到大排列,再取中间值作为本次采样值,整个过程实际上是一个序列排序的过程。

算法的程序代码如下:

 1#define N 11 //定义获得的数据个数
 2 
3char filter()
4
5{
6 
7    char value_buff[N]; //定义存储数据的数组 
8 
9    char count,i,j,temp;
10
11    for(count=0;count<N;count++)
12
13    {
14
15        value_buf[count]=get_data();
16
17        delay(); //如果采集数据比较慢,那么就需要延时或中断
18
19    }
20
21    for(j=0;j<N;j++)
22
23    {
24
25        if(value_buff[i]>value_buff[i+1])
26
27        {
28
29            temp=value_buff[i];
30
31            value_buff[i]=value_buff[i+1];
32
33            value_buff[i+1]=temp;
34
35        }
36
37    }
38
39return value_buff[(N-1)/2];
40
41}

说明:中值滤波比较适用于去掉由偶然因素引起的波动和采样器不稳定而引起的脉动干扰。若被测量值变化比较慢,采用中值滤波法效果会比较好,但如果数据变化比较快,则不宜采用此方法。

4、算术平均滤波算法

该算法的基本原理很简单,就是连续取N次采样值后进行算术平均。

算法的程序代码如下:

 1char filter()
 2
 3{
 4
 5    int sum=0;
 6
 7    for(count=0;count<N;count++)
 8
 9    {
10
11        sum+=get_data();
12
13        delay():
14
15    }
16
17    return (char)(sum/N);
18
19}

说明:算术平均滤波算法适用于对具有随机干扰的信号进行滤波。这种信号的特点是有一个平均值,信号在某一数值附近上下波动。

信号的平均平滑程度完全到决于N值。当N较大时,平滑度高,灵敏度低;当N较小时,平滑度低,但灵敏度高。为了方便求平均值,N一般取4、8、16、32之类的2的整数幂,以便在程序中用移位操作来代替除法。

4、加权平均滤波算法

由于前面所说的“算术平均滤波算法”存在平滑度和灵敏度之间的矛盾。为了协调平滑度和灵敏度之间的关系,可采用加权平均滤波。

它的原理是对连续N次采样值分别乘上不同的加权系数之后再求累加,加权系数一般先小后大,以突出后面若干采样的效果,加强系统对参数变化趋势的认识。

各个加权系数均小于1的小数,且满足总和等于1的结束条件。这样加权运算之后的累加和即为有效采样值。其中加权平均数字滤波的数学模型是:

式中:D为N个采样值的加权平均值:XN-i为第N-i次采样值;N为采样次数;Ci为加权系数。加权系数Ci体现了各种采样值在平均值中所占的比例。

一般来说采样次数越靠后,取的比例越大,这样可增加新采样在平均值中所占的比重。

加权平均值滤波法可突出一部分信号抵制另一部分信号,以提高采样值变化的灵敏度。

样例程序代码如下:

1char codejq[N]={1,2,3,4,5,6,7,8,9,10,11,12}; //code数组为加权系数表,存在程序存储区
 2
 3char codesum_jq=1+2+3+4+5+6+7+8+9+10+11+12;
 4
 5char filter()
 6
 7{
 8
 9    char count;
10
11    char value_buff[N];
12
13    int sum=0;
14
15    for(count=0;count<N;count++)
16
17    {
18
19        value_buff[count]=get_data();
20
21        delay();
22
23    }
24
25    for(count=0;count<N;count++)
26
27        sum+=value_buff[count]*jq[count];
28
29    return (char)(sum/sum_jq);
30
31}

6、滑动平均滤波算法

以上介绍和各种平均滤波算法有一个共同点,即每获取一个有效采样值必须连续进行若干次采样,当采速度慢时,系统的实时得不到保证。

这里介绍的滑动平均滤波算法只采样一次,将一次采样值和过去的若干次采样值一起求平均,得到的有效采样值即可投入使用。

如果取N个采样值求平均,存储区中必须开辟N个数据的暂存区。

每新采集一个数据便存入暂存区中,同时去掉一个最老数据,保存这N个数据始终是最新更新的数据。采用环型队列结构可以方便地实现这种数据存放方式。

程序代码如下:

1char value_buff[N];
 2
 3char i=0;
 4
 5char filter()
 6
 7{
 8
 9    char count;
10
11    int sum=0;
12
13    value_buff[i++]=get_data();
14
15    if(i==N)
16
17        i=0;
18
19    for(count=0;count<N;count++)
20
21        sum=value_buff[count];
22
23    return (char)(sum/N);
24
25}

7、低通滤波

将普通硬件RC低通滤波器的微分方程用差分方程来表求,变可以采用软件算法来模拟硬件滤波的功能,经推导,低通滤波算法如下:

1Yn=a* Xn+(1-a) *Yn-1
2
3式中 Xn——本次采样值
4
5Yn-1——上次的滤波输出值;
6
7a——滤波系数,其值通常远小于1;
8
9Yn——本次滤波的输出值。

由上式可以看出,本次滤波的输出值主要取决于上次滤波的输出值(注意不是上次的采样值,这和加权平均滤波是有本质区别的),本次采样值对滤波输出的贡献是比较小的,但多少有些修正作用,这种算法便模拟了具体有教大惯性的低通滤波器功能。滤波算法的截止频率可用以下式计算:

1fL=a/2Pit pi为圆周率3.14…
2
3式中 a——滤波系数;
4
5t——采样间隔时间;
6
7例如:当t=0.5s(即每秒2次),a=1/32时;
8
9fL=(1/32)/(2*3.14*0.5)=0.01Hz

当目标参数为变化很慢的物理量时,这是很有效的。另外一方面,它不能滤除高于1/2采样频率的干搅信号,本例中采样频率为2Hz,故对1Hz以上的干搅信号应采用其他方式滤除,低通滤波算法程序于加权平均滤波相似,但加权系数只有两个:a和1-a。为计算方便,a取一整数,1-a用256-a,来代替,计算结果舍去最低字节即可,因为只有两项,a和1-a,均以立即数的形式编入程序中,不另外设表格。

虽然采样值为单元字节(8位A/D)。为保证运算精度,滤波输出值用双字节表示,其中一个字节整数,一字节小数,否则有可能因为每次舍去尾数而使输出不会变化。

设Yn-1存放在30H(整数)和31H(小数)两单元中,Yn存放在32H(整数)和33H(小数)中。

本文转载自:技术让梦想更伟大(整理:李肖遥)
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:
cathy@eetrend.com)。

围观 38

01、设计满足要求的最精简的系统

正确估计单片机的能力,知道单片机能做什么,最大程度的挖掘单片机的潜力对一个单片机系统设计者来说是至关重要的。我们应该有这样一个认识,即单片机的处理能力是非常强大的。

“”

早期的PC机,其CPU(8086)处理能力和8051相当,却能处理相当复杂的任务。单片机的能力的关键就在软件设计者编写的软件上。只有充分地了解到单片机的能力,才不会做出“冗余”的系统设计。而采用许多的外围芯片来实现单片机能实现的功能。这样做,即增加了系统成本,也可能会降低了系统的可靠性。

02、使用看门狗

看门狗电路通常是一块在有规律的时间间隔中进行更新的硬件。更新一般由单片机来完成,如果在一定间隔内没能更新看门狗,那看门狗将产生复位信号,重新复位单片机。更新看门狗的具体形式多是给看门狗芯片相关引脚提供一个电平上升沿或读写它的某个寄存器。使用看门狗电路将在单片机发生故障进行死机状态时,重新复位单片机。

当前有多种看门狗的芯片,如MAXIM 公司的MAX802,MAX813等。而且,有好多种单片机中本身就集成有看门狗。一个外部的看门狗是最好的,因为它不依赖于单片机。如果可能的话,看门狗更新程序不应该放在中断或是子程序中,原则上应该放在主程序中。

我曾经见过一个工程师,他所调试的程序在运行时偶而会引起看门狗的复位动作,于是他干脆在每10ms就中断一次的时钟中断程序中清看门狗。我相信他也知道使看门狗失去作用,可他却没有不是去查明引起这个现象的真正原因。因此,我想提醒大家:不论什么理由,绝对不要忽略系统故障的真正原因。高质量的产品来自于高素质的工程师,高质量的产品造就高素质的工程师。

03、确定系统的复位信号可靠

这是一个很容易忽略的问题。当你在设计单片机系统时,你脑中有这个概念吗?什么样的复位信号才是可靠的吗?你用示波器查看过你设计的产品的复位信号吗?不稳定的复位信号可能会产生什么样的后果?你有没有发现过你所设计的单片机系统,每次重新上电启动后,数据变得乱七八糟,并且每一次现象并不相同,找不出规律,或者有时候干脆不运行,或者有时候进入一种死机状态,有时候又一点事都没有正常运行?在这种情况下,你应该查一下你的系统的复位信号。

一般在单片机的数据手册(Datasheet)中都会提到该单片机需要的复位信号的要求。一般复位信号的宽度应为。复位电平的宽度和幅度都应满足芯片的要求,并且要求保持稳定。还有特别重要的一点就是复位电平应与电源上电在同一时刻发生,即芯片一上电,复位信号就已产生。不然,由于没有经过复位,单片机中的寄存器的值为随机值,上电时就会按PC寄存器中的随机内容开始运行程序,这样很容易进行误操作或进入死机状态。

04、确定系统的初始化有效

系统程序开始应延时一段时间。这是很多单片机程序设计中的常用方法,为什么呢?因为系统中的芯片以及器件从上电开始到正常工作的状态往往有一段时间,程序开始时延时一段时间,是让系统中所有器件到达正常工作状态。究竟延时多少才算合适?这取决于系统的各芯片中到达正常工作状态的时间,通常以最慢的为准。

一般来说,延时20-100毫秒已经足够。对于系统中使用嵌入式MODEM等“慢热”型的器件来说,则应更长。当然,这都需要在系统实际运行中进行调整。

05、上电时对系统进行检测

上电时对系统中进行检测是单片机程序中的一个良好设计。在硬件设计时也应该细细考虑将各个使用到的芯片、接口设计成容易使用软件进行测试的模式。很多有经验的单片机设计者都会在系统上电时(特别是第一次上电时)进行全面的检测,或者更进一步,将系统的运行状态中分为测试模式和正常运行模式,通过加入测试模式对系统进行详细的检测,使得系统的批量检测更为方便容易。另外要注意的是,一个简单明了的故障显示界面也是颇要费得心思的。

比如:系统的外部RAM(数据存储器)是单片机系统中常用的器件。外部RAM如果存在问题,程序通常都会成为一匹脱缰的野马。因此,程序在启动时(至少在第一次上电启动时)一定要对外部RAM进行检测。

检测内容包括:

1)检测RAM 中的单元。这主要通过写入和读出的数据保持一致。

2)检测单片机与RAM 之间的地址数据总线。总线即没有互相短路,也没有连接到“地”上。

另外,很多芯片,都提供了测试的方法。如串行通信芯片UART,都带环路测试的功能。

06、按EMC测试要求设计硬件

EMC 测试要求已经成为产品的必需。

07、尽可能使用Small 模式编译

对比起Large模式和Compact 模式,Small 模式能生成更为紧凑的代码。在Small 模式下,C51 编译器将没有使用关键词,如idata、pdata、xdata特殊声明的变量通通放在data单元中。在编程中,对于在的数据区,可以指定放在外部存储器中。

本文转载自:网络
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:
cathy@eetrend.com)。

围观 30

一、振荡器停止振荡

又可以分为电源电压不稳,或者强干扰引起的振荡器停振。

二、PC指针跑飞

电源电压不稳或强干扰引起PC跑飞,如果看门狗不好,也会引起死机。

三、设计上对长引出线的IO没有保护,静电打在IO口上引起单片机死锁,破坏了硬件逻辑功能,导致死机。

四、复位收到干扰,引起反复复位,在反复复位当中有可能会导致死机。

综上所述:

设计电路时,应该注意:

1.电源稳定
2.IO保护
3.振荡器PCB布线要注意
4.复位电路设计和PCB布线
5.电源,信号线干扰路径的保护,加滤波TVS等
6.高速信号输出远离信号输入端,如SPI总线,I2C总线布线要远离ADC,复位,时钟等布线处,以及其他模拟前端。

一家之言,欢迎纠正

电源电压的地不稳定造成电源电压瞬间负电压导致单片机故障程序不发运行。

我的理解:

1、"跑飞"是因为程序隐患或外部干扰引起的误动作,致使PC被写入"出界"数据,跑到了RAM区,或者跑到了FLASH的空白区。如果PC指向了RAM区,哪情况就不好说了!因为程序译码器可能得到任意译码结果。如果PC指向了FLASH空白区,则可以事先将所有FLASH空白区填入某个你想要的数据,迫使程序译码器在这里翻译出你想要的指令,从而进行相应的处理。在IAR Workbench中好象有在空白区填充数据的设置。

2、"死机"是指PC进入了"死循环",或者是MCLK等于近似为零的值。此时,要想救活MCU,非外狗不可。

*程序运行过程中,如果MCU电源出现问题(电源供电问题,或其它外部电路引起的电源扰动),比较容易出现"跑飞"现象。程序跑飞应该是PC出错;软件和硬件都可能出这样的问题。

死机应该是CPU根本没有运行,多是硬件方面的问题造成的,比如POR复位不成功,430比较容易出现掉电不完全后重新上电。

有了看门狗就不会死机?

死机是指CPU的程序指针进入一个死循环,无法执行正常的程序流程。其外在表现常常是:正常功能丧失,按键无响应,显示凝固。单片机死机后,只有复全才能走出死循环,执行正常的程序流程。众所属知,克服死机的最有效手段是加看门狗(WatchDog)。

目前用得最广泛的看门狗实际上是一个特殊的定时器DogTimer。DogTimer按固定速率计时,计满预定时间就发出溢出脉冲使单片机复位。如果每次在DogTimer溢出前强行让DogTimer清零,就不会发出溢出脉冲。清零脉冲由CPU发出,在单片机程序中每隔一段语句放一个清DogTimer的语句--FeedDog语句,以保证程序正常运行时DogTimer不会溢出。一旦程序进入一个不含FeedDog语句的死循环,DogTimer将溢出,导致单片机复位,跳出这个死循环。本文称这种看门狗为典型看门狗,典型看门狗已被集成比,如MAX706、MAX791等[1];还有许多单片机本身集成了这种看门狗,如PIC16C57、MC68HC705等。

有一个错误观点:加了看门狗,单片机就不会死机。实际上,看门狗有时间会完全失效。当程序进入某个死循环,而这个死循环中又包含FeedDog语句,这时DogTimer始终不会溢出,单片机始终得不到复位信号,程序也就始终跳不出这个死循环。针对这一弊端,笔者设计了双对限看门狗和定时复位看门狗。

双时限看门狗有两个定时器;一个为短定时器,一个为长定时器。短定时器定时为T1,长定时器定时为T2,0

这样,当程序进入某个死循环,如果这个死循环包含短定时器FeedDog语句而不包含长定时器FeedDog语句,那么长定时顺终将溢出,使单片机复位。巧妙安排长定时器FeedDog语句的位置,可保证出现死机的概率根低。在水轮发电机组微机控制装置中的对比应用证明了这一点。

目前几乎所有的看门狗都是依赖于CPU(依赖于CPU FeedDog)。这可以比作:一个保险设备能否起到保险作用还依赖于被它保护的对象的行为。显然,依赖于CPU的看门狗是不能保证单片机在分之百不死机的。

在绝对不允许死机的装置中,笔者设计了一种完全不依赖于CPU的看门狗--定时复位看门狗。定时复位看门狗的主体也是一个定时器,到预定时间就发出溢出脉冲,此溢出脉冲使单片机强行复位。定时复位看门狗不需要CPU FeedDog。

简言之,定时复位看门狗就是定时地让单片机强行复位。这样,即使装置死机,其最大死机时间也不会大于定时器定时时间。显然,只要硬件完好,这种看门狗百分之百地保证了单片机不会长时间死机。在智能电表(包括IC卡电能表、复费率电能表、多功能电能表)中采用了定时复位看门狗,每1秒让CPU强行复位,迄今数十万电表运行了近五年,无一例死机报告。

本文转载自:网络
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:
cathy@eetrend.com)。

围观 83

页面

订阅 RSS - 单片机