当前位置:首页 » 编程语言 » 单片机c语言复位
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

单片机c语言复位

发布时间: 2022-01-18 00:41:50

1. 51单片机如何实现软件复位系统(c语言),谢谢

单片机实现软件复位(软复位)的方法及讨论

单片机实现软件复位(软复位)的方法及讨论

(天堂雨林博客blog.sina.com.cn/acer收集整理)

单片机软复位有什么好的方法?如从机收到复位命令(软件命令),程序怎么使机器复位?虽然要使软件始终处于可控状态,最好不要用"复位",因为复位是纯硬件过程,软件是不可控的.但是我们还是要讨论方法,一般流传的方法如下:

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) ();
}
在需要软件复位的地方使用语句:
soft_reset();
一般可实现软件复位。

办法3:用软件实现的硬复位。需要牺牲一个单片机引脚,且增加了单片机外部电路构造的复杂性,很不可取。

办法4:类似办法3,同样需要牺牲一个单片机引脚,且增加了单片机外部电路构造的复杂性,很不可取。但不能把它单单地当成是复位,应该叫上电复位。

办法5:Atmel 89C不带内狗,S的有内狗,只是一条指令就行。如STC的单片机有软件复位指令,即ISP_CONTR,地址在0E7H 单元(即str ISP_CONTR=0xE7),MOV ISP_CONTR,#00100000B(C语言为ISP_CONTR=0x20),内狗也是一条指令MOV WDT_CONTR,#00111100B!
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实现也不失为一种好方法

2. c语言独立按键控制程序复位

第一,直接使用硬件来复位,将原本要接到P3.3的电平接到硬件复位上,当然需要一定的设计
第二,还是硬件,直接将此电平接到看门狗电路上
第三,软件,前提是你的单片机支持软件复位(包括直接复位和内置的看门狗)

3. 如何使用单片机C语言实现复位

楼主的意思只是要求复位到装置的初始状态,而不是单片机复位。这仅仅需要对所有输出口转换到规定的初始状态即可,这在C编程时采用位操作即可,例如置位或者清除位操作。

4. STC89C51 单片机复位

该单片机正常工作时复位端电压应保持低电平状态,复位时给复位端加上一个短暂的高电平即可使单片机程序复位。该复位电路的工作原理是,电源通过电解电容再通过电阻串联到地,电容两段并联一按键开关,正常工作时电容隔断电源电压,单片机复位端相当于通过电阻接地。因电路中无电流,所以复位端电压为0伏。当运行过程中需要复位时,通过拨动按键开关,把电容直接短路,电源电压加在电阻两端,单片机复位端即可过得一个短暂的高电平从而复位。松开按键,复位结束,单片机即可正常跑马。上电时,电解电容充电,串联电路中有电流流过,电阻两端获得一个电压,也可使单片机复位端为高电平而复位。所以复位包括上电复位和手动复位。

5. STC89C52单片机C程序复位的问题

MOV IAP_CONTR, #20H


IAP_CONTR = 0X20; 就可以了

6. 怎么用C语言实现单片机复位

void (*reset)(void)=0x0000;

在需要复位的地方调用: reset();

7. 单片机(C语言)复位电路初始状态值是多少初始值是怎么得出来的复位电路的工作原理时钟电路的工作

摘要 您好,这个得看你的电源是多少。

8. 单片机定时器用C语言程序如何复位

那要看是在什么程序中用的,你的定时程序是查询方式的话你只要把TR0或TR1等于零即可,如果是中断的话,你可以关中断,其实你可以在任何程序中用TR0=0;或TR1=0来关定时器。关掉后,定时器值自动回到0;无须刻意复位。

9. 因为单片机有复位键,那这个复位键的作用是什么

复位是让单片机做好准备,程序从头开始运行。

10. 基于单片机C语言中复位的函数

一般是不可能的,你换个思路想,怎样可以把这个问题解决,而不要去想怎样复位。你应该是某些变量值位了,没有清零吧,试一下把写法稍微换一下。据我所知是没有软件复位的。给你一个思路吧,你可以吧八路都写到中断里面,进中断后在判断是哪一路按下去了,这样是不会死锁的,又或者你另外再加一个键复位,不过这个不是重启键哦,是把变量初始化的键