当AT89S51单片机运行出错或程序陷入死循环时,如何摆脱困境?
1、加看门狗电路和喂狗程序。喂狗程序放置得当,可以使飞走的程序复位,从头开始执行。
2、按一下RST(reset),复位。除了P0到P3口复位为0FFH外,其他基本都为00H。***检查下错误的地方好了,或者按STK,单步追踪,发现错误在哪,或者设置断点。
3、单片机运行出错,说明程序有错误,必须查出来修改的,不能就这样错下去吧。程序陷入死循环,这是人为的造成的,要避免写出死循环程序。如何来摆脱困境?很简单,查出程序错误,加以修改,改掉死循环程序。
4、单片机有自动的复位功能,叫做看门狗,在正常工作情况下,单片机每隔一段时间就会给看门狗一个指令,叫做喂狗,如果程序运行出错,就不会进行喂狗,则看门狗就将单片机复位。
单片机流水灯不能循环
uchar***i;for(i=7;i=0;i--){***PORTA=PORTA|BIT(i);因为i是无符号字符型变量。
RIGHT.请注意。你的第一句是什么。又把R1赋值为8了,那么R1就一直是7,8,7,8。了。你可以吧MOV***R1***,#08H移到RIGHT的前面。程序是一句句来的,单片机执行的RIGHT。所谓左移。
for循环三次后,执行while(1);***,这是一条死循环语句,相当于暂停指令,停止在此处。因单片机没有暂停指令,只好用这行语句代替了。如果3次后,需要保持亮或灭,可以换一下:led=1;led=0;这两行就行了。
...感觉一直在中断程序里面门都进不了主循环。
1、单片机最好不要直接寄存器的值赋给寄存器,对串口接收中断必须将缓存器数据读取出来才能清空。另外main函数中while(1)当中要作长延时,不然数据看不到你从串口助手发送后,单片机返回的数据,你尝试一下,不能保证一定可以。
2、每隔50ms中断一次,看起来,就像总是在中断里面。
3、RET***在主程序和中断程序中,分别使用不同的延时子程序,就好了。
单片机程序循环运行不了
你的延时函数第一个J循环后面不要分号,不然造成没有嵌套,变成两个单独循环,时间过短。
你这种delay的延时需要根据具体的指令数和指令周期以及晶振频率还有***分频系数来定。建议使用定时器中断定时。如果你采用的是小模式编译(一般默认也是小模式),那么你的delay函数***执行一个周期需要10个时钟周期。
你还可以设置time[]={3,2,4,8}***,由于300和200相差不是很大,在按加速按钮第一下时偶尔正常,偶尔卡住。
51单片机怎么跳出死循环,复位
1、单片机有五种常用的复位方法:上电制动复位,注意:只要电源的的上升时间不超过1ms,就可以实现自动上电复位。软件复位,注意:复位信号保持时间是编程人员预定的时间。
2、您好!单片机实现复位操作的方式有多种。一种常见的方式是通过外部复位电路来实现复位功能。这种方式通常是将一个复位按钮或复位开关与单片机的复位引脚相连,当按下复位按钮时,复位引脚会被拉低,从而触发单片机的复位操作。
3、chdata(temp);***函数里面需要有退出的条件。否则就出不来了。最好在主程序中(通过标志位)调用这个函数,不要在中断中调用。
4、有WATCHDOG的当然没有问题,用它就可以处理了。没有狗的可以用定时器来模拟,当定时器计数值超过阀值时强制复位***手动复位。
5、加看门狗电路和喂狗程序。喂狗程序放置得当,可以使飞走的程序复位,从头开始执行。
本文转载自互联网,如有侵权,联系删除