如何控制复位时不被初始化为0
本帖最后由 一匹狼 于 2015-5-4 17:43 编辑C51的启动代码把片内RAM中00H~7FH单元的内容清零
IDATALEN EQU 80H
IF IDATALEN <> 0
MOV R0,#IDATALEN - 1
CLR A
IDATALOOP: MOV @R0,A
DJNZ R0,IDATALOOP
ENDIF
为了判断冷、热启动,我需要在特定单元分别写入0xA5、0x5A,
有如下两者解决方案:
1、编译器设置
2、修改启动代码
比较倾向于修改编译器设置,请问在Keil中如何实现热启动时不对其初始化为0?
17:45-2015.05.04修改原因:
如果改启动代码,比如
IDATALEN EQU 70H
直接编译就ok了吗,还需要其他操作不?
51有热启动这个概念吗? dz20062008 发表于 2015-5-4 17:42
51有热启动这个概念吗?
有的,按键复位或看门狗复位,复位后,RAM的内容都没有改变
一匹狼 发表于 2015-5-4 17:48
有的,按键复位或看门狗复位,复位后,RAM的内容都没有改变
那样你这问题不就是解决了么? 本帖最后由 一匹狼 于 2015-5-4 18:10 编辑
dz20062008 发表于 2015-5-4 17:54
那样你这问题不就是解决了么?
可能我没说明白,复位后要使得片内RAM的内容保持不变,否则会使得热启动标志清零
现在要做的是修改启动代码或者使得该特定单元复位后不会初始化为0x00或0xFF 本帖最后由 xintao 于 2015-5-4 19:36 编辑
1.用KEIL编写51程序好像不用启动文件也可以吧?记得以后写的程序都是没加启动文件,这样程序估计是直接从MAIN启动的,应该就跳过内存初始化了吧(没有实际验证过)。
2.如果第一步行不通,那就修改启动文件吧,把内存初始化那一段汇编跳过去。
3.新型的51单片机应该带复位标志寄存器了,比如STC的应该就有吧,可以去看看。
这一段应该是初始化各种存储器的,把对应的哪 一段删掉,应该就不会初始化你的内存了。
STARTUP1:
IF IDATALEN <> 0
MOV R0,#IDATALEN - 1
CLR A
IDATALOOP: MOV @R0,A
DJNZ R0,IDATALOOP
ENDIF
IF XDATALEN <> 0
MOV DPTR,#XDATASTART
MOV R7,#LOW (XDATALEN)
IF (LOW (XDATALEN)) <> 0
MOV R6,#(HIGH (XDATALEN)) +1
ELSE
MOV R6,#HIGH (XDATALEN)
ENDIF
CLR A
XDATALOOP: MOVX @DPTR,A
INC DPTR
DJNZ R7,XDATALOOP
DJNZ R6,XDATALOOP
ENDIF
IF PPAGEENABLE <> 0
MOV PPAGE_SFR,#PPAGE
ENDIF
IF PDATALEN <> 0
MOV R0,#LOW (PDATASTART)
MOV R7,#LOW (PDATALEN)
CLR A
PDATALOOP: MOVX @R0,A
INC R0
DJNZ R7,PDATALOOP
ENDIF 我都没有听明白楼主想说什么~~~~~~~~~~~~~~~` C语言要修改启动代码或定义非初始化变量,手动清零,汇编的话初始一个RAM的值,上电就判断这个值是否为自己写的值,不是的话就全部初始化变量, bccuje_love 发表于 2015-5-4 21:16
C语言要修改启动代码或定义非初始化变量,手动清零,汇编的话初始一个RAM的值,上电就判断这个值是否为自己 ...
让指针指向不被初始化的单元(启动代码只初始化0x00~0xFF单元):
unsigned char idata *StartP = (unsigned char *)0xFF;
*StartP = 0xA5;
*( StartP - 1 ) = 0x5A;
这两单元会不会被编译器分配给其他变量使用?
你说的非初始化变量怎么定义 C语言的话的却比较麻烦,汇编就是不用就不会改变了。 一匹狼 发表于 2015-5-5 09:14
让指针指向不被初始化的单元(启动代码只初始化0x00~0xFF单元):
这两单元会不会被编译器分配给其他变 ...
PIC的是persistent unsigned int,前面加persistent 本帖最后由 一匹狼 于 2015-5-7 16:57 编辑
//把热启动标志写入片内RAM,并把启动代码的初始化部分全部注释
xintao 发表于 2015-5-4 19:24
1.用KEIL编写51程序好像不用启动文件也可以吧?记得以后写的程序都是没加启动文件,这样程序估计是直 ...
谢谢~
页:
[1]