单片机答辩常见问题问题

单片机常见问题分析【51单片机吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:59,390贴子:
单片机常见问题分析收藏
1、为什么选用STC89C52单片机作为主控模块?单片机作为本科最常用的一种处理器,就本科阶段而言,所涉及到的单片机种类大致为:1)、以51(名字是因为Intel最早开发的8051,简称51)内核为主的8位单片机。(代表性的型号有AT89C51、AT89S51、STC89C51),AT和STC其实就是生产厂商不一样,内核都是51的内核,两者用起来没有多大差别。由于时间比较久了,因此是老的一批单片机,但比较容易上手。2)、AVR单片机(由ATMEL公司挪威设计中心的A先生与V先生利用ATMEL公司的Flash新技术,共同研发出RISC精简指令集的高速8位单片机,简称AVR),特点是比51单片机速度更快,能够适应更高的运算速度。3)、MSP430单片机(MSP430系列单片机是美国德州仪器(TI)1996年开始推向市场的一种16位超低功耗、具有精简指令集(RISC)的混合信号处理器)。特点是16位的。选取STC89C52单片机(52和51其实就是ROM大小不一样,其他都一样)是因为:a、STC单片机编译和调试比较简单,STC的可以在线编程也就是有ISP功能,AT的必须通过编程器烧录,比较麻烦。b、STC的单片机内部资源比AT的相对丰富,在处理一些数据方面,比AT来的更强大。2、晶振电路的作用?这部分在论文里也是有介绍的。如果将单片机比作一个人,晶振就是单片机的心脏,频率就是心率。单片机工作时,是一条一条地从RoM中取指令,然后一步一步地执行,所以晶振的必要性可想而知。3、时钟模块的初始化是什么意思?这里可能问的是定时器的初始化,定时器是单片机的内部资源的一种,它能够实现对时间的定时,但是,程序一开始之前需要告诉单片机,定时多长时间,什么时候打开定时器,定时器工作在那种工作方式等等,所以就牵扯到了定时器的初始化,另外类似的中断初始化、液晶初始化、串口初始化等等,其实都是在事先配置一些单片机需要知道的信息。
同步整流升压芯片,小封装升压芯片,大电流升压芯片,免费提供样品及DEM板测试,快充3V升12V/1.5A升压方案 免费提供样品板联系:
有没有外文翻译
登录百度帐号论文发表、论文指导
周一至周五
9:00&22:00
单片机应用中若干问题的解决方法
  摘 要 单片机因其体积轻小、运算指令速度快、智能化程度高等多种优势,广泛应用于工业控制、仪表监测、测控等多个领域。然而由于单片机的起步较晚,其各方面的技术也并不完善,所以在实际应用中会出现各种问题。本文就单片机在其应用过程中出现的一些常见问题加以阐述并提出相应的解决方法,如抗干扰技术、提高可靠性方法、程序出轨等。 中国论文网 /1/view-5681571.htm  【关键词】单片机 问题 硬件 软件   20世纪80年代初期,单片机开始进入人们的视线。近30多年来,单片机普遍应用于工业领域中,各个领域中基本上都能看到单片机的踪迹。然而由于工作环境或是外界干扰等问题,单片机在应用中也暴露了很多问题,影响其运行的可靠性和准确性,并给工业生产造成严重损失。基于此,本文就单片机在实际应用过程中存在的一些常见问题进行分析论述,以提高单片机的运行效率,减少生产成本。   1 抗干扰问题   单片机在运行过程中,由于受到外界干扰,如放电干扰、高频振荡、电磁信号影响等,很容易造成程序运行紊乱,或是硬件控制失灵,数据采集误差较大等问题,严重影响着其运行的稳定性和可靠性。因而使单片机具备更好的抗干扰性能,保证单片机有效稳定运行,是设计者在设计单片机系统时需要注意的重要问题。而干扰信号对单片机产生影响是通过其I/O口进入,在通常情况下,提高单片机的抗干扰性能,主要是从硬件和软件方面着手。   硬件上抗干扰,是从外围电路上直接将干扰除去。即在外围电路设计上加上电路用以减弱或是消除干扰信号,由于干扰信号不同,则电路设计也会有所改变。针对对电源波动较敏感的单片机,选取电源稳压块,采用0.01μF滤波旁路电容,以去除耦合影响。如图1所示;而对于系统上电或是下电时,在未对单片机做处理时,其电压会从0突增到工作电压,此时系统处于超不稳定状态,程序也会乱跑,而这种情况在实际使用中,是绝不允许的。出于对系统的保护作用及延长其使用寿命,此时需用上电延时复位电路,令单片机在工作电压变得稳定后工作正常。   另外一种抗干扰方式是利用软件实现,即人为地添加程序以过滤干扰信号,进而更一步地强化单片机的抗干扰能力。首先是指令冗余抗干扰,其是在进行抗干扰系统设计实现过程中,在系统程序流关键地方以及系统运行工作到具有决定作用的指令执行处,人为地加入一些空操作指令,即NOP指令。在单片机应用系统程序运行到某个单字节指令上时,在这里添加的空操作指令NOP,使得原本应作为操作数使用的指令失效,同时也避免了改变操作数的情况;也可利用软件陷阱抗干扰技术实现抗干扰能力,其主要是通过引导设置软件陷阱的抗干扰因子,避免和控制系统程序运行中存在的干扰因素,因而使得系统稳定可靠地运行。在这里,系统软件中的陷阱主要是系统程序中的一个引导指令,这个引导指令可以在系统程序运行过程中,强制性地捕获系统程序中乱飞的程序段,并将捕获所得程序引导至错误处理程序或者是复位地址处,从而对于系统程序的安全可靠运行进行保证。   2 可靠性方法   单片机系统的功能性设计是在理论基础上完成的,然而在实际的工作环境中,由于各方面因素的制约,其工作性能并不能充分发挥,因而系统的可靠性设计就尤为重要。系统的可靠性由自身的软硬件与其所处的工作环境综合决定,因而在设计分析时,也是从这两点出发。   硬件上主要是考虑系统运行的稳定性,减少或避免外界的干扰,其方法参考上述提到的抗干扰技术,另还可以放入抑制高频的电感,以避免高频信号从电源或是地线引入;使用隔离或屏蔽方法,利用光电隔离器件将单片机的输入输出隔离开,一方面使杂乱信号不得进入单片机系统,另一方面单片机系统本身的噪声也不会以传导的方式传播出去。而屏蔽则是针对空间环境中各种辐射可能会给系统带来的干扰。   在软件方面,除了上面提到的指令冗余外,另在系统启动运行时,开始执行开机自检程序,实时检测单片机各个模块的运行使用情况。当检查内容均为正常状态时,程序才能顺利地往后依次运行,一旦出现异常情况便进行相应的措施处理。开机自检项目主要有对RAM、ROM、I/0口状态及其他接口的检测;另外可利用单片机自带的“看门狗”,记录程序运行情况,一旦单片机由于程序由于某个原因乱飞,某一程序段持续进入死循环模式,此时便可利用看门狗程序发出复位信号,单片机复位,程序也会回到起始位置开始执行。   3 程序出轨问题   程序在其运行过程中,由于会受到随机的干扰,正常的逻辑执行顺序将被打破,因而造成程序卡死或是陷入死循环的后果,其主要特征是某个数据码或是指令码,因受干扰而发生跳变使程序运行出轨,进而使得整个单片机应用控制系统失效,这很可能会给设备生产带来隐患,更可能会危及到整个系统是否能安全稳定执行。   程序出轨问题可采用上述使用“看门”狗解决,待出现不正常时,程序自动跳回到执行入口地址;另外,可使用定时中断方式对程序进行监测,定时器在程序运行正常阶段不会产生中断。而当程序出现异常时,触发中断,进而中断服务程序执行使系统复位。另外还可通过硬件电路对程序进行监测,使其恢复正常复位,系统周期性地向端口提供高低电平,一旦程序出现异常或是乱飞,则触发单稳态触发器,继而实现了系统的自动复位.。   由于单片机不如计算机运行功能强大,其在使用过程中受外部影响较大,继而其存在的问题也是不可预测的。本文主要是针对单片机应用中比较常见的问题加以论述,对单片机系统中基本上会存在的抗干扰问题、可靠性问题及程序出轨问题加以说明,使得单片机系统运行更稳定、可靠、高效率,同时也降低生产成本,提高工作效率。另外抗干扰、可靠性的提高及程序出轨问题间,各因素间都是相互影响相互制约的,在不同的工作环境下均可得到一个稳定可靠的单片机控制系统。   参考文献   [1]张军,胡孝昌.单片机应用系统抗干扰技术的研究[J].计算机量与控制,2006(03).   [2]王幸之,王雷,钟爱琴等.单片机应用系统电磁干扰和抗干扰技术[M].北京航空航天大学出版社,2006.   [3]郭天祥.51单片机C语言教程[M].电子工业出版社,2003.   作者简介   翁鹏飞(1994-),男,汉族,江西省上饶市人,四川大学电子信息学院学生,研究方向为通信工程。   邱月阳(1992-),男,汉族,四川省资中人,四川大学电子信息学院学生,研究方向为通信工程。   作者单位   四川大学电子信息学院 四川省成都市 610021
转载请注明来源。原文地址:
【xzbu】郑重声明:本网站资源、信息来源于网络,完全免费共享,仅供学习和研究使用,版权和著作权归原作者所有,如有不愿意被转载的情况,请通知我们删除已转载的信息。
xzbu发布此信息目的在于传播更多信息,与本网站立场无关。xzbu不保证该信息(包括但不限于文字、数据及图表)准确性、真实性、完整性等。后使用快捷导航没有帐号?
请完成以下验证码
查看: 941|回复: 7
51单片机学习中的问题
在线时间24 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 10, 距离下一级还需 190 积分
一粒金砂(中级), 积分 10, 距离下一级还需 190 积分
最近在自学单片机,因为老师上课教的比较慢,就自学了,虽然比老师快,但自我感觉时间很紧迫了,想早日学会51.买的是网上的普中的板子,感觉他写的程序有些有些很复杂,不是很好看懂。还有前面定时,串行,lcd1602什么都会一点了,就是学到I2c总线的时候,感觉要写好多步奏啊,根据时序图写程序,完全不会写啊,英文手册看起来也累,感觉遇到了很多困难。后面还有什么12864,AD,DA各种芯片,时序图不会写程序,看别人的照搬感觉没意思啊,感觉要自己会写才行。这些芯片的程序你们是怎么写出来的,都能够记住吗,我感觉我记不住啊,看别人的以后也会忘的,大家给我点意见,后面该怎么学。是只要会用就行,不用记住这些步奏,以后用的着就查吗,但主要还是芯片的时序图不会,看别人的终究不是自己的。
在线时间1536 小时
威望6498分
芯币24131枚
E金币400枚
TA的帖子TA的资源
本帖最后由 huo_hu 于
00:30 编辑
几点的经验仅供参考:
电子类的东西好杂,需要很多课程融合,完整地做几个项目进步会比较快.这个东西急不得,慢工出细活儿,没有几年的工夫做不了很精通的程度,有些东西失败了才明白.
光看别人的代码意义不大,你就算背下来也没有用,自己写过的代码才是最有价值的.其实代码和代码差异很大demo的通常是易懂但不是最好的,能不能做的更好更合理这里面的差别大了去了.举个例子就说1602吧,网上的代码有的是下一个让它显示字符不难,然后还能做点什么呢?其实还多着呢,比如1.你能不能把判忙利用上减小软件开销2.避免程序死等延时3.如何自定义字符显示4.最少的修改适应不同的单片机主频5.不同进制数据的显示6.闪烁和移动效果,上面几条没有1个月应该是做不完的,如果你做完做好你学到的远比1602本身多的多了.
先跑个demo运行起来再按自己的想法去改,改啊改啊改啊的你就成高手了,相信下功夫定然有收获.
在线时间327 小时
芯币1682枚
TA的帖子TA的资源
一粒金砂(高级), 积分 301, 距离下一级还需 199 积分
一粒金砂(高级), 积分 301, 距离下一级还需 199 积分
要说我也是买的普中的板子学习的51单片机,感觉其实还好。
至于你说的程序步骤那么多记不住,首先只需要有个大致的步骤,一整个程序需要哪几步才算完整(大处着眼,细节部分慢慢的深化),如果不知道一个程序的整体流程的话,就是一头钻进了死胡同,不知道自己的程序最终要干嘛。而对于时序图的问题,其实并不需要你记住那些时序图,只要知道到哪里去找这些时序图,分析例程的代码,每一句和程序的时序图对应(拉高拉低时钟线数据线什么的),看懂了,你自己也就能够撇开例程自己对照时序图来写这些了。而这些一旦写好之后,以后要用到的话,基本上就是直接复制过来就能用的,说到底,IIC、串口、SPI等等都只是一种通讯方式,是一种工具,如何利用这些工具做更复杂更完整的事情才是重头戏。
祝你好运,有困惑才会有进步,只要不放弃,过一段时间之后,你会有一种恍然大悟的感觉的。
在线时间54 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 34, 距离下一级还需 166 积分
一粒金砂(中级), 积分 34, 距离下一级还需 166 积分
楼主加油,单片机小菜鸟在此祝楼主早日成神~
我也是菜鸟,共同进步吧&
在线时间24 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 10, 距离下一级还需 190 积分
一粒金砂(中级), 积分 10, 距离下一级还需 190 积分
几点的经验仅供参考:
电子类的东西好杂,需要很多课程融合,完整地做几个项目进步会比较快.这个东西急不得, ...
在线时间24 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 10, 距离下一级还需 190 积分
一粒金砂(中级), 积分 10, 距离下一级还需 190 积分
要说我也是买的普中的板子学习的51单片机,感觉其实还好。
至于你说的程序步骤那么多记不住,首先只需要有 ...
在线时间24 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 10, 距离下一级还需 190 积分
一粒金砂(中级), 积分 10, 距离下一级还需 190 积分
楼主加油,单片机小菜鸟在此祝楼主早日成神~
我也是菜鸟,共同进步吧
在线时间1518 小时
威望6154分
芯币8669枚
E金币2283枚
TA的帖子TA的资源
五彩晶圆(高级), 积分 6154, 距离下一级还需 3846 积分
五彩晶圆(高级), 积分 6154, 距离下一级还需 3846 积分
和外设芯片通信,就看芯片手册。iic,来说。起始标识,字节,停止标识。两个io口,拉高拉低,满足协议的波形。就可以通信。自己写时序,最好用示波器看。别靠记忆。多理解。多练习。
EEWORLD 官方微信
Powered by没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!当前位置: >
> 单片机编程面试题 常见问题及答案
单片机编程面试题 常见问题及答案
时间:作者:单片机编程面试常见问
2018年新的一年,新的开始,相信有很多人都在备战找新的工作了。那么不妨来了解一些单片机编程面试题,做好万全的准备,才可能百发百中嘛。下面分享三个单片机编程面试题,都是很常见的问题,附带答案。
问题一:char *p=&abc& 与 char p[]=&abc& 的区别
1.以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符,如在代码中写&abc&,那么编译器帮你存储的是&abc\0&
2.&abc&是常量吗?
答案:有时是,有时不是
不是常量的情况:
&abc&作为字符数组初始值的时候就不是,如
char str[] = &abc&;
因为定义的是一个字符数组,所以就相当于定义了一些空间来存放&abc&,而又因为字符数组就是把字符一个一个地存放的,所以编译器把这个语句解析为
char str[3] = {'a','b','c'};
又根据上面的总结1,所以char str[] = &abc&;的终结果是
char str[4] = {'a','b','c','\0'};
做一下扩展,如果char str[] = &abc&;是在函数内部写的话,那么这里的&abc\0&因为不是常量,所以应该被放在栈上。
是常量的情况:
把&abc&赋给一个字符指针变量时,如
char* ptr = &abc&;
因 为定义的是一个普通指针,并没有定义空间来存放&abc&,所以编译器得帮我们找地方来放&abc&,显然,把这里的&abc&当成常量并把它放到程序的 常量区是编译器合适的选择。所以尽管ptr的类型不是const char*,并且ptr[0] = 'x';也能编译通过,但是执行ptr[0] = 'x';就会发生运行时异常,因为这个语句试图去修改程序常量区中的东西。
记得哪本书中曾经说过char* ptr = &abc&;这种写法原来在c++标准中是不允许的,但是因为这种写法在c中实在是太多了,为了兼容c,不允许也得允许。虽然允许,但是建议的写法应该是 const char* ptr = &abc&;这样如果后面写ptr[0] = 'x'的话编译器就不会让它编译通过,也就避免了上面说的运行时异常。
又扩展一下,如果char* ptr = &abc&;写在函数体内,那么虽然这里的&abc\0&被放在常量区中,但是ptr本身只是一个普通的指针变量,所以ptr是被放在栈上的,只不过是它所指向的东西被放在常量区罢了。
3.字符串常量的类型可以理解为相应字符常量数组的类型,如&abcdef&的类型就可以看成是const char[7]
4. 如果真的需要使用&abcd&作为指针,建议写为const char * p=&abcd&;
如果是初始化字符串数组,建议写为char p[]=&abcd&;
如果p为指针,需要初始化,应该是char *p;p=malloc(STR_SIZE);strcpy(p,&abcd&);
问题二:单片机实现软件复位(软复位)的方法及讨论
1、放狗;2、((void(code *)(void))0x0000)();3、用单片机一个引脚控制点一下RSTRST;4、用单片机一个引脚控制重新加电;5、用单片机自带的软件复位指令或内狗指令;6、goto大法
方法1:&放狗&是单片机软复位的好办法,也基本上是唯一的一个办法。但并不是所有单片机都具备看门狗的功能,也不是一个万全之策。
办法2:这不是复位,只是把程序转到地址0去执行,不如用一个JMP更直接。目前可能极少数单片机或者用户已经自行添加Boot load时用户程序的程序开始地址并不为0x0000,所以需要查找这些特定单片机的启动地址。在keil C51下面可以这样实现:void soft_reset(void){ ((void (code *) (void)) 0x0000) ();}或者void (*reset)()=0x0000;在需要软件复位的地方使用语句:soft_reset(); 一般可实现软件复位。
办法3:用软件实现的硬复位。需要牺牲一个单片机引脚,且增加了单片机外部电路构造的复杂性,很不可取。
办法4:类似办法3,同样需要牺牲一个单片机引脚,且增加了单片机外部电路构造的复杂性,很不可取。但不能把它单单地当成是复位,应该叫上电复位。
办法5:Atmel 89C不带内狗,S的有内狗,只是一条指令就行。如STC的单片机有软件复位指令,即ISP_CONTR,地址在0E7H 单元(即str ISP_CONTR=0xE7),MOV ISP_CONTR,#B(C语言为ISP_CONTR=0x20),内狗也是一条指令MOV WDT_CONTR,#B!STC 51系列单片机Datasheet中指出:传统的8051 单片机由于硬件上未支持此功能,用户必须用软件模拟实现,实现起来较麻烦。现STC 新推出的增强型8051 根据客户要求增加了ISP_CONTR 特殊功能寄存器,实现了此功能。用户只需简单的控制ISP_CONTR 特殊功能寄存器的其中两位 SWBS / SWRST 就可以系统复位了。
办法6:程序从头(上电复位处)开始运行,且只有一个循环这种情况,当然可以用goto,如在main()的开头设一个start:,在程序的唯一循环中设定一个条件,然后goto命令。但需要注意,如果是在中断例程里,那么中断挂号寄存器仍置位,同级中断不能执行。所以必须先使中断挂号寄存器清零,EA = 0。只有RETI指令可以使中断挂号寄存器清零。51单片机有两级中断优先级,所以需要执行两次RETI指令。这用汇编是很简单的事,而C则比较难以实现。但是,goto命令尽量不要用,因为goto会到处乱窜,而且goto不能跑到函数外面去执行一个命令。
后总结如下:好使用办法5为简洁方便,使用办法2实现也不失为一种好方法
int main()
{ int a=5;
q=(int*)&a;
printf(&%d\n&,*q);
代码没有问题,面试中可能会把q=(int *)&a;中的强制转换去掉问你会出什么问题
以上内容总结的三个单片机编程面试常见问题,你都会了吗?如果还不会,再仔细看看答案哦。
学院新动态
高端IT就业培训专家
全国分校区
关注华清远见
关注创客学院
前台专线:010-
企业培训洽谈专线:010-
院校合作洽谈专线:010-
Copyright ©
北京华清远见科技发展有限公司 版权所有 ,京ICP备号,京公海网安备03号

我要回帖

更多关于 单片机实验中的问题 的文章

 

随机推荐