电工技术基础_电工基础知识_电工之家-电工学习网

欢迎来到电工学习网!

51单片机软件复位

2017-04-07 12:23分类:PLC基础知识 阅读:

 

咱们知道51单片机能够把数据放在程序存储器里边,也即是程序和数据没有实质区别,都是一些特定的数据。假定咱们将一段程序,以数组数据的办法存储在程序存储器里边,那么是不是也能够施行呢?答案是必定的。

言归正传,先来看看这个数组数据 0xe4,0xc0,0xe0,0xc0,0xe0,0x22,中Keil的汇编窗口看出,它正本是四条汇编句子:

CLR A ;编译后为 0XE4
PUSH ACC ;编译后为 0XC0 0XE0
PUSH ACC ;编译后为 0XC0 0XE0
RET ;函数回来 编译后为 0X22能够看出,正本这即是51单片机的汇编复位指令。

正本这儿仅仅C复位代码的写法丑陋算了,rst是一个指向程序存储器的字节指针,咱们把它改换为指向回来为空的函数的指针,回来为空的函数指针的格局为:void (*)(),这个表达式比照凌乱因运算符优先级联络,用括号括号括起来,就成了(void (*)())rst,这么rst就成函数指针了,再来看看求函数指针的通常格局(*p)(),把p代换成(void (*)())rst括起来就成了(*((void (*)())rst))(),这说将这个复位的悉数面纱掀开了。

以下为查验,验证程序:

#include <AT89X51.h>
main()
{
unsigned char code rst[6]={0xe4,0xc0,0xe0,0xc0,0xe0,0x22};//界说一个code类型的数组,必定要为code类型
while(1)//循环查验
{
TMOD=5;//查验用可所以任何语名
TI=1;
P1=0;
P1=1;
P2=2;
P3=3;
(*((void (*)())rst))();//复位
SCON=0x50;
}
}

上一篇:想把握单片机,怎样下手?

下一篇:单片机接连体系应具有的功用

相关推荐

电工推荐

    电工技术基础_电工基础知识_电工之家-电工学习网
返回顶部