[技术问答] STARTUP.A51 的疑问

[复制链接]
1742|8
 楼主| lomo1316 发表于 2018-11-14 19:15 | 显示全部楼层 |阅读模式
本帖最后由 lomo1316 于 2018-11-14 19:22 编辑

我是N76E003芯片,而
IDATA是固定指前面0x00-0xff的256个RAM,其中前128字节空间直接或间接寻址都可以访问,后128字节空间必须采用间接寻址来访问。
所以有个疑问

STARTUP.A51文件的

IDATALEN        EQU     80H     ; the length of IDATA memory in bytes.

需要如下改吗,改了有什么问题吗

IDATALEN        EQU     100H   

  1. $NOMOD51
  2. ;------------------------------------------------------------------------------
  3. ;  This file is part of the C51 Compiler package
  4. ;  Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
  5. ;------------------------------------------------------------------------------
  6. ;  STARTUP.A51:  This code is executed after processor reset.
  7. ;
  8. ;  To translate this file use A51 with the following invocation:
  9. ;
  10. ;     A51 STARTUP.A51
  11. ;
  12. ;  To link the modified STARTUP.OBJ file to your application use the following
  13. ;  BL51 invocation:
  14. ;
  15. ;     BL51 <your object file list>, STARTUP.OBJ <controls>
  16. ;
  17. ;------------------------------------------------------------------------------
  18. ;
  19. ;  User-defined Power-On Initialization of Memory
  20. ;
  21. ;  With the following EQU statements the initialization of memory
  22. ;  at processor reset can be defined:
  23. ;
  24. ;               ; the absolute start-address of IDATA memory is always 0
  25. IDATALEN        EQU     80H     ; the length of IDATA memory in bytes.
  26. ;
  27. XDATASTART      EQU     0H      ; the absolute start-address of XDATA memory
  28. XDATALEN        EQU     2FFH     ; the length of XDATA memory in bytes.
  29. ;
  30. PDATASTART      EQU     0H      ; the absolute start-address of PDATA memory
  31. PDATALEN        EQU     0H      ; the length of PDATA memory in bytes.
  32. ;
  33. ;  Notes:  The IDATA space overlaps physically the DATA and BIT areas of the
  34. ;          8051 CPU. At minimum the memory space occupied from the C51
  35. ;          run-time routines must be set to zero.
  36. ;------------------------------------------------------------------------------
  37. ;
  38. ;  Reentrant Stack Initilization
  39. ;
  40. ;  The following EQU statements define the stack pointer for reentrant
  41. ;  functions and initialized it:
  42. ;
  43. ;  Stack Space for reentrant functions in the SMALL model.
  44. IBPSTACK        EQU     0       ; set to 1 if small reentrant is used.
  45. IBPSTACKTOP     EQU     0FFH+1  ; set top of stack to highest location+1.
  46. ;
  47. ;  Stack Space for reentrant functions in the LARGE model.      
  48. XBPSTACK        EQU     0       ; set to 1 if large reentrant is used.
  49. XBPSTACKTOP     EQU     0FFFFH+1; set top of stack to highest location+1.
  50. ;
  51. ;  Stack Space for reentrant functions in the COMPACT model.   
  52. PBPSTACK        EQU     0       ; set to 1 if compact reentrant is used.
  53. PBPSTACKTOP     EQU     0FFFFH+1; set top of stack to highest location+1.
  54. ;
  55. ;------------------------------------------------------------------------------
  56. ;
  57. ;  Page Definition for Using the Compact Model with 64 KByte xdata RAM
  58. ;
  59. ;  The following EQU statements define the xdata page used for pdata
  60. ;  variables. The EQU PPAGE must conform with the PPAGE control used
  61. ;  in the linker invocation.
  62. ;
  63. PPAGEENABLE     EQU     0       ; set to 1 if pdata object are used.
  64. ;
  65. PPAGE           EQU     0       ; define PPAGE number.
  66. ;
  67. PPAGE_SFR       DATA    0A0H    ; SFR that supplies uppermost address byte
  68. ;               (most 8051 variants use P2 as uppermost address byte)
  69. ;
  70. ;------------------------------------------------------------------------------

  71. ; Standard SFR Symbols
  72. ACC     DATA    0E0H
  73. B       DATA    0F0H
  74. SP      DATA    81H
  75. DPL     DATA    82H
  76. DPH     DATA    83H



  77.                 NAME    ?C_STARTUP


  78. ?C_C51STARTUP   SEGMENT   CODE
  79. ?STACK          SEGMENT   IDATA

  80.                 RSEG    ?STACK
  81.                 DS      1

  82.                 EXTRN CODE (?C_START)
  83.                 PUBLIC  ?C_STARTUP

  84.                 CSEG    AT      0
  85. ?C_STARTUP:     LJMP    STARTUP1

  86.                 RSEG    ?C_C51STARTUP

  87. STARTUP1:
  88. ;Disable POR
  89.         MOV 0C7H,#0AAH
  90.         MOV 0C7H,#55H
  91.         MOV 0FDH,#5AH
  92.         
  93.         MOV 0C7H,#0AAH
  94.         MOV 0C7H,#55H
  95.         MOV 0FDH,#0A5H

  96. IF IDATALEN <> 0
  97.                 MOV     R0,#IDATALEN - 1
  98.                 CLR     A
  99. IDATALOOP:      MOV     @R0,A
  100.                 DJNZ    R0,IDATALOOP
  101. ENDIF

  102. IF XDATALEN <> 0
  103.                 MOV     DPTR,#XDATASTART
  104.                 MOV     R7,#LOW (XDATALEN)
  105.   IF (LOW (XDATALEN)) <> 0
  106.                 MOV     R6,#(HIGH (XDATALEN)) +1
  107.   ELSE
  108.                 MOV     R6,#HIGH (XDATALEN)
  109.   ENDIF
  110.                 CLR     A
  111. XDATALOOP:      MOVX    @DPTR,A
  112.                 INC     DPTR
  113.                 DJNZ    R7,XDATALOOP
  114.                 DJNZ    R6,XDATALOOP
  115. ENDIF

  116. IF PPAGEENABLE <> 0
  117.                 MOV     PPAGE_SFR,#PPAGE
  118. ENDIF

  119. IF PDATALEN <> 0
  120.                 MOV     R0,#LOW (PDATASTART)
  121.                 MOV     R7,#LOW (PDATALEN)
  122.                 CLR     A
  123. PDATALOOP:      MOVX    @R0,A
  124.                 INC     R0
  125.                 DJNZ    R7,PDATALOOP
  126. ENDIF

  127. IF IBPSTACK <> 0
  128. EXTRN DATA (?C_IBP)

  129.                 MOV     ?C_IBP,#LOW IBPSTACKTOP
  130. ENDIF

  131. IF XBPSTACK <> 0
  132. EXTRN DATA (?C_XBP)

  133.                 MOV     ?C_XBP,#HIGH XBPSTACKTOP
  134.                 MOV     ?C_XBP+1,#LOW XBPSTACKTOP
  135. ENDIF

  136. IF PBPSTACK <> 0
  137. EXTRN DATA (?C_PBP)
  138.                 MOV     ?C_PBP,#LOW PBPSTACKTOP
  139. ENDIF

  140.                 MOV     SP,#?STACK-1
  141. ; This code is required if you use L51_BANK.A51 with Banking Mode 4
  142. ; EXTRN CODE (?B_SWITCH0)
  143. ;               CALL    ?B_SWITCH0      ; init bank mechanism to code bank 0
  144.                 LJMP    ?C_START

  145.                 END



玛尼玛尼哄 发表于 2018-11-14 20:20 | 显示全部楼层
用C语言开发就不用管这个吧?》
xuanhuanzi 发表于 2018-11-14 21:05 | 显示全部楼层
不懂这个怎么修改。
jekey 发表于 2018-11-14 22:41 | 显示全部楼层
那仅仅是上电要清空的ram的长度。看下后面的代码就能明白。
zhuomuniao110 发表于 2018-11-14 23:08 | 显示全部楼层
楼主理解错误了。
jasontu 发表于 2018-11-15 08:38 | 显示全部楼层
IDATALEN        EQU     100h 代码还是用间接定址从99h清除到0h的地址。

108.IF IDATALEN <> 0

109.                MOV     R0,#IDATALEN - 1

110.                CLR     A

111.IDATALOOP:      MOV     @R0,A

112.                DJNZ    R0,IDATALOOP

113.ENDIF

评论

现在理解了,谢谢  发表于 2018-12-21 17:01
jekey 发表于 2018-11-15 11:13 | 显示全部楼层
jasontu 发表于 2018-11-15 08:38
IDATALEN        EQU     100h 代码还是用间接定址从99h清除到0h的地址。

108.IF IDATALEN  0

100h - 1 = 0FFh,可不是99H
zhuomuniao110 发表于 2018-12-21 23:40 | 显示全部楼层
jekey 发表于 2018-11-15 11:13
100h - 1 = 0FFh,可不是99H

haha,你不提一下,我也以为是99呢,忘了是16进制了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

93

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部