tag 标签: 软件复位

相关博文
  • 热度 18
    2013-12-24 17:14
    1122 次阅读|
    0 个评论
     用C51实现软件复位   下面的例子将实现软件自复位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寄存器组。            
  • 热度 17
    2013-1-8 12:01
    1345 次阅读|
    0 个评论
    《C缺陷和陷阱》讲过的一种方法:  ( *(void (*)()) 0)(); //跳转到0地址执行 解析:  1.void (*p_fun)(void); //声明函数指针 2. void (*)(void)函数指针类型,( void (*)(void)) 0,将产量0强制转换成函数指针; 3.(*( void (*)(void))0)();引用函数指针; 另外一种使用方法:  函数指针调用可以略写*强制转换,例如:void (*p_fun)(void); 调用时  *p_fun();  等同p_fun(); 所以两外一种书写方法:((void (*) (void))0)();
相关资源
  • 所需E币: 5
    时间: 2020-1-4 12:55
    大小: 238.58KB
    上传者: 2iot
    设计了基于FPGA并与MCS-51单片机指令兼容的高效微处理器内核.本内核改进了传统MCS-51单片机的体系结构,使每个机器周期只需一个时钟周期,提高了指令的执行效率.同时增加了硬件看门狗及软件复位功能,提高了系统的可靠性和抗干扰能力.本内核通过了功能仿真并下载到FPGA中成功运行.基于FPGA晌微处理器内核设计与实项宋学瑞,王英茂(中南大学信息科学与工程学院电子科学与技术系,湖南长沙410083)摘要:设计了基于FPGA并与MCS一51单片机指令兼容的高效微处理器内核。本内核改进了传统MCS一51单片机的体系结构,使每个机器周期只需一个时钟周期,提高了指令的执行效率。同时增加了硬件看门狗及软件复位功能,提高了系统的可靠性和抗干扰能力。本内核通过了功能仿真并下栽到FPGA中成功运行。关键词:FPGA微处理器内核看门狗MCS一51与传统投片实现ASIC相比…,FPGA具有实现速度了指令执行效率和抗干扰能力。快、风险小、可编程、可随时更改升级等一系列优点,因1系统设计而得到了越来越广泛的应用。MCS一5l应用时间长、范1.1模块划分围广,相关的软硬件资源丰富,因而往往在FPGA应……