arduino和单片机的区别问题

做单片机千万不能忽略的一个问题
说一个我获得的教训,老板的一个朋友委托我们给他做一个小型的控制器,要求的工期比较急,没时间做线路板了,所以我们根据他说的要求选了一个我们以前的成型产品做基础,在这个基础上改。
这个东西的工作过程很简单,只需要把传感器传上来的数据分别送两块数字表显示,然后根据传感器传上来的数据确定两个出口固态继电器的动作。这里面用到了3个按键,3个指示灯,2个出口固态继电器和485通讯。我们用了ATMEG8做控制芯片,用内部8M&RC振荡器做时钟,内部看门狗,程序用C语言写的,我的C语言水平比较差上学的时候没学过,刚用单片机的时候全是用的汇编,今年才边学边用C语言做产品。
刚做好程序的时候我都试过了,接上传感器和数字表可以正常的显示数据,并能根据按键执行规定的动作,我认为没问题了就交了差。
同事拿着我做的控制器去操作箱上安装配线,后来调试的时候同事告诉我说装置死机了...
我说不能啊,我已经配置了看门狗,正常程序出错是可以复位的。把同事拿回来的装置通电测试果然没有反应了,重新烧写片子还能正常工作。
是不是静电搞的鬼?
因为我们的装置原来是没有按键的,这次的按键是在操作箱上接3个按钮到装置的CPU管脚上,没有保护措施,现在冬天空气干燥,很容易产生静电。
给3个按钮都加上了光耦隔离,改好了再装到控制箱上测试,没一会的功夫同事又回来了,说又死机了。啊!?这是怎么回事呢?
我有点傻了,难道是我的程序有问题?査吧,把程序从头到尾看了几个来回也没看出毛病。
把死机的片子擦了,重新烧程序还是能正常工作,这就怪了!难道是操作箱有问题?怎么在我这好好的东西上到操作箱上就死机呢?
同事干脆把操作箱从车间运到我的办公室来,让我自己做实验。果然刚烧好的片子上到操作箱上一会功夫就死机了,经过反复的实验发现是和数字表通讯之后死的,更进一步的确认是跟数字表通讯以后修改了控制器的EEPROM以后死的。去掉了控制器的写EEPROM程序就不再死机了,难道是GCC的EEPROM库有问题?先不管,看能正常运行了再说,反正这个功能不重要。重新烧写芯片,装到控制箱上,手动操作没问题!装置开始自动运行,呀!怎么复位了?是没看清吗?
再等一会....又复位了!一波未平一波又起,怎么回事?
这么个小东西程序不超过2K怎么这么多问题?我不至于这么烂吧?这么个小程序都写不好?还得试找出问题!反复试了几十次发现规律了,只要是自动状态的1号状态再和数字表一通讯就复位,是不是485通讯没加隔离的问题?动手加隔离(这里要说一下我们的软硬件是两个人负责的,我做软件,另一个同事专做硬件),我的同事刚才加了按键的隔离这回又加485的隔离,为了增加隔离电源又在原装置的基础上改了电源。改完了装上测试,还复位!天啊!我同事都不用好眼色看我了!
妈呀,我可怎么办啊?
从程序上怎么也看不出问题,可恶的M8不支持仿真又看不到C语言程序具体是怎么执行的。没办法只好用汇编写程序吧,这个我熟而且每一步都可控制,肯定不会再出错了,一个白天加一个晚上把程序就写出来了,第二天调试通过,上到操作箱上,天啊!又复位了!
不对!一定是硬件有问题,同事说没关系我给你换CPU板,同事又改了一块CPU板给我送来,装上一试,你们猜怎么样?还是不行!别扔白菜,我真完了&/_\&,呜呜...我心里直哭。
突然我转念一想,不对就不能还是硬件有问题?
这回我不吱声了,我另找了一套没改过的硬件,是原来测试用的肯定是好的,我用它试试。
嘿嘿!这回没事了,先别着急,我把改过的主板换到这个上面再试,还是没问题。把我那个做硬件的同事揪过来,你看看外面是不是下雪了!说明什么?我冤啊!快赶上窦娥了!她六月下雪,我11月下雪呀!同事二话没说,拿过继电器板对比,发现好的板两个固态继电器输入电阻一样,不好的输入电阻差了几十欧,总是复位的那个电阻小,是不是阻抗太低单片机输出能力不够引起的啊?给固态继电器输入端串上200欧电阻,这个行了。能正常工作了。运行一会看看吧。
过了大约半个小时,啊!又复位了!
这回我没紧张,肯定是硬件问题,因为我的程序C语言版和汇编版都试过。拿来示波器看看是不是复位脚有干扰啊?没有。看看电源呢?啊?CPU的5V电源在复位的时候是个大低谷,持续大约50毫秒...
元凶终于找到了!
是这个电源质量不好,当有继电器动作,并且来通讯,电源就挺不住了。同事也没话说了,改造电源吧,给电源变压器增加容量后,再也不复位了。终于圆满结束了。
围着电源的一个小问题,我转了一大圈,把这个教训分享出来提醒大家注意。
原文标题:做单片机的朋友,忽视这个问题你就懵圈了
文章出处:【微信号:mcu168,微信公众号:玩转单片机】欢迎添加关注!文章转载请注明出处。
发布评论请先
为防止企业营运中断,通过信息整合,加强工厂自动化与环境安全监测,如导入厂务监控系统,针对各种工业设施....
物联网想要走得远,要看传感器的发展程度。不管是从机器间的信息协作、测量、分析到控制,都要靠传感器来搜....
由于感应装置长期暴漏在外,容易受到环境的影响,当感应装置因受潮或者被雨水侵袭,感应装置线路盒出现故障....
镇江镓芯光电科技公司作为一家高科技企业,依托南京大学,研发和生产基于新型宽禁带半导体材料的高性能紫外....
既然不能在传感器上做提升,手机厂商就开始在镜头数量上做文章,于是就出现了一个镜头负责背景虚化一颗镜头....
尽管由于移动部门的利润缩水,多家指纹识别传感器专业公司在2017年面临巨大的市场压力,但整个指纹识别....
比亚迪全新QVGA产品BF3A02CS于4月份正式上市,该款图像传感器是目前国内最小1/15英寸8万....
而根据工信部此前公布的参数以及官方宣传海报透露的信息来看,OPPO Find X将会配备6.4英寸A....
关于移动电源容量,我们一定会发现充电宝标称的容量根本无法给手机充电如此电量,拿10000mAh的移动....
2016年,德国弗劳恩霍夫研究所的研究人员与大众汽车集团研究公司,博世和伟世通合作开发了一款智能汽车....
PI(Power Integrity),即电源完整性,以前隶属于信号完整性分析专题,但是因为PI足够....
ADI公司同Gouillart一道为新英格兰地区的番茄区块链建立了一个试点生态系统。团队负责人已经招....
数字地(DG)是系统中数字电路零电位的公共基准地线。由于数字电路工作在脉冲状态,特别是脉冲的前后沿较....
骑行记录仪通过结合加速度计和高度计的梯度数据,以及气压计的空气密度数据,该设备甚至能够准确预估骑行者....
高规格组分包括5.8英寸的4K HDR显示屏,尺寸比之前的4K HDR显示屏大11%,且亮度提升30....
据英国广播公司(BBC)报道,经济学家近来找到一种新方法——通过卫星获取的夜间灯光图来衡量区域经济发....
科学家开发了一款紧凑型、高灵敏度纳米光子传感器系统,无需使用传统的光谱学技术便能识别分子的特征吸收。
自动驾驶技术涉及的环境感知传感器主要包括视觉类摄像机(包括单目、双目立体视觉、全景视觉及红外相机)和....
系统的逻辑框架如下图,定位标签通过无线脉冲向定位基站发送信号,定位基站架设在需要提供定位服务的区域,....
随着私家车的普及,越来越多的人们选择以车代步,从而使得交通变的更加拥堵不堪,人在车内时间逐渐增长,而....
买一块健康手表并监测身体参数,并不意味着您生活得更健康。关键在于通过较长时间监测某些身体参数来熟悉这....
透过生物启发方式撷取影像中的“事件”(event)听起来不仅酷炫,而且未来感十足。但有多少开发人员真....
在莫斯科的这个街区,人们必须要靠近其他车辆行驶。有时,路过的汽车与我们擦肩而过的距离不超过15厘米或....
它使用Sigrity提取工具从物理layout中提取PCB/封装模型,再将模型分配到各个模块以连接每....
前面我们了解了几种主要的测距/距离传感器的原理及特点,其中,激光测距传感器因其抗干扰能力强,精度高的....
随着物联网技术的飞速发展,物联网逐渐影响着我们生活的方方面面,让生活更加便捷和智能化。无人机在物联网....
全球领先的高性能传感器解决方案供应商艾迈斯半导体(ams AG,瑞士股票交易所股票代码:AMS)宣布....
在有关电子系统的要求以外,井下应用还存在机械上的限制,可能决定着电子组件的尺寸,也可能会影响组件的封....
目前,Velodyne公司已经开发出了相对便宜的LiDAR传感器版本HDL-32E和HDL-16E。....
而传感器作为信息产业发展的核心支柱之一,同样也是工业互联网发展的基础和关键,国产传感器的发展时刻影响....
视觉传感器是一种机器视觉系统,经过专门设计,用于在非结构化环境中执行简单的存在/缺失检测,并提供通过....
1775 IMU(惯性测量单元)是KVH性能最高的光纤陀螺惯性测量单元,理想地适用于各种恶劣环境,外....
为PCB(印刷电路板)上的芯片提供电能不再是一种简单的工作。过去,通过细走线将IC连接到电源和地就行....
EPFL(瑞士联邦理工学院)工程学院(瑞士洛桑)和Australian National Unive....
通过为沉浸式用户体验、全新的信息娱乐、远程信息处理和远程操作等用例提供数千兆的速度,5G 网络通信将....
电导率是用来表示物质导电性能的物理量,是电阻率的倒数。对于溶液而言,其电导率的高低反映的是溶液导通电....
面对蓬勃的自动化投资需求,特别是对光电传感器、接近传感器等工控设备的需求猛增,欧姆龙投资10亿日元,....
镇江镓芯光电科技公司作为一家高科技企业,依托南京大学,研发和生产基于新型宽禁带半导体材料的高性能紫外....
走向自动驾驶的路,有很多条,既可以造无人车,也可以生产毫米波雷达、激光雷达等传感器配件,但来自于武汉....
开关电源是一种比较新型的电源。它具有效率高,重量轻,可升、降压,输出功率大等优点。但是由于电路工作在....
德州仪器马达集成驱动产品线经理倪川先生同样看好中国的小型电机控制市场的未来几年的前景,着重介绍了该公....
此视频将讨论新的解决方案,高与低电压的控制器的直流电压测量。老式设计中使用的电阻分压器,衰减高的输入....
集成了传感器、微机电系统和网络三大技术而形成的传感器网络是一种全新的信息获取和处理技术,具有广阔的应....
本文的的主要内容介绍的是汽车控制系统的基本介绍,包括传感器输入,控制器及执行器详细资料概述
HD3SS2521 控制器可通过统一互连线缆支持 DisplayPort:trademark:、US....
随着互联网与各行业的跨界,智能制造技术迅猛发展,其与家电领域的相互融合,也成为了家电产业发展的新突破....
大华极光球机采用双sensor架构,利用其自主研发的全自动AIR图像配准技术及MSIF图像融合技术,....
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司
电信与信息服务业务经营许可证:粤B2-豆丁微信公众号
君,已阅读到文档的结尾了呢~~
电源问题导致单片机死机的原因分析与改进,单片机死机,单片机死机的原因,单片机电源模块,单片机电源电路,单片机电源电路原理,单片机电源电路设计,单片机电源,单片机电源模块设计,单片机电源模块电路图
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
电源问题导致单片机死机的原因分析与改进
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口单片机调试常见问题解决
#18:6.error: #18: expected a ")"如果是出现在c文件中, 多半是因为少了一个")",或者错误行有编译器不识别的字符如果出现在头文件中,错误行又是一个函数声明,多半是因为在函数声明中有编译器不认识的字符error: #20error: #20: identifier "TIM2_IRQChannel" is undefined 谁能说说,哪里错了你的固件库里的库文件没有添加进工程里面,所以出现未定义的情况。TIM2_IRQChannel指定时器2的中断通道没有定义,其实在固件库对这些参数都有定义,宏定义代替了一串寄存器地址数据。需要将.C文件添加到工程文件中warning:
#1-D main.c(7): warning:
#1-D: last line of file ends without a newline当使用keil编译时,弹出这样的警告信息:main.c(7): warning:
#1-D: last line of file ends without a newline 这个是由于在main函数的“}”后,没有加回车。只要在main函数的“}”后加回车键,此警告信息即可消除。error:#65...test_menu.c(27):error:#65:expected a ";"分数送你了,问题在你回答之前已经解决了,头文件里的结构体定义里的最后一行没有加";" 如 NB menu{..};Error: L6200EError: L6200E: Symbol temp multiply defined (by wenshidu.o and main.o).在编译的时候出现了这个问题,但是检查不出来,希望各位大侠帮帮忙什么变量你给付了两次值你看看是不是那个外部变量你又给赋值了main.c申明,其他.c文件对应的.h文件中用extern引用warning:
#223-D..\..\source\CCxx00_New.C(718): warning:
#223-D: function "_NOP_" declared implicitly在使用的文件中添加extern void _NOP_();既可warning:
#1295-D..\..\include\CCxx00_New.h(20): warning:
#1295-D: Deprecated declaration CC_XCal - give arg types没有用形参 定时时用void CC_XCal(void);即可Error: L6218E: Undefined symbol.\Obj\output.axf: Error: L6218E: Undefined symbol FSMC_NORSRAMCmd (referred from tft_lcd.o)..\Obj\output.axf: Error: L6218E: Undefined symbol FSMC_NORSRAMInit (referred from tft_lcd.o).Target not created请教高人,我该处理。你看看tft_lcd里面有没有添加fsmcXXX.h之类的头文件,这个错误是说你使用的函数没有被定义。一般只要添加相应的头文件即可error: #101:error: #101: has already been declared in the current scope将#ifndef __STM32F10x_LIB_H#define __STM32F10x_LIB_H#endif调整到最后!file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps_clip_image-20349.png error: #247: function "DelayUs" has already been defined有一个同名的 DelayUs类已经被定义过了error:
#109: expression must have (pointer-to-) function type这个问题就是那19个error中的大部分,意思是表达式需要一个(指针)函数参数,我一开始以为是自己函数声明或者调用上的错误,但是看了下发现并没有错,后来查了好久发现原来是犯了一个很低级的错误:将宏定义和函数名重名了。因为我一开始想的是每一个宏定义对应一个函数名,这样做起来就比较清晰,但是我却很傻逼地将函数名每次直接复制到宏名,导致了这种蛋碎的结果。warning:
#61-Dwarning:
#68-D:在KeilARM的LPCARM,存在(1&&31)编译警告问题main.c(174): warning:
#61-D: integer operation result is out of rangemain.c(174): warning:
#68-D: integer conversion resulted in a change of sign由于编译器默认signed int即32位有符号整数类型,而1&&31实际为0x,这样就有可能改写了符号位(最高位)依此类推,(2&&30),(3&&29)...等都会出现编译警告问题.解决办法为: ((unsigned int)1&&31),((unsigned int)2&&30),...warning:
#1295-D: warning:
#1295-D: Deprecated declaration ShowSendTime - give arg types解决方法:将void ShowSendTime()改为void ShowSendTime(void)warning:
#550-D:warning:
#550-D: variable "d" was set but never used描述:变量'd'定义但从未使用,或者是,虽然这个变量你使用了,但编译器认为变量d所在的语句没有意义,编译器把它优化了.解决:仔细衡量所定义的变量d是否有用,若是认定变量d所在语句有意义,那么尝试用volatile关键字修饰变量d,若是真的没有用,那么删除掉以释放可能的内存.error:
#159:.error:
#159: declaration is incompatible with previous "wr_lcd" (declared at line 40)void a(void) //函数a的实体{
b(); //调用函数b}void b(void) //函数b的实体{
...}这样如果点编译,就会产生error:
#159的错误,因为当函数a调用函数b时,发现在这之前都没有函数b的任何声明.解决方法:在函数a调用函数b之前,对函数b进行声明,如:void b(void); //对函数b进行声明void a(void) //函数a的实体{
b(); //调用函数b}void b(void) //函数b的实体{
...}error:
#70:error:
#70: incomplete type is not allowed原来是重复定义了,包含了两次的psock的定义,所以才会出现这种情况。因为我发现psock和pt是一样定义的,但是pt是不报错的,所以我就试图删除头文件中include头文件的那一行,错误消除了,谢谢你了,还是实践出真知啊,有些时候不能死编,要思考,哈哈。warning: #550-D:1.warning: #550-D: variable "d" was set but never used描述:变量'd'定义但从未使用,或者是,虽然这个变量你使用了,但编译器认为变量d所在的语句没有意义,编译器把它优化了.解决:仔细衡量所定义的变量d是否有用,若是认定变量d所在语句有意义,那么尝试用volatile关键字修饰变量d,若是真的没有用,那么删除掉以释放可能的内存.warning: #1-D:2.warning: #1-D: last line of file ends without a newline描述:文件最后一行不是新的一行.编译器要求文件的最后一行必须是空行,想了半天没想通为什么要这样.解决:可以不理会.若是觉得出现警告不爽,那么在出现警告的文件的最后一行敲个回车,空出一行.warning: #111-D:3. warning: #111-D: statement is unreachable描述:声明不可能到达.多出现在这种场合:int main(void){...while(1) //无限循环,这在不使用操作系统的程序中最常见{...}return 0; //这句声明在正常情况下不可能执行到,编译器发出警告}解决:不理会.warning: C3017W:4. warning: C3017W: data may be used before being set描述:变量'data'在使用前没有明确的赋值.如:uint8 i, //定义变量i和data,二者都没有明确赋值for ( i = 0; i & 8; i++) //变量'i'在语句中被赋值0{if ( IO1PIN & SO_CC2420 )data |= 0x01; //变量'data'在使用前没有明确赋值,编译器发出警告elsedata &= ~0x01;}解决:应仔细衡量该变量的初始值是否为0,若是,可以不理会这个警告,因为MDK编译器在程序执行前,会将使用到的数据区初始化为0,但若是该变量的初始值不应该是0,忽略这个警告可能会引起致命错误.这个警告应引起足够重视.应养成变量赋初值的习惯,好在有编译器给把关.warning: #177-D:5. warning: #177-D: variable "temp" was declared but never referenced描述:变量'temp'进行了声明但没有引用.多出现在声明了一个变量,但却没有使用它,它和warning: #550-D: variable "temp" was set but never used不同之处在于temp从没有使用过.解决:若是定义的变量确实没有用,删除掉;若是有用,则在程序中使用.与该警告类似的还有 warning: #177-D: function "MACProcessBeacon" was declared but never referencedwarning: #940-D:6. warning: #940-D: missing return statement at end of non-void function "DealwithInspect2"描述:返回非空的函数"DealwithInspect2"的最后缺少返回值声明.如:int DealwithInspect2(uint32 test){.........//此处应该是返回一个int型数据,若是没有返回值,编译器产生警告}.warning: #1295-D:7..warning: #1295-D: Deprecated declaration lcd_init - give arg types描述:在定义函数的时候,如果你写上函数参数,就会有这个警告,比如void timer_init(); 这里就没有形参,如果这样的话,编译器会给出警告.error: #65:1. error: #65: expected a ";"描述:缺少分号.大多是漏忘';'.解决:双击错误行,在定位到错误点的附近找到没加';'号的语句,加上分号.并不一定在定位到的错误行才却分号,可能是这行的上一行,也可能是下一行.error: #65: error: #202. error: #65: expected a ";"和 error: #20: identifier "xxxx" is undefined一块出现,而且后面的error: #20错误可能一大堆描述:这个错误对于第一次遇上的人来说绝对是个噩梦,当错误出现,满怀希望的双击错误提示,来到错误行时却愕然发现,错误行绝对没有错,于是找找错误行的上一行,下一行,没有错误,再找上上行,下下行...让人无比郁闷的事情出现了:编译提示的所有错误行都不可能有错误出现.其实这最可能是你在.h文件声明外部变量或者函数时,没有在声明语句的最后加分号!如果你有很多模块,如main.c,lcd.c,key.c...有很多头文件,如lcd.h,key.h,若是在lcd.h文件声明函数时没有加分号,那么这种错误可能定为到main.c中,所以要检查所有头文件.解决:仔细检查.h文件,将分号补上.Error: L6200E:3. Error: L6200E: Symbol flagu multiply defined (by uart0.o and main.o).描述:变量(也是一种符号)flagu多处定义(在uart0.c中和main.c都定义了).通常错在全局变量定义重复.比如:在main.c中定义全局变量flagu:uint8 flagu=0;在uart0.c中也用到该变量,于是声明此变量,我通常都是先复制定义的变量再在变量前面加关键字extern修饰:extern uint8 flagu=0;然后编译,就会出现上面的连接错误,原因在于,我在uart0.c中是又定义了一个变量,而不是声明变量,因为我给变量赋了初值"flagu=0",这样就重复定义了变量flag.正确的声明方法是去掉赋值部分:extern uint8解决办法:找到重复定义的变量,看情况修改一处.error: #159:4.error: #159: declaration is incompatible with previous "wr_lcd" (declared at line 40)描述:在wr_lcd函数还没有声明之前就已经使用了.多出现在两种情况:第一种,wr_lcd函数体还没有写,就已经用到了它,这种情况多出现在写一个程序的大体结构中,只是简单写一下框架.第二种情况比较常见,函数a调用函数b,但函数b的函数体在函数a的下面:void a(void) //函数a的实体{b(); //调用函数b}void b(void) //函数b的实体{...}这样如果点编译,就会产生error: #159的错误,因为当函数a调用函数b时,发现在这之前都没有函数b的任何声明.解决方法:在函数a调用函数b之前,对函数b进行声明,如:void b(void); //对函数b进行声明void a(void) //函数a的实体{b(); //调用函数b}void b(void) //函数b的实体{...}error: #137:5. error: #137: expression must be a modifiable lvalue描述:表达式必须是一个可以修改的左值.主要出现在这种现象:a=NUM;NUM是一个数值或表达式,a为一个变量,但a被定义为像const这种不可更改的类型,导致NUM不能赋值给变量a.解决方法:要么放弃赋值,要么修改变量属性.error: #1113: 折腾了大半天,才搞明白一个空操作的指令先在网上查有的说是__asm{NOP;},从intrins.h里调用,可犄角旮旯全找了,也没看到什么intrint.h的文件。如果直接用,就出现error: #1113: Inline assembler not permitted when generating
Thumb code 最后搜索这条错误,知道是因为__asm("指令");这种语法是内联汇编(inline assembly)的语法。而RMDK下,内联汇编仅支持ARM汇编语言,不支持Thumb或者Thumb-2汇编语言;但内嵌汇编器支持Thumb和Thumb-2。 __asm放到一个单独的子函数再被调用就没问题了如下:__asm void nop(void){
NOP}然后在之后的C代码中调用该函数:void main(){...nop();... }
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!关于单片机的N多问题
10:26:33&&&来源:eefocus &&
1. & & &C语言和汇编语言在开发单片机时各有哪些优缺点?
& & 答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。
& & &C语言是一种结构化的高级语言。其优点是可读性好,移植容易,是普遍使用的一种计算机语言。缺点是占用资源较多,执行效率没有汇编高。
& & &对于目前普遍使用的RISC架构的8bit MCU来说,其内部ROM、RAM、STACK等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。而且一些单片机厂家也不一定能提供C编译器。而汇编语言,一条指令就对应一个机器码,每一步执行什幺动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在单片机开发中,我们还是建议采用汇编语言比较好。
& & 如果对单片机C语言有兴趣,HOLTEK的单片机就有提供C编译器,可以到HOLTEK的网站(www.holtek.com.cn)免费下载使用。
2. & & &C或汇编语言可以用于单片机,C++能吗?
答:在单片机开发中,主要是汇编和C,没有用C++的。
3. & & &搞单片机开发,一定要会C吗?
& &答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。
& & 对于目前普遍使用的RISC架构的8bit MCU来说,其内部ROM、RAM、STACK等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。而且一些单片机厂家也不一定能提供C编译器。而汇编语言,一条指令就对应一个机器码,每一步执行什么动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在资源较少单片机开发中,我们还是建议采用汇编语言比较好。
& & 而C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。C语言有功能丰富的库函数、运算速度快、编译效率高、有良好的可移植性,而且可以直接实现对系统硬件的控制。C语言是一种结构化程序设计语言,它支持当前程序设计中广泛采用的由顶向下结构化程序设计技术。此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。因此,使用C语言进行程序设计已成为软件开发的一个主流。用C语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完备的系统。
& & 综上所述,用C语言进行单片机程序设计是单片机开发与应用的必然趋势。所以作为一个技术全面并涉足较大规模的软件系统开发的单片机开发人员最好能够掌握基本的C语言编程。
4. & & &当开发一个较复杂而又开发时间短的项目时,用C还是用汇编开发好?
& & 答:对于复杂而开发时间紧的项目时,可以采用C语言,但前提是要求对该MCU系统的C语言和C编译器非常熟悉,特别要注意该C编译系统所能支持的数据类型和算法。虽然C语言是最普遍的一种高级语言,但不同的MCU厂家其C语言编译系统是有所差别的,特别是在一些特殊功能模块的操作上。如果对这些特性不了解,那调试起来就有的烦了,到头来可能还不如用汇编来的快。
5. & & &在教学中要用到芯片单片机教材,请问那里可以找到关于这方面的书或资料?
& & 答:有关这方面的教材,大学里常用的一本是《IBM-PC汇编语言程序设计》清华大学出版社出版的,在网上以及书店都是可以找到的,另外网上还可以搜索到很多其他的教材如:《微机原理及汇编语言教程》(杨延双张晓冬等编著 )和《16/32 位微机原理、汇编语言及接口技术》(作者: 钟晓捷 陈涛 ,机械工业出版社出版)等,可以在较大型的科技书店里查找或者直接从网上订购。
6. & & &初学者到底是应该先学C还是汇编?
& &答:对于单片机的初学者来说,应该从汇编学起。因为汇编语言是最接近机器码的一种语言,可以加深初学者对单片机各个功能模块的了解,从而打好扎实的基础。
7. & & &我是一名大3的学生,学了电子线路、数字逻辑、汇编和接口、C语言,但是总是感觉很迷茫,觉好象什么都不会。怎么办?
& & 答:大学过程是一个理论过程,实践的机会比较少,往往会造成理论与实践相脱节,这是国内大学教育系统的通病,不过对于学生来说切不可好高骛远。一般从大三会开始接触到一些专业课程,电子相关专业会开设相关的单片机应用课程并且会有简单的实验项目,那么要充分把握实验课的机会,多多地实际上机操作练习。平时可以多看看相关的电子技术杂志网站,看看别人的开发经验,硬件设计方案以及他人的软件设计经验。有可能的话,还可以参加一些电子设计大赛,借此机会2--3个人合作做一个完整系统,会更有帮助。到了大四毕业设计阶段,也可以选择相关的课题作些实际案例增长经验。做什么事情都有个经验的积累过程,循序渐进。
8. & & &请问作为学生,如何学好单片机?
& & 答:学习好单片机,最主要的是实践,在实践中增长经验。在校学生的话,实践机会的确会比较少,但是有机会的话,可以毕业实习选择相关的课题,这样就可以接触到实际的项目。而且如果单片机微机原理是一门主课的话,相信学校会安排比较多的实践上机机会。有能力的话,可以找一些相关兼职工作做做,会更有帮助。而且单片机开发应用需要软硬件结合,所以不能只满足于编程技巧如何完美,平时也要注意硬件知识的积累,多上上电子论坛网站,买一些相关杂志。可能的话,可以到电子市场去买一些小零件,自己搭一个小系统让它工作起来。
& & HOTLEK的单片机是RISC结构的8位单片机,它可以广泛应用在家用电器、安全系统、掌上游戏等方面。大概来说可以分成I/O型单片机、LCD型单片机、A/D型单片机、A/D with LCD型单片机等等。这些单片机的中文资料我们都公开在HOLTEK网站www.holtek.com.cn。
& & &HOLTEK各类单片机的使用手册下载地址:
& & &http://www.holtek.com.cn/referanc/htk_book.htm
& & &HOLTEK单片机软件/硬件应用范例下载地址:
& & &http://www.holtek.com.cn/tech/appnote/appnote.htm
&HOLTEK单片机支持工具下载地址:
& & &http://www.holtek.com.cn/tech/tool/tool.htm&
9. & & &如何才能才为单片机的高手啊?
& &答:要成为单片机高手,应该多实践,时常关注单片机的发展趋势;经常上一些相关网站,从那里可以找到许多有用的资料。
10. &女性是否适合单片机软件编程这个行业?
答:要根据自己的兴趣,配合自己对软件编程的耐性,男女皆适合这个行业。
11. &Holtek的数据手册在哪里下载?
& &答:如果对Holtek的IC感兴趣的话,相应的数据手册可以到网站上http://www.holtek.com.cn/products/index.htm去选IC资料下载。
12. &8位机还能延续多久!
& & 答:以现在MCU产品主力还是在8位领域,主要应用于汽车应用、消费性电子、电脑及PC周边、电信与通讯、办公室自动化、工业控制等六大市场,其中车用市场多在欧、美地区,而亚太地区则以消费性电子为主,并以量大低单价为产品主流,目前16位MCU与8位产品,还有相当幅度的价差,新的应用领域也仍在开发,业界预计,至少在2005年前8位的MCU仍是MCU产品的主流。
13. &学习ARM及嵌入式系统是否比学习其它一般单片机更有使用前景?对于一个初学者应当具备哪些相关知识?
& &答:一般在8位单片机与ARM方面的嵌入式系统是有层次上的差别,ARM适用于系统复杂度较大的高级产品,如PDA、手机等应用。而8位单片机因架构简单,硬件资源相对较少,适用于一般的工业控制、消费性家电等等。对于一个单片机方面的软件编程初学者,应以HOLTEK系列或8051等8位单片机来做入门练习。而初学者应当具备软件编程相关知识,单片机一般软件编程是以汇编语言为主,各家有各家的语法,但大都以RISC的MCU架构为主,其中 RISC (Reduced Instruction Set Computer) 代表MCU的所有指令。都是利用一些简单的指令组成的,简单的指令代表 MCU 的线路可以尽量做到最佳化,而提高执行速率。另外初学者要具备单片机I/O接口的应用知识,这在于周边应用电路及各种元器件的使用,须配合自己所学的电子学及电路学等。
14. &符合44PIN的80系列8位单片机的MCU有哪些?
答:符合44PIN的80系列8位单片机有Z8674312FSC、Z86E2112FSC、Z86E2116FSC。
15. &请介绍一下MCU的测试方法。 答: MCU从生产出来到封装出货的每个不同的阶段会有不同的测试方法,其中主要会有两种:中测和成测。
& & 所谓中测即是WAFER的测试,它会包含产品的功能验证及AC、DC的测试。项目相当繁多,以HOLTEK产品为例最主要的几项如下:
l & & & & 接续性测试:检测每一根I/OPIN内接的保护用二极管是否功能无误。
l & & & & 功能测试:以产品设计者所提供测试资料(TEST PATTERN)灌入IC,检查其结果是否与当时SIMULATION时状态一样。
l & & & & STANDBY电流测试:测量IC处于HALT模式时即每一个接点(PAD)在1态0态或Z态保持不变时的漏电流是否符合最低之规格。
l & & & & 耗电测试:整颗IC的静态耗电与动态耗电。
l & & & & 输入电压测试:测量每个输入接脚的输入电压反应特性。
l & & & & 输出电压测试:测量每个输出接脚的输出电压位准。
l & & & & 相关频率特性(AC)测试,也是通过外灌一定频率,从I/O口来看输出是否与之匹配。
l & & & & 为了保证IC生产的长期且稳定品质,还会做产品的可靠性测试,这些测试包括ESD测试,LATCH UP测试,温度循环测试,高温贮存测试,湿度贮存测试等。
& & 成测则是产品封装好后的测试,即PACKAGE测试。即是所有通过中测的产品封装后的测试,方法主要是机台自动测试,但测试项目仍与WAFER TEST相同。PACKAGE TEST的目的是在确定IC在封装过程中是否有任何损坏。
16. &能否利用单片来检测手机电池的充放电时间及充放电时的电压电流变化,并利用一个I/O端口使检测结果在电脑上显示出来?
答:目前市场上的各类智能充电器,大部分都采用MCU进行充电电流和电压的控制。至于要在电脑上显示,好象并不实用,可能只有在一些专门的电池检测仪器中才会用到;对于一般的手机用户来说,谁会在充电时还需要用一台电脑来做显示呢?要实现单片机与电脑的连接,最简单的方式就是采用串口通讯,但需要加一颗RS-232芯片
17. &在ARM编程中又应当如何?
& & 答:就以嵌入式系统观念为例,一般嵌入式处理器可以分为三类:嵌入式微处理器、嵌入式微控制器、嵌入式DSP(Digital Signal Processor)。
& & 嵌入式微处理器就是和通用计算机的微处理器对应的CPU。在应用中,一般是将微处理器装配在专门设计的电路板上,在母板上只保留和嵌入式相关的功能即可,这样可以满足嵌入式系统体积小和功耗低的要求。目前的嵌入式处理器主要包括:PowerPC、Motorola 68000、ARM系列等等。
& & 嵌入式微控制器又称为单片机,它将CPU、存储器(少量的RAM、ROM或两者都有)和其它接口I/O封装在同一片集成电路里。常见的有HOLTEK MCU系列、Microchip MCU系列及8051等。
& & 嵌入式DSP专门用来处理对离散时间信号进行极快的处理计算,提高编译效率和执行速度。在数字滤波、FFT(Fast Fourier Transform)、频谱分析、图像处理的分析等领域,DSP正在大量进入嵌入式市场。
18. &MCU在射频控制时,MCU的时钟(晶振)、数据线会辐射基频或基频的倍频,被低噪放LNA放大后进入混频,出现带内的Spur,无法滤除。除了用layout、选择低辐射MCU的方法可以减少一些以外,还有什么别的方法?
答:在设计高频电路用电路板有许多注意事项,尤其是GHz等级的高频电路,更需要注意各电子组件pad与印刷pattern的长度对电路特性所造成的影响。最近几年高频电路与数位电路共享相同电路板,构成所谓的混载电路系统似乎有增加的趋势,类似如此的设计经常会造成数位电路动作时,高频电路却发生动作不稳定等现象,其中原因之一是数位电路产生的噪讯,影响高频电路正常动作所致。为了避免上述问题除了设法分割两电路block之外,设计电路板之前充分检讨设计构想,才是根本应有的手法,基本上设计高频电路用电路板必需掌握下列三大原则:
l & & & & 高质感。
l & & & & 不可取巧。
l & & & & 不可仓促抢时间。
以下是设计高频电路板的一些建议:
& & (1)印刷pattern的长度会影响电路特性。尤其是传输速度为GHz高速数位电路的传输线路,通常会使用strip line,同时藉由调整配线长度补正传输延迟时间,其实这也意味着电子组件的设置位置对电路特性具有绝对性的影响。
& & (2)Ground作大better。铜箔面整体设置ground层,而连接via的better ground则是高频电路板与高速数位电路板共同的特征,此外高频电路板最忌讳使用幅宽细窄的印刷pattern描绘ground。
& & (3)电子组件的ground端子,以最短的长度与电路板的ground连接。具体方法是在电子组件的ground端子pad附近设置via,使电子组件能以最短的长度与电路板的ground连接。
& & (4)信号线作短配线设计。不可任意加大配线长度,尽量缩短配线长度。
& & (5)减少电路之间的结合。尤其是filter与amplifier输出入之间作电路分割非常重要,它相当于audio电路的cross talk对策。
& & (6)MCU回路Layout考量:震荡电路仅可能接近IC震荡脚位;震荡电路与VDD & VSS保持足够的距离;震荡频率大于1MHz时不需加 osc1 & osc2 电容;电源与地间要最短位置并尽量拉等宽与等距的线,于节点位置加上104/103/102等陶瓷电容。
19. &Intel系列的96单片机80c196KB开发系统时,都有那些注意事项?
答:一个即时系统的软体由即时操作系统加上应用程序构成。应用程序与作业系统的接口通过系统调用来实现。用80C196KB作业系统的MCU,只能用内部RAM作为TCB和所有系统记忆体(含各种控制表)以及各个任务的工作和资料单元。因此一定要注意以下几点:
& & (1)对各个任务分配各自的堆迭区,该堆迭区既作为任务的工作单元,也作为任务控制块的保护单元。
& & (2)系统的任务控制块只存放各任务的堆迭指标,而任务的状态均存放于任务椎栈中。在一个任务退出运行时,通过中断把它的状态进栈,然后把它的堆迭指标保存于系统的TCB中;再根据优先取出优先顺序最高的已就绪任务的堆迭指标SP映象值送入SP中;最后执行中断返回指令转去执行新任务。
& & (3)各任务的资料和工作单元尽量用堆迭实现,这样可以允许各任务使用同一个子程序。使用堆迭实现参数传递并作为工作单元,而不使用绝对地址的RAM,可实现可重入子程序。该子程序既可为各个任务所调用,也可实现递回调用。
20. &在demo板上采样电压时,不稳定,采样结果有波动,如何消除?
& &答:一般来说,仿真器都是工作在一个稳压的环境(通常为5V)。如果用仿真器的A/D时,要注意其A/D参考电压是由仿真器内部给出,还是需要外部提供。A/D转换需要一个连续的时钟周期,所以在仿真时不能用单步调试的方法,否则会造成A/D采样值不准。至于A/D采样不稳定,可以在A/D输入口加一电容,起到滤波作用;在软件处理时采用中值滤波的方法。
21. &在车载DVD系统中,如何设计电子防震系统?
& &答:在车载DVD系统,最好选择高档DVD机,因为高档DVD机都采用电子防震系统(ADVANCEDESP),当记忆缓冲区内的读数降低,先进的电子防震设计会以双速读数系统,做出比正常速度快两倍的读数速率,以减低噪声,即使连续震荡仍可避免跳线情况出现,现在就说说什幺叫电子防震。简单地说:电子防震就是一个信号的储存--释放过程,首先CD要先把信号进行提前读取,也就是我们见到机子的加速,再把信号储存在RAM中,而我们在开防震的时候所听到的就是经过RAM的声音,这样就是它的过程。当没有防震时是由于信号是1比1读取的,所以当受到冲击后,就会出现跳音。而当开了防震时,机子受到冲击后,由RAM释放出来的声音使音乐不停地播放,而与此同时,光头迅速进行复位检索,当检索到信号后立即补充,所以不会出现跳音。大概的情况就是这样。但是这样还没有满足用家的要求,由于这种的方法带来的时间短,通常只有3秒,所以跳音的机会还是蛮高,如果增大RAM又带来造价的增高因为RAM这东西价格较贵,尤其是质量好的。
22. &在电子防震技术中,有那些IC或器件可供选择?
& &答:在电子防震技术中,最重要的技术之一要数是RAM技术,而一直以来都是因为它的成本问题,所以防震时间都一直不能增加,也就是说RAM本身就有限制,RAM的容量越大,造价就越高。而许多厂家就如何在RAM的限制里得到最大限度的记忆时间展开了开发研究。
23. &如何进行编程可以减少程序的bug?
答:在此提供一些建议,因系统中实际运行的参数都是有范围的。系统运行中要考虑的超范围管理参数有:
l & & & & 物理参数。这些参数主要是系统的输入参数,它包括激励参数、采集处理中的运行参数和处理结束的结果参数。合理设定这些边界,将超出边界的参数都视为非正常激励或非正常回应进行出错处理。
l & & & & 资源参数。这些参数主要是系统中的电路、器件、功能单元的资源,如记忆体容量、存储单元长度、堆迭深度。在程序设计中,对资源参数不允许超范围使用。
l & & & & 应用参数。这些应用参数常表现为一些单片机、功能单元的应用条件。如E2PROM的擦写次数与资料存储时间等应用参数界限。
l & & & & 过程参数。指系统运行中的有序变化的参数。
& & 在上述参数群对一程序编写者而言,须养成良好习惯,在程序的开头,有顺序的用自己喜欢文字参数对应列表来替代,然后用自己定义的文字参数来编写程序,这样在做程序的修改及维护时只在程序的开头做变动即可,不用修改到程序段,才比较容易且不会出错。
24. &有人认为单片机将被ARM等系列结构的嵌入式系统所取代。单片机的生命期还有多长?
& &答:因为8位单片机与嵌入式系统的ARM在功能结构和单价的差异,故应用层次上就有很大的不同。 ARM适用于系统复杂度较大的高级产品,如PDA、手机等应用。而8位单片机因架构简单,硬件资源相对较少,适用于一般的工业控制,消费性家电&&等等。评估单片机近期是否会给ARM取代,要观察两个因素:
l & & & & 芯片成本
& & 因ARM的工作频率较高,电路较庞大,所需的芯片制造工艺要求在0。25U以上,成本较高。8位单片机工作频率相对较低,电路较小,所需的芯片制造工艺在0。5U 即可,成本较低。
l & & & & 功能定位
& & ARM的功能较单片机强,但两者定位不同。就如现阶段不会有人用ARM去作一个简单的工业定时开关。当然,如果两者单价相同也无不可,但现实是有很大的单价差距。
& & 至于将来,因芯片制造成本会不断下降,上述的成本差异影响愈来愈少!但我估计在往后5年单片机仍有价格优势,仍能存活!但ARM是否会精简架构,降低成本,抢夺低阶市场?我想可能性不大,ARM应该会向上发展。同样,单片机也只能向上发展,如16位,高功能&&等。原因就是因为芯片制造工艺进步太快。压迫芯片设计往高集成发展。
25. &在单片机C编成时,如何才能使生成的代码具有和汇编一样的效率?
答:如果是使用C语言编程时,不太可能生成的代码具有1:1和汇编一样的效率。
& & C语言命令要被硬件识别并执行,必须通过编译器编译。编译器分为前端、中端、后端。前端与各种计算机语言写的程序打交道,后端与处理器的基本指令集接轨。所以如果使用C编程时,要达到最高的效率,最好能够很了解所使用的C编译器。先试验一下每条C语言编译以后对应的汇编语言的语句行数,这样就可以很明确的知道效率。在今后编程的时候,使用编译效率最高的语句,这样就能确保单片机C编程的时候同样的功能不同的C程序,编译效率最高。但是各家的C编译器都会有一定的差异,优秀的嵌入式系统C编译器代码长度和执行时间仅比以汇编语言编写的同样功能程度长5-20%,所以不同厂家的C编译器的编译效率也会有所不同。&
26. &ARM单片机和哪种内核的单片机比较接近?
& &答:严格的说,ARM不是单片机,是一个嵌入式的实时操作系统。ARM(Advanced RISC Machines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件。ARM将其技术授权给世界上许多著名的半导体、软件和OEM厂商,每个厂商得到的都是一套独一无二的ARM相关技术及服务。所以市场上像Intel、IBM、LG半导体、NEC、SONY、菲利浦和国半这样的大公司都有ARM系列,现在不存在什幺ARM单片机和哪种内核的单片机比较接近的问题。而且由于厂家购买内核后会根据自己芯片应用方向的不同,自行添加不同的外挂功能模块,所以,同样内核的芯片其提供的功能是不同的。
27. &从51转到ARM会有困难吗?
& & 答:从51转到ARM,其实编程之类的原理都是一样的,但是要注意的是ARM是一个RISC的架构,在ARM的应用开放源代码的程序很多,要想提高自己,就要多看别人的程序,linux,uc/os-II等等这些都是很好的源码。
28. &我学过MCS51单片机教材,很有兴趣,但缺乏实践经验,手头没有任何道具可供演练,资金又有限,请问该怎么办?
& &答:在没有任何条件进行实践时,如果真的有兴趣,可以下载一些具有软件仿真功能仿真软件进行一些编程,像一些做得比较好的51仿真软件应该具有这种功能。HOLTEK的仿真软件HT-IDE3000也具有相应的功能,同时它还具有LCD软件仿真,周边电路的软件仿真。有兴趣的话,也可以去免费下载使用:http://www.holtek.com.cn/tech/tool/ide.htm。同时可以到一些电子市场去购买一些简单器件自己练习搭一下电路以加强硬件方面的知识。
29. &如果已经有了针对某MCU的C实现的某个算法,保持框架不变,对核心的部分用汇编优化,有没有一些比较通用的原则?
& &答:每个人的编程都有自己的风格与习惯,如果要利用别人的程序,在其中修修改改,如果他的程序并没有很好的模块化的话,建议最好不要这幺做,否则本来预期达到事倍功半,说不定反而事半功倍了。要参考他人的程序当然可以,但是首要是要看懂并理解他人程序的算法精髓,而不是在他的基础上打补丁。而关于算法方面的优化,可以购买一些数据结构的书籍,上面有比较详细的说明。
30. &如果准备估计一个算法的MIPS,有什么好的途径?
& &答:算法的运行时间是指一个算法在计算机上运算所花费的时间。它大致等于计算机执行简单操作(如赋值操作,比较操作等)所需要的时间与算法中进行简单操作次数的乘积。通常把算法中包含简单操作次数的多少叫做算法的时间复杂性。它是一个算法运行时间的相对量度,一般用数量级的形式给出。度量一个程序的执行时间通常有两种方法:
l & & & & 一种是事后统计的方法。因为很多计算机内部都有计时功能,不同算法的程序可通过一组或若干组相同的统计数据以分辨优劣。但这种方法有两个缺陷:一是必须先运行依据算法编制的程序;二是所得时间的统计量依赖于计算机的硬件、软件等环境因素,有时容易掩盖算法本身的优劣。因此人们常常采用另一种事前分析估算的方法。
l & & & & 一种是事前分析估算的方法。一个程序在计算机上运行时所消耗的时间取决于下列因素:
(1)依据的算法选用何种策略;
(2)问题的规模。例如求100以内还是1000以内的素数;
(3)书写程序的语言。对于同一个算法,实现语言的级别越高,执行效率就越低;
(4)编译程序所产生的机器代码的质量。这个跟编译器有关;
(5)机器执行指令的速度。
& & 显然,同一个算法用不同的语言实现,或者用不同的编译程序进行编译,或者在不同的计算机上运行时,效率均不相同。这表明使用绝对的时间单位衡量算法的效率是不合适的。撇开这些与计算机硬件、软件有关的因素,可以认为一个特定算法"运行工作量"的大小,只依赖于问题的规模(通常用整数量n表示),或者说,它是问题规模的函数。
& & 一个算法是由控制结构(顺序、分支和循环三种)和原操作(指固有数据类型的操作)构成的,则算法时间取决于两者的综合效果。为了便于比较同一问题的不同算法,通常的做法是,从算法中选取一种对于所研究的问题(或算法类型)来说是基本运算的原操作,以该基本操作重复执行的次数作为算法的时间度量。&
& & 算法的MIPS有专门的一门学问,可以去好好参考相关的数据结构书籍。&
31. &遥控的编解码思路和设计流程是怎样的?
& &答:一般来说完整的遥控码分为头码、地址码、数据码和校验码四个组成部分。头码根据不同的厂家各不相同,地址码和数据码都由逻辑&1&和逻辑&0&组成。编码的设计目的,就是按照编码规则发送不同的码值。我们最常见的码型有SONY、松下、NEC等厂家型号。遥控编码芯片最常用的是在空调、DVD、车库门等遥控器上。
设计编码程序可以分为三个部分。
& & 第一部分是了解码型的特性。遥控码的头码和地址码(也称为客户码)是固定不变的,数据码和校验码根据不同的键值而改变。
& & 第二部分是计算发码时间。遥控码大部分都是由逻辑&1&和逻辑&0&组成,也就是由一串固定占空比、固定周期的方波所组成。通常这些方波的周期是毫秒甚至微秒等级,需要在时间上计算的比较精确。所以选择发码单片机型号的时候,就要考虑到单片机的运行速度是不是够快,以及程序运行时间够不够。
& & 第三部分就是程序的编写。选定单片机型号之后,开始设计程序流程。一般来说我们使用I/O口就可以做发码的输出端口。发码程序一般由几个子程序组成,头码子程序、逻辑1子程序,逻辑0子程序以及校验码的算法子程序。一旦我们得到要发送码的命令后,首先调用头码子程序,然后根据客户码和键值调用逻辑1子程序或者逻辑0子程序,最后调用校验码算法子程序输出校验码。
& & HOLTEK公司的HT48CA0/HT48RA0、HT48CA3/HT48RA3和HT48CA6是专为遥控器设计的单片机,它们具有专门红外输出口,可以实现绝大部分发码的要求。
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
单片机相关资源
问题相关资源
编辑:什么鱼
本文引用地址:
大学堂最新课程
本周热门资源推荐
EEWORLD独家

我要回帖

更多关于 单片机是什么 的文章

 

随机推荐