单片机有什么用问题

单片机的问题_百度知道
单片机的问题
1.unsigned char code
dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F}; 这是定义了一个一维数组dispbit,可是code在这里是什么意思啊???
2.void T1zd(void) interrupt 3
//3定时器1的中断号
1定时器0的中断号 0外部中断1 2外部中断2
我有更好的答案
1。“code”是单片机C语言特有的关键字在单片机中RAM的空间特别小,特别珍贵。RAM空间,存放变量。而一些常量,比如码表等常量放在ROM中。所以单片机中code就是告诉单片机这个数据放入ROM中。本例中dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F}; 数组内容为常量,故加上code,以节约RAM的空间。其实code放在unsigned char 前也可以,比如code unsigned char dispbit[8]效果一样。2.关于void T1zd(void) interrupt 3
“interrupt ”是单片机c语言中断关键字,至于后面的0,1,2,3,4,5,分别表示0-外部中断01-定时器02-外部中断13-定时器14-串口中断5-定时器2“interrupt ”是单片机c语言中断关键字,是c51 语言在单片机中规定的,在程序编译时指明中断的类型。当相应的中断发生时,并执行这个中断函数。本例中当定时器计数时间一到(即 TH1和TL1全部计满,并溢出 ),便执行下面程序,将0x1c放到 TH1中
0x18放到TL1 中,再开始重新计数(不断加1),每计满一次
LedNumVal值 加1。如此下去。。。
采纳率:59%
1.code 是把数组固定到ROM里面,而不是放在RAM里面,减少RAM的使用量,例如使用51单片机的时候如果数组大于256B,那么RAM就不够用了,所以把不会改变的数组放到ROM里面,当然,如果是会时常变化的数组,是不能固定到ROM中的;2.都是这么用,应该是编译器设定的,你就当成是在KEIL编译器下编写51中断程序的模块吧。
1,code的意思就是告诉编译器将这个一维数组做为常量存放在程序存储器ROM或flash里面2,不用定义,直接写就好就像写调用的子程序一样
为您推荐:
其他类似问题
您可能关注的内容
单片机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。  摘 要 单片机因其体积轻小、运算指令速度快、智能化程度高等多种优势,广泛应用于工业控制、仪表监测、测控等多个领域。然而" />
免费阅读期刊
论文发表、论文指导
周一至周五
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不保证该信息(包括但不限于文字、数据及图表)准确性、真实性、完整性等。单片机常见故障及处理方法
吴鉴鹰单片机开发板地址
店铺:【吴鉴鹰的小铺】
地址:【https://item.taobao.com/item.htm?_u=ukgdp5a7629&id=】
一些单片机常见问题的解决办法
工作和生活中会遇到许许多多的问题,可能让你一时陷于其中,但是总有解决的办法。随时记下遇到的问题,并做好总结,一方面有助于积累,另一方面也避免同一次错误再犯。
1.PIC12F629仅有一个中断入口,要避免多个中断引发的冲突。
2.引脚电平变化触发中断,和外部INT中断,在总中断GIE清零的时候,不会进入中断程序执行。
3.单片机进入休眠时,要唤醒,常常使用引脚电平变化中断或者外部INT中断。若是前者,按键按下时会唤醒,按键抬起时也会唤醒。如果这个时候还有别的中断,如初始化了定时器,GIE置位了,两种中断就会冲突
4.如果PIC单片机的I/O口作为输入引脚使用,初始化时必须要关比较器,否则,不会响应。
5.看门狗溢出会导致单片机从休眠中醒来。
6.使用PT2262和单片机做发射端时,如果用电池,要做到最省电。正常时,单片机休眠,PTT2262不上电,可以用三极管控制PTT2262的电源端,仅在发射时上电一次。
7.315MHZ的调幅电路中,选频电感可以使用模压电感,也可以自己绕,当然最好使用一端环形PCB铜线。
8.315Mhz的收发天线长度计算公式:L=1/4波长;而波长=3.0*10^8/315Mhz 算出 最佳匹配天线约25cm,可以使用拉杆天线,当然在PCB上用一段长的粗线也可以。
9.接收端使用的是超再生接收电路,网络上普遍流传的那张图纸被人原搬下来后,可以使用,我也剽窃了一次,希望也可以。要想看懂,真不容易。
10.P沟道的MOS管能不用就不用,价格昂贵不说,导通电阻大,功耗大,单片机输出0时很容易打开,但是输出1时,如果MOS管源极接的是高于单片机高电平的电压,是关不断的,需要借助三接管关断。
10.把过孔设成外径0.4mm,孔径0.2mm理论上可以,但是有人告诉我PCB加工厂可能做不出来,但我觉的问题不大
11.调试时一定要有耐心。沉住气,多反思,没有谁一下子就会成功,之前都会失败很多次。想不通时把问题说出来,旁观者清,别人可以给你启示。
喜欢本文的亲们,欢迎点赞哦
技术源于积累,成功来自执着——单片机精讲吴鉴鹰
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
今日搜狐热点51单片机应用中5个常见问题总结-电子发烧友网触屏版
本文就51单片机应用中一些常见问题作个总结,这都是我实际碰到过的,因为文章篇幅所限,这些问题远远不足以表达单片机的常见问题。希望对初学者有所帮助,文中不完善的地方务请指点。谢谢!
1:C51编译器如何区分位地址和字节地址
是靠预定义实现的,比如:sfr P0 = 0x80; sbit P0_0 = 0x80;前者声明了P0端口地址位于0x80,后者说明了P0端口的bit0,即P0.0位于位地址空间0x80处。这2个0x80具有完全不同的含义,靠关键字sfr和sbit来区别。这样当程序被编译时,编译器会依此编译成相应的汇编语言。例如:
C51语句: P0 = 1;
P0声明为sfr,因此编译成:mov 80h,01h,将把0x01数据送入0x80单元,由于0x80单元物理上对应P0端口,因此,P0.0脚将输出高电平(其实是呈现高阻态,P0口独有的),其他.1-.7脚输出低电平。
C51语句: P0_0 = 1;
P0_0声明为sbit,因此编译成:setb 80h,这将把位地址空间的0x80地址的bit的值置1。这个位正是P0口的bit0,执行后,P0.0将输出高阻态。而P0.1-.7不会变化。
2:C51为什么要嵌套汇编
51单片机一个显著优点就是指令执行时间固定,因此可以适应时序要求严格的场合。例如符合ISO7816协议的cpu卡的读写,对时序要求比较严格。其实就是用io脚做出来的同步半双工串口。支持cpu卡的程序一般比较庞大,需要用c51来组织,但是由于c编译的不确定性,必须把底层程序封装成汇编语言模块嵌入到工程中。这就带来几个问题:如何声明函数、参数如何传递等。限于篇幅,不能说得很细。下面举例:
汇编程序单独保存一个文件,加入到工程中,函数如下:
用c语言在.h文件中声明: extern unsigned char proc_a(unsigned char val);
调用时形如: retvalue = proc_a(0x11);
a:汇编程序如果带参数,则需要在汇编程序前多加一个下划线。而声明它的地方不用加(伟福编译器这么要求的)。
b:函数的形参中第一参数用R7传递,函数返回值用R7返回,这是C51的通用规范。其他参数都有相应规定。函数可以返回一个位,用psw的c位返回。c:上面的语句,执行顺序是把0x11给R7,然后跳转子程序,子程序将它加1后送回。
d:函数跳转到汇编程序时,本区的R0-R7,A,B,PSW,DPTR等寄存器可以供子程序使用,不必考虑调用后是否要恢复这些常规资源。上例中,A的值被函数使用了,编程者不必恢复调用前的值。
3:51单片机的P0口特殊之处
许多新手都碰到这个问题,其实很简单,这涉及到芯片的io脚是怎么做出来的。这对硬件工程师来说十分重要。TTL的io脚模型:
P1,P2,P3口都可以理解成左图,注意vcc下面有个电阻,因此可以理解成:引脚输出1的能力弱。地那边没有电阻,可以理解成引脚吸入电流能力强。而P0口,可以理解成右图。这就是集电极开路输出,也叫OC输出。可以看出,当CTR=1时,三极管导通,引脚被接地;当ctr=0时,三极管截止,引脚浮空,也叫三态。这个端口这么做的目的是考虑P0口肩负读写数据和地址复用,这个关系要仔细看懂cpu时序图。因此,P0口要加合适的上拉电阻,绝不要加下拉电阻。上拉电阻的选择要看外部负载情况。
4:P1-3口如何输入输出
从上节的左图可以看出。做输出时,ctr=1则输出强信号0,ctr=0则输出弱信号1。当io脚做输入时,应使ctr=0,这样三极管截止。外部信号如果是1,则上拉电阻加强了这个1,单片机就会读到1。当外部信号为0时,注意,必须将上拉电阻的上拉作用全部抵消,才能在引脚上得到0。
因此,对于程序来说,把io脚置1就处于接收状态,当然也是输出1状态。程序置io口为1,读取的信号是不是1就依靠外部电路了,如果外部电路没有&吃掉&上拉电阻的电流,则读取得到1,反之,虽然程序置io脚为1,但是读取得到的就是0。
因此,如果用io脚的高电平驱动外部电路时,要小心外部电路把这个1&吃掉&从而输出不了1。而作为输入时,为0电平的外设必须足够有能力将io脚拉低。所以,用io脚直接点亮led的时候,最好用反逻辑,就是输出0,让led亮。这样能保证驱动能力。就是io脚接led的负端,led的正端过电阻接vcc。
因此,io脚输出1时,外部电路将它强行接地是没有关系的,而io脚输出0的时候,外部电路强行接电源就会把io脚损坏。所以,程序加电之后,一般把所有io口都写成1:MOV P0,0FFH。
P3口引脚复用,必须引脚都处于输出1状态。例如,把RXD脚输出0,则它什么数据都读不进来了,笔者早期曾调试一整天才发现串口收不到数据是没有把RXD置1的原因,把时间都浪费在外围了,当时很是汗颜。
5:有关晶振
单片机的晶振在内部可以简化成一个反向器。当晶振输入脚XI刚过坎压、被认为是1的一瞬间,输出脚XO就输出0,这个0会带动晶振使XI电压下降,当降低到坎压被认为是0的一瞬间,输出脚XO就输出1。这样周而复始。
因此,用示波器观察正常工作的晶振输入脚XI时,得到的是一个不高不低的近似水平线。而XO则是幅值很大的正弦波。测量晶振输入脚XI时,示波器表笔要打在X10档上,否则,表笔就能把晶振弄停。
因此布线时,晶振输入脚XI要尽量靠近晶振,而XO脚可稍远。同时XO具有一定的驱动能力,某些芯片可以用它驱动其它时序电路(不推荐这么做,因为系统可靠性下降)。
写到这里,才发觉51单片机的问题太多了,这篇文字简直就是沧海一粟。
文章来源专栏
加载更多评论
后参与评论(编程分享)
(编程分享)
(编程分享)
第三方登录:

我要回帖

更多关于 单片机型号有哪些 的文章

 

随机推荐