你好!欢迎来到 !
语言
当前位置: 首页>> 技术中心>> 单片机入门>> 51单片机软件复位

51单片机软件复位

关键字: 单片机复位 作者:admin 来源:不详 发布时间:2018-05-08 浏览:3

我们知道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
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;
}
}

编辑:admin 最后修改时间:2019-08-05

联系方式

0755-82591179

传真:0755-82591176

邮箱:vicky@yingtexin.net

地址:深圳市龙华区民治街道民治大道973万众润丰创业园A栋2楼A08

Copyright ? 2014-2023 All Rights Reserved.粤ICP备14043402号-4

Baidu
map