📄 node.s51
字号:
MOVX @DPTR,A
// 125 data[PACKET_INDEX_Y_H] = HIBYTE(y);
MOV DPTR,#(y + 1)
MOVX A,@DPTR
PUSH A
CFI CFA_SP SP+-6
MOV A,#0x3
LCALL ?XSTACK_DISP0_8
POP A
CFI CFA_SP SP+-5
MOVX @DPTR,A
// 126 data[PACKET_INDEX_Y_L] = LOBYTE(y);
MOV DPTR,#y
MOVX A,@DPTR
PUSH A
CFI CFA_SP SP+-6
MOV A,#0x4
LCALL ?XSTACK_DISP0_8
POP A
CFI CFA_SP SP+-5
MOVX @DPTR,A
// 127 data[PACKET_INDEX_Z] = z;
MOV DPTR,#z
MOVX A,@DPTR
PUSH A
CFI CFA_SP SP+-6
MOV A,#0x5
LCALL ?XSTACK_DISP0_8
POP A
CFI CFA_SP SP+-5
MOVX @DPTR,A
// 128
// 129 DataRequest(destAddr, PACKET_INDEX_Z + 1, data);
; Setup parameters for call to function DataRequest
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV R4,DPL
MOV R5,DPH
MOV R1,#0x6
MOV DPTR,#(DataRequest & 0xffff)
MOV A,#((DataRequest >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 130 }
MOV A,#0x6
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 XSP16+0
POP DPH
CFI DPH0 SameValue
CFI CFA_SP SP+-4
POP DPL
CFI DPL0 SameValue
CFI CFA_SP SP+-3
LJMP ?BRET
CFI EndBlock cfiBlock3
// 131
// 132 /******************************************************************************
// 133 *
// 134 * Send a text string to the PC interface, input as printf.
// 135 * The string will be shown in the packet sniffer.
// 136 ******************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 137 void SendText(char *format, ...){
SendText:
CFI Block cfiBlock4 Using cfiCommon0
CFI Function SendText
FUNCALL SendText, vsprintf
LOCFRAME XSTACK, 142, STACK
ARGFRAME XSTACK, 142, STACK
FUNCALL SendText, DataRequest
LOCFRAME XSTACK, 140, STACK
ARGFRAME XSTACK, 140, STACK
MOV A,#-0xa
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 10)
; Saved register size: 10
; Auto size: 130
MOV A,#0x7e
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 140)
// 138 BYTE sendBuffer[128];
// 139 va_list ap;
// 140 UINT8 nbrOfChars;
// 141
// 142 va_start(ap, format);
MOV A,#-0x74
LCALL ?XSTACK_DISP0_8
MOV R0,DPL
MOV R1,DPH
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV A,R0
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
// 143 // vsprintf is a variant of sprintf which taking a va_list as arguemnt */
// 144 nbrOfChars = vsprintf((char*)&sendBuffer[2], format, ap);
; Setup parameters for call to function vsprintf
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV ?V0 + 0,DPL
MOV ?V0 + 1,DPH
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 142)
MOV A,R2
MOV R4,A
MOV A,R3
MOV R5,A
MOV A,#0x6
LCALL ?XSTACK_DISP0_8
MOV R2,DPL
MOV R3,DPH
MOV DPTR,#(vsprintf & 0xffff)
MOV A,#((vsprintf >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,#0x2
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 140)
// 145 va_end(ap);
// 146
// 147 sendBuffer[0] = PACKET_TYPE_DEBUG_TEXT;
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
MOV A,#0x30
MOVX @DPTR,A
// 148 sendBuffer[1] = nbrOfChars + 1;
MOV A,#0x1
ADD A,R2
PUSH A
CFI CFA_SP SP+-1
MOV A,#0x3
LCALL ?XSTACK_DISP0_8
POP A
CFI CFA_SP SP+0
MOVX @DPTR,A
// 149 DataRequest(PC_SHORT, nbrOfChars + 3, sendBuffer);
; Setup parameters for call to function DataRequest
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
MOV R4,DPL
MOV R5,DPH
MOV A,#0x3
ADD A,R2
MOV R1,A
MOV R2,#0x34
MOV R3,#0x12
MOV DPTR,#(DataRequest & 0xffff)
MOV A,#((DataRequest >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 150 }
MOV A,#-0x7e
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 10)
LJMP ?Subroutine0 & 0xFFFF
CFI EndBlock cfiBlock4
// 151
// 152
// 153 /******************************************************************************
// 154 *
// 155 * Add _msec_ number of milliseconds to sleep timer.
// 156 * Using 33 Hz insted of 32.768 Hz for the RC osc.
// 157 ******************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 158 void AddToSleepTimer(UINT16 msec)
AddToSleepTimer:
CFI Block cfiBlock5 Using cfiCommon0
CFI Function AddToSleepTimer
// 159 {
MOV A,#-0x10
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V7 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-15)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-16)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 16)
; Saved register size: 16
; Auto size: 4
MOV A,#-0x4
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 20)
// 160 UINT32 sleepTimer;
// 161
// 162 sleepTimer = ST0;
MOV A,0x95
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX @DPTR,A
INC DPTR
CLR A
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
// 163 sleepTimer |= (UINT32)ST1 << 8;
MOV ?V0 + 0,0x96
MOV ?V0 + 1,A
MOV ?V0 + 2,A
MOV ?V0 + 3,A
MOV A,#0x8
MOV R0,#?V0 + 0
LCALL ?L_SHL
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV R0,#?V0 + 0
LCALL ?L_IOR_TO_X
// 164 sleepTimer |= (UINT32)ST2 << 16;
MOV ?V0 + 0,0x97
MOV ?V0 + 1,#0x0
MOV A,#0x10
MOV R0,#?V0 + 0
LCALL ?L_SHL
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV R0,#?V0 + 0
LCALL ?L_IOR_TO_X
// 165
// 166 sleepTimer += ((UINT32)msec * (UINT32)33); // 32 768 kHz ~ 33 each mSecond
MOV ?V0 + 0,R2
MOV ?V0 + 1,R3
MOV ?V0 + 2,#0x0
MOV DPTR,#__Constant_21
MOV R0,#?V0 + 4
LCALL ?L_MOV_X
MOV R0,#?V0 + 0
MOV R1,#?V0 + 4
LCALL ?L_MUL
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV R0,#?V0 + 0
LCALL ?L_ADD_TO_X
// 167
// 168 if(sleepTimer > 0x00FFFFFF){
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
PUSH DPL
CFI CFA_SP SP+-1
PUSH DPH
CFI CFA_SP SP+-2
MOV DPTR,#__Constant_1000000
MOV R0,#?V0 + 0
LCALL ?L_MOV_X
POP DPH
CFI CFA_SP SP+-1
POP DPL
CFI CFA_SP SP+0
MOV R0,#?V0 + 0
LCALL ?UL_GT_X
JC ??AddToSleepTimer_0
// 169 sleepTimer -= 0x00FFFFFF;
MOV DPTR,#__Constant_ff000001
MOV R0,#?V0 + 0
LCALL ?L_MOV_X
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV R0,#?V0 + 0
LCALL ?L_ADD_TO_X
// 170 }
// 171
// 172 ST2 = (UINT8)(sleepTimer >> 16);
??AddToSleepTimer_0:
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV R0,#?V0 + 0
LCALL ?L_MOV_X
MOV A,#0x10
MOV R0,#?V0 + 0
LCALL ?UL_SHR
MOV A,?V0 + 0
MOV 0x97,A
// 173 ST1 = (UINT8)(sleepTimer >> 8);
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV R0,#?V0 + 0
LCALL ?L_MOV_X
MOV A,?V0 + 1
MOV 0x96,A
// 174 ST0 = (UINT8) sleepTimer;
MOV A,?V0 + 0
MOV 0x95,A
// 175 }
MOV A,#0x4
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 16)
MOV R7,#0x8
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock5
COMMON INTVEC:CODE:ROOT(0)
ORG 43
`ST_IRQ??INTVEC 43`:
LJMP (ST_IRQ)
RSEG XDATA_I:XDATA:NOROOT(0)
__Constant_21:
DS 4
REQUIRE `?<Initializer for __Constant_21>`
REQUIRE __INIT_XDATA_I
RSEG XDATA_ID:CODE:NOROOT(0)
`?<Initializer for __Constant_21>`:
DD 33
RSEG XDATA_I:XDATA:NOROOT(0)
__Constant_1000000:
DS 4
REQUIRE `?<Initializer for __Constant_1000000>`
REQUIRE __INIT_XDATA_I
RSEG XDATA_ID:CODE:NOROOT(0)
`?<Initializer for __Constant_1000000>`:
DD 16777216
RSEG XDATA_I:XDATA:NOROOT(0)
__Constant_ff000001:
DS 4
REQUIRE `?<Initializer for __Constant_ff000001>`
REQUIRE __INIT_XDATA_I
RSEG XDATA_ID:CODE:NOROOT(0)
`?<Initializer for __Constant_ff000001>`:
DD 4278190081
END
// 176
// 177 #ifdef CC2430EB
// 178 /******************************************************************************
// 179 *
// 180 * Print X and Y on LCD display, can only be used on SmartRF04EB
// 181 ******************************************************************************/
// 182 void PrintXY(void){
// 183 char s[16];
// 184 sprintf(s, "X: %d.%d", UINT16_2_INT(x), FRAC_2_TO_DEC(x));
// 185 lcdUpdateLine(LINE1, s);
// 186 sprintf(s, "Y: %d.%d", UINT16_2_INT(y), FRAC_2_TO_DEC(y));
// 187 lcdUpdateLine(LINE2, s);
// 188 }
// 189 #endif
//
// 592 bytes in segment BANKED_CODE
// 3 bytes in segment INTVEC
// 78 bytes in segment NEAR_CODE
// 3 bytes in segment SFR_AN
// 12 bytes in segment XDATA_I
// 12 bytes in segment XDATA_ID
// 155 bytes in segment XDATA_Z
//
// 670 bytes of CODE memory (+ 15 bytes shared)
// 0 bytes of DATA memory (+ 3 bytes shared)
// 155 bytes of XDATA memory (+ 12 bytes shared)
//
//Errors: none
//Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -