|
|
| | -文章搜索 - 最新文章 - | |
第2719篇:怎样在我的源程序中实现软件复位? |
| 发布时间:2006年8月2日 点击次数:1417 |
| 来源: 作者: |
问: 怎样在我的源程序中实现软件复位? 答: 您可以使用下面的程序跳到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寄存器组。 |
|
|
|
|
[单片机] 相关文章: c51控制双色点阵左移显示与右移显示.简介: ;;c51控制双色点阵左移显示与右移显示.;; ;;;程序显示的为6;; ORG 0 AJMP MAIN MAIN: MOV 30H,#00H MOV 31H,#00H MOV 32H,#0FEH MOV 33H,#92H MOV 34H,#92H MOV 35H,#0F2H MOV 36H,#00H MOV 37H,#00H mov 2fh,#7fh...... 用PIC写高效的位移操作 一个高效的模拟SPI的读写函数 PIC8位在PICC中的数据类型 转:CRC算法原理及C语言实现 |
|
|
|