1.意外中断。
是否打开了某个中断,但是没有响应和清除中端标志,导致程序一直进入中断,造成死机假象。
2. 中断变量处理不妥。
若定义某些会在中断中修改的全局变量,这时要注意两个问题:首先为了防止编译器优化中断变量,要在这些变量定义时前加 volatile,其次在主循环中读取中断变量前应该首先关闭全局中断,防止读到一半被中断给修改了,读完之后再打开全局中断;否则出现造成数据乱套。
3. 地址溢出,常见错误为指针操作错误。
我要着重说的是数组下标使用循环函数中循环变量,如果循环变量没控制好则会出现数组下标越界,意外修改系统的寄存器造成死机,这种情况下如果死机说明运气好,否则后面不知道发生什么头疼的事。
4. 无条件的死循环。
比如使用while(x);等待电平变化,正常情况下x都会变成0,就怕万一,因此最好加上时间限制;
5. 看门狗没有关闭。
有的单片机即使没使用看门狗开机时也有可能意外自动开启了最小周期的看门狗,导致软件不断复位,造成死机,这个要看芯片手册,最好在程序复位后首先应该显式清除看门狗再关闭看门狗;
6. 堆栈溢出。
最难查找的问题,对于容量小的单片机,尽量减少函数调用层级,减少局部变量,从而减少压栈的时候所需的空间。当你把以上几条都试过不能解决问 题,试一试把你的被调用少函数直接内置到调用的地方并且把占用RAM大的局部变量改成全局变量,试一试说不定就可以了。
关键字:单片机 程序跑飞
引用地址:
单片机程序跑飞的原因
推荐阅读最新更新时间:2024-03-16 16:01
AT89C52单片机对电风扇红外遥控发射电路的设计
传统电风扇多采用机械方式进行控制,功能少,噪音大,各档的风速变化大。随着科技的发展和人们生活水平的提高,家用电器产品趋向于自动化、智能化、环保化和人性化,使得由微机控制的智能电风扇得以出现。随着电子制造业的不断发展,社会对生产率的要求越来越高,各行业都需要精良高效、高可靠性的设备来满足要求。作为一种老式家电,电风扇具有价格便宜、摆放方便、体积轻巧等特点。由于大部分家庭消费水平的限制,电风扇作为一个成熟的家电行业的一员,在中小城市以及乡村将来一段时间内仍然会占有市场的大部分份额,但电风扇功能简单,不能满足智能化的要求。本文利用了单片机的红外控制功能,对电扇的控制结构进行了重新的设计,使得人在距离电扇10 m范围内就可以短程控制电扇,
[单片机]
用AVR单片机创造机器生命
1 什么是机器生命 机器生命就是一个能自主生存的机器,一个自动为生存下去而奋斗的机器。对于机器生命来说,生存的含义就是不断电,继续运行。机器生命具有完全自主决策、自主行动、活动于未知世界、不需人类参与就能持续运行并且自我维护等特征。影片《终结者》中的天网就是超级机器生命。《霹雳5号》描述了一个机器人从无生命到有生命的过程。 N.维纳(Norbert Wiener,1894~1964)写《控制论》时创造出第一个机器生命Wiener龟,这个机器龟仅有2个电子管组成的模拟计算机,但它却能实现真正的乌龟觅食、睡觉、探索、逃避等行为,其表现如同一个有生命的生物一样。机器龟上面有太阳能电池,当自身电池快用完前,机器龟乐于寻找一个
[单片机]
PIC单片机中断模块介绍
PIC单片机中断模块介绍: PIC 16F87X系列单片机可以接收多达14个中断源。中断控制器寄存器INTCON标记着各个中断源的请求,对各个中断设置屏蔽位,对全部中断设置全局屏蔽位。 PIC16F87X系列的中断包含:TMR0溢出中断(TOIF)、外部中断(INTF)、端口B变化中断(RBIF)、并行从动端口中断(PSPIF)、A/D变换中断、USART异步接收中断(RCIF)和异步发送中断(TXIF)、同步串行端口中断(SSPIF)、CCP1中断(CCPIIF)、TMR2中断(TMR2IF)、TMR1中断、CCP1中断(CCP2)、E2PROM写中断(EEIF)、总线碰撞中断(BCLIF)。 各个中断采
[单片机]
单片机中为什么要用晶振
简单地说,没有晶振,就没有时钟周期,没有时钟周期,就无法执行程序代码,单片机就无法工作。 单片机工作时,是一条一条地从RoM中取指令,然后一步一步地执行。单片机访问一次存储器的时间,称之为一个机器周期,这是一个时间基准。—个机器周期包括12个时钟周期。如果一个单片机选择了12MHz晶振,它的时钟周期是1/12us,它的一个机器周期是12×(1/12)us,也就是1us。 MCS—51单片机的所有指令中,有一些完成得比较快,只要一个机器周期就行了,有一些完成得比较馒,得要2个机器周期,还有两条指令要4个机器周期才行。为了衡量指令执行时间的长短,又引入一个新的概念:指令周期。所谓指令周期就是指执行一条指令的时间。例如,当需要
[单片机]
KEIL为嵌入式软件开发提供简化的开发环境
中国上海,2009年3月2日,ARM今日发布Keil™ µVision®4集成开发环境(IDE),用来在微控制器和智能卡设备上创建、仿真和调试嵌入式应用。µVision4 IDE是为增强开发人员的工作效率设计的,有了它可以更快速、更高效地开发和检验程序。通过μVision4 IDE中引入的灵活的窗口管理系统,开发人员可以使用多台监视器,在可视界面任何地方全面控制窗口放置。新用户界面可以更好地利用屏幕空间,更有效地组织多个窗口,为开发应用提供整齐高效的环境。
µVision4在µVision3的成功经验的基础上增加了:
• System Viewer (系统查看程序)窗口,提供了设备外围寄
[嵌入式]
AVR单片机对开关电源的控制方法
单片机控制开关电源,单从对电源输出的控制来说,可以有几种控制方式。 其一是 单片机 输出一个电压(经DA芯片或PWM方式),用作电源的基准电压。这种方式仅仅是用单片机代替了原来的基准电压,可以用按键输入电源的输出电压值,单片机并没有加入电源的反馈环,电源电路并没有什么改动。这种方式最简单。 其二是 单片机 扩展AD,不断检测电源的输出电压,根据电源输出电压与设定值之差,调整DA的输出,控制PWM芯片,间接控制电源的工作。这种方式单片机已加入到电源的反馈环中,代替原来的比较放大环节,单片机的程序要采用比较复杂的PID算法。 其三是 单片机 扩展AD,不断检测电源的输出电压,根据电源输出电压与设定值之差,输出PWM波,直接
[单片机]
51 单片机扩充外部中断
//给出的电路如下图所示: //图片链接: // http://xiangce.baidu.com/picture/detail/684895d8e7d3b312ef1c7eb503c20233254a2475 //要求: //1.在 K2 或 K3 的中断服务期间,K1 的中断请求仍能被服务; //2.当 K2 与 K3 同时按下时,K2 优先被服务,K3 在 K2 服务结束后才能被服务; //3.在 K3 的中断服务期间,K2 的中断请求不能被服务。 //每个中断的服务用调用软件延时程序DELAY来模拟。 //编程实现上述功能,设主频为12MHz。 //由图可见,三个按键和外部中断的关系如下: //k1 --
[单片机]
51单片机开发板的主要功能 51单片机开发板能做什么
51单片机开发板是一种基于8051系列单片机芯片的开发板,具有丰富的功能和广泛的应用。下面将详细介绍51单片机开发板的主要功能以及能够实现的各种应用。 一、基本功能: 通用输入输出:51单片机开发板具有多个通用输入输出引脚,可以连接各种外部设备和传感器,实现数据的输入和输出。 时钟管理:开发板通常会集成时钟电路,包括晶振、时钟发生器等,可以提供稳定的时钟信号给单片机使用。 存储器管理:开发板通常会搭载闪存、EEPROM、SRAM等各种类型的存储器,用于存储程序代码和数据。 电源管理:开发板通常会提供多种电源供电方式,可以选择外部电源或者USB供电。 通信接口:如串口、SPI、I2C等,可以连接各种外部设备进行数据通信
[单片机]