水电电工知识
电工知识|51单片机软件复位
2017-01-20  浏览:17
水电之家讯:我们知道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;

}

}水电之家为您提供最全面的管材,管件,水电,电线,电工,管材水电品牌的装修知识点和各种管材水电的导购与在线购买服务,拥有最便宜的管材水电价格和最优质的售后服务,每天都有秒杀的抢购活动哦!敬请登陆水电之家:http://shuidian.jc68.com/
更多»您可能感兴趣的文章:
更多»有关 水电 的产品:
  • 水电电工资讯
  • 发表评论 | 0评
  • 评论登陆
  • 移动社区 天花之家 木门之家 灯具之家 铁艺之家 幕墙之家 五金头条 楼梯头条 墙纸头条 壁纸头条 玻璃头条 老姚之家 灯饰之家 电气之家 全景头条 照明之家 防水之家 防盗之家 区快洞察 建材 枣庄建材 临沂建材 南昌建材 上饶建材 抚州建材 宜春建材 吉安建材 赣州建材 鹰潭建材 新余建材 九江建材 萍乡建材 景德镇陶瓷 石家庄建材 衡水建材 廊坊建材 沧州建材 承德建材 建材之家 企业之家 720全景
    (c)2015-2017 Bybc.cn SYSTEM All Rights Reserved