可以定义一个指向复位向量(0x0000)的函数指针,然后在C程序中需要软复位的地方调用该函数:
((void (code *) (void)) 0x0000) ();
例如,以下程序不断地复位:
void reset (void)
{
((void (code *) (void)) 0x0000) ();
}
void main (void)
{
reset ();
}
也许你会注意到前面所提到的复位程序并不恢复8051的中断系统,它也不去复位任何的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
若调用该复位过程时选择的不是寄存器组0,程序可能达不到期望的结果。这时应该在上面的汇编过程中或者在启动代码中添加一条选择寄存器组0的指令:
MOV PSW, #0
关键字:C51 软复位
引用地址:
在C51中如何实现软复位?
推荐阅读最新更新时间:2024-03-16 15:25
C51中的关键字
关键字 用 途 说 明 auto 存储种类说明 用以说明局部变量,缺省值为此 break 程序语句 退出最内层循环 case 程序语句 Switch语句中的选择项 char 数据类型说明 单字节整型数或字符型数据 const 存储类型说明 在程序执行过程中不可更改的常量值 continue 程序语句 转向下一次循环 default 程序语句 Switch语句中的失败选择项 do 程序语句 构成do..while循环结构 double 数据类型说明 双精度浮点数 else 程序语句 构成if..else选择结构 enum 数据类型说明 枚举 extern 存储种类说明 在其他程序模块中说明了的全局变量 flost 数据类型说明 单精度
[单片机]
技巧 3 -- Keil C51 中 P1.0、P1^0、P1_0 的区别
以 Keil uVision2 为例,在安装路径下的 \ C51 \ INC 文件夹中,打开 reg52.h 头文件,可以看到: #ifndef __REG52_H__ #define __REG52_H__ /* BYTE Registers */ sfr P0 = 0x80; sfr P1 = 0x90; sfr P2 = 0xA0; sfr P3 = 0xB0; sfr PSW = 0xD0; sfr ACC = 0xE0; 其中 sfr 关键字是 C51 特有的关键字,它用来定义变量和地址的对应关系。如 sfrP0 = 0x80,意思就是:P0 口的地址是 0x80。(0x
[单片机]
一种基于51单片机的多任务机制及应用
引言 传统的单片机程序一般采用单任务机制,单任务系统具有简单直观、易于控制的优点。然而由于程序只能按顺序依次执行,缺乏灵活性,只能使用中断函数实时地处理一些较短的任务,在较复杂的应用中使用极为不便。嵌入式多任务操作系统的出现解决了这个问题。在多任务系统中,可以同时执行多个并行任务,任务之间可以相互跳转。但是嵌入式操作系统在提供强大功能的同时,也带来了代码量大、结构复杂、对硬件要求较高、开发难度大且成本高等问题。而很多时候只需要实现简单的多任务操作就可以满足实际需要,本文设计的这种简单的多任务机制,在只增加极少量C语言代码的前提下,不需使用汇编,无需对原本的程序进行大改动,就可以实现多任务操作。 实时操作系统RTOS的
[单片机]
C51程序设计嵌套设计
C语言的基本规则是有限的,可把这有限的规则组合与嵌套起来,就实现了多种多样的功能。 常量与变量本质是值,不同的变量只是存储结构的不通。表达式最终也是一个值,所以可以通用,可以嵌套。 指针变量存放的是地址。数组名不是变量,而是地址常量。数组是相同结构的变量的集合。数组指针与数组名可以通用。 从本质上来说,没有多维数组的存在。因为c语言允许数组元素可以为任何类型的对象,可以是整型变量,字符型变量,结构体变量,当然也可以是数组。所以,多维数组无非就是一维数组的嵌套而已。掌握了这一点,就可以理解二维数组名可以看作是指向指针常量(一维数组名)的指针常量。就这样一路指下去,一直指到底才是变量名。 结构体(structure),与数组不同的地方
[单片机]
基于Keil C51集成开发环境的单片机教学
一、引言 单片机教学改革与实践是为了更好地使学生将所学到的单片机理论知识转化为适应社会发展和就业需要的实际能力的一种教学活动。如今,职业教育的主要任务之一是为社会提供“既懂理论,又懂实践,有一定的研发经验和动手能力的应用型人才”,这种人才当遇到一个开发项目时知道从哪里入手做和怎样做。因此,我们的教学活动就要加强学生实用能力的培养。对于专门培养应用型人才的高职高专院校来讲,更需要重视的是教学中的实际操作训练。 与本科院校相比,离职院校应主要培养应用型人才。高职学院生源质量与本科院校有一定的差距,采用传统的单片机教学方式,不根据课程特点与学生特点,只注重教师讲、学生做,在教学实践中是行不通的。在教学过程中教师应和学生建立良好的互信
[单片机]
Keil C51开发系统基本知识1
Keil C51开发系统基本知识 1. 第一节 系统概述 Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。 Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。 下面详细介绍Keil C51开发系统各部分功能和使用。 2. 第二节 Ke
[单片机]
在C51系统上实现YAFFS文件系统
随着NAND Flash存储器作为大容量数据存储介质的普及,基于NAND闪存的文件系统YAFFS(Yet Another Flash File System)正逐渐被应用到各种嵌入式系统中。本文将详细阐述YAFFS文件系统在C51系统上的实现过程。 1 NAND Flash的特点 非易失性闪速存储器Flash具有速度快、成本低、密度大的特点,被广泛应用于嵌入式系统中。Flash存储器主要有NOR和NAND两种类型。NOR型比较适合存储程序代码;NAND型则可用作大容量数据存储。NAND闪存的存储单元为块和页。本文使用的Samsung公司的K9F5608包括2 048块,每一块又包括32页,一页大小为528字节,依次分为2个256
[单片机]
KEIL C51 中 C语言加入汇编语言的使用方法
1.通过使用预处理指令#asm 和#endasm来使用汇编语言。用户编写的汇编语言可以紧跟在#asm之后,而在#endasm之前结束。如下所示: # asm /*汇编源程序*/ # endasm 在#asm和#endasm之间的语句将作为汇编语言的语句输出到由编译器产生的汇编语言文件中。 2.通过使用预处理指令# pragma asm和函数_asm()来使用汇编语言。在程序的开头加上预处理指令#pragma asm,在该预处理指令之前只能有注释和其它预处理指令。 _asm()函数可按以下方式使用。 _asm(汇编语言字符串) 在汇编语言字符串中,可以通过回车和换行符把各个语句分开。
[单片机]