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

如何使用单片机C语言实现复位,第1张

可以使用下面的程序跳到0000H实现软复位,下面的程序实际上是一个函数指针,指针指向了0000H地址。

((void

(code

*)

(void))

0x0000)

()

下面的例子将实现软件自复位void

reset

(void)

{

((void

(code

*)

(void))

0x0000)

()

}

void

main

(void)

{

reset

()

}

你可能注意到以上的软复位程序并不能清除8051的中断系统和某些8051的外围设备,当您在中断程序中调用上面的软件复位程序后,中断将再不能触发。因此,以上的软复位程序不能在中喊滑高断子程序中调用。

下面的小段汇编函数可以在中断程序或主郑尺程序中调用,该函数将0x0000压栈,然后通过“RETI”出栈,这将清除中断环境并让程序从0000H重新开始运行。

?PR?RESET

SEGMENT

CODE

RSEG

?PR?RESET

C

prototype:

void

reset

(void)

PUBLIC

reset

reset:

POP

ACC

pop

return

address

POP

ACC

CLR

A

push

0

as

new

PUSH

ACC

return

address

to

stack

PUSH

ACC

RETI

execute

return

of

interrupt

END

以上程序让喊在选择bank

0寄存器组时工作良好,假如选择的不是bank0寄存器组,那么可能无法获得预料的结果。你应该在以上的程序或启动代码中加上“MOV

PSW,

#0”来选择bank

0寄存器组。

以上文章由龙啸九天翻译自KEIL

FAQ,可能有疏漏,欢迎提出。

程序控制的软件复位方法

微处理器复位方法:

用硬件引脚RESET的复位方法;

用看门狗的复位方法;

自己程序控制的复位方法(本文方法,叫软件复位)。

软件复位实现方法

首先声明一个函数指针,指向复位后要开始执行指令的位置:

void (*app_start)(void) = 0x0000

可以根据具体微处理器复咐脊岩位后的位置,修改后边的地址。

之后,在自己的程序中想复位的地方调用app_start()也就是跳到0x0000位置执行指令。

可以根据不同微处理器复位的地址,修改上边的地址(0x0000)。实现上你可以跳到任何位置执行,或调用函数执行。

实例测试

以下以Arduino为开发环境来测试。注意:在AVR微处理器中,为了使Arduino复位时不再进入引导区,使AVR设置BOOTRST设置为1。

使用函数指针复位方法如下,你能想象到下边的程序会使LED灯闪亮吗?

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

/衡御//0. 引脚定义

#define LED_PIN 13 //定义LED引脚为13号数据引脚(DIG13)

static void (*reset_this_CPU)(void) = 0x0000//野瞎 ***复位本CPU函数指针

///1. 初始化

void setup() {

pinMode(LED_PIN, OUTPUT)// 初始化DIG13为输出

digitalWrite(LED_PIN, HIGH)//DIG13输出高电平

delay(1000)//延时1秒

digitalWrite(LED_PIN, LOW) //DIG13输出低电平

delay(1000)//延时1秒

reset_this_CPU()//***跳到0x0000地址指针,也就是复位

}

///2. 循环

void loop() {

//此处什么也没有啊!

}

结论

用本方法,可以用软件方式进行复位,也可以用这个函数指针的方法调用任何函数。

软派冲猜件复位

软件复位就是用一系判散列指令来模仿硬件复位功能。软件复位是软件陷阱和软件看门狗后续必须做的工作。在软件复位时,首先要清除中断激活标志。在所有指令中,只有RETI能清除中断激活标志。总之,干扰无一定之规,解决的方法也是多种多样的,一般可按下述原则解决:硬件隔离,软件排除,必要时软硬兼施。[1]

首先解决电源干扰,系统安装时注意接地,采样通道规范化设计,输出通道遇强电加光电隔离,再辅之以软件抗干扰措施,一般即能消除干扰,使系统正常运行。现场调试时一旦遇到问题,要认真仔细地分析造成干扰的原因,采用相应对策,问题总是可以解决的。

纠错

参考资料

复位键

复位键是存在于电脑主机、笔记本电脑、智能手机、智能PDA或其它电子产品的键位,又叫重启键,即RESET。因其功能原因,位置一般比较隐蔽,不容易碰触。

台式电脑的复位键在机箱上一般在启动键附近,笔记本电脑的复位键在键盘顶。在电脑键盘上同时按下CTRL+ALT+DEL也可以复位,为软复位,又叫热启动。[1]

中文名尘型

复位键

外文名

RESET

别称

重启键

应用

电脑主机、笔记本、智能手机等


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8284850.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存