📄 si4421.src
字号:
INC A
MOVX @DPTR,A
?C0061:
SJMP ?C0019
?C0020:
; if(k==6000)
; SOURCE LINE # 129
CJNE R6,#017H,?C0023
CJNE R7,#070H,?C0023
; { //nres=0;
; SOURCE LINE # 130
; // delayms(50);
; // nres=1;
; ia442xinit();
; SOURCE LINE # 133
LCALL ia442xinit
; spirevtwobyte();
; SOURCE LINE # 134
LCALL spirevtwobyte
; spisendcommand(0x8288); //电源管理 whole receive crystal on
; SOURCE LINE # 135
LCALL L?0068
; spisendcommand(0xca83); //FIFO COMMAND
; SOURCE LINE # 136
MOV R7,#083H
SJMP ?C0065
; return;
; if(DEBUG) Printf_String("\r\n[msg:]002 si4421's sdo is dead but she can receive");
; SOURCE LINE # 138
; }
; SOURCE LINE # 139
?C0023:
;
; spirevbyte();
; SOURCE LINE # 141
LCALL spirevbyte
; spirevbyte();
; SOURCE LINE # 142
LCALL spirevbyte
; rxdata[i+2]=spirevbyte();
; SOURCE LINE # 143
LCALL spirevbyte
MOV DPTR,#i?241
MOVX A,@DPTR
ADD A,#LOW (rxdata+02H)
MOV DPL,A
CLR A
ADDC A,#HIGH (rxdata+02H)
MOV DPH,A
MOV A,R7
MOVX @DPTR,A
; nsel=1;
; SOURCE LINE # 144
SETB nsel
; }
; SOURCE LINE # 145
MOV DPTR,#i?241
MOVX A,@DPTR
INC A
MOVX @DPTR,A
SJMP ?C0016
?C0017:
; revframe=1;
; SOURCE LINE # 146
SETB revframe
;
; spisendcommand(0xca81);//Disables the highly sensitive RESET mode.
; SOURCE LINE # 148
MOV R7,#081H
?C0065:
MOV R6,#0CAH
LJMP _spisendcommand
; }
; SOURCE LINE # 149
?C0015:
; else
; {revframe = 0;}
; SOURCE LINE # 151
CLR revframe
;
; }
; SOURCE LINE # 153
RET
?C0007:
; else
; {
; SOURCE LINE # 155
; revframe = 0;
; SOURCE LINE # 156
CLR revframe
; }
; SOURCE LINE # 157
;
; }
; SOURCE LINE # 159
?C0014:
RET
; END OF fiforxframe
; /******************************************************************************
; ** 函数: txregframe()
; ** 入参:
; ** 返回:
; ** 说明: ia442x发送一帧数据
; ******************************************************************************/
; void txregframe(unsigned char len)
RSEG ?PR?_txregframe?SI4421
_txregframe:
USING 0
; SOURCE LINE # 166
MOV DPTR,#len?343
MOV A,R7
MOVX @DPTR,A
; {
; SOURCE LINE # 167
; unsigned char i;
; unsigned int u,k;
; //P2 = 0xFF;
; sdi = 0;
; SOURCE LINE # 171
CLR sdi
; nsel = 0;
; SOURCE LINE # 172
CLR nsel
; // spisendcommand(0xca83);
; spisendcommand(0x8228);//transimission starts turn on crystal
; SOURCE LINE # 174
MOV R7,#028H
MOV R6,#082H
LCALL _spisendcommand
; // sdi = 0;
; // nsel = 0;
;
; len=len+4; //字节固定同步头
; SOURCE LINE # 178
MOV DPTR,#len?343
MOVX A,@DPTR
ADD A,#04H
MOVX @DPTR,A
;
; for(i=0;i<len;i++)
; SOURCE LINE # 180
CLR A
INC DPTR
MOVX @DPTR,A
?C0027:
MOV DPTR,#len?343
MOVX A,@DPTR
MOV R7,A
INC DPTR
MOVX A,@DPTR
CLR C
SUBB A,R7
JC $ + 5H
LJMP ?C0028
; {
; SOURCE LINE # 181
; nsel=0;
; SOURCE LINE # 182
CLR nsel
; //while(!sdo);
;
; for(k=0;k<6000;k++)
; SOURCE LINE # 185
CLR A
MOV DPTR,#k?346
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
?C0030:
MOV DPTR,#k?346
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
CLR C
SUBB A,#070H
MOV A,R6
SUBB A,#017H
JNC ?C0031
; {
; SOURCE LINE # 186
; if(sdo)
; SOURCE LINE # 187
JB sdo,?C0031
; {
; SOURCE LINE # 188
; break;
; SOURCE LINE # 189
; }
; SOURCE LINE # 190
; }
; SOURCE LINE # 191
?C0032:
MOV DPTR,#k?346+01H
MOVX A,@DPTR
INC A
MOVX @DPTR,A
JNZ ?C0030
MOV DPTR,#k?346
MOVX A,@DPTR
INC A
MOVX @DPTR,A
?C0062:
SJMP ?C0030
?C0031:
; if(k==6000)
; SOURCE LINE # 192
CJNE R6,#017H,?C0034
CJNE R7,#070H,?C0034
; { // nres=0;
; SOURCE LINE # 193
; // delayms(50);
; // nres=1;
; ia442xinit();
; SOURCE LINE # 196
LCALL ia442xinit
; spirevtwobyte();
; SOURCE LINE # 197
LCALL spirevtwobyte
; spisendcommand(0x8288); //电源管理 whole receive crystal on
; SOURCE LINE # 198
LCALL L?0069
; spisendcommand(0xca83); //FIFO COMMAND
; SOURCE LINE # 199
MOV R7,#083H
MOV R6,#0CAH
LCALL _spisendcommand
; if(DEBUG) Printf_String("\r\n[msg:]003 si4421's sdo is dead but she can receive");
; SOURCE LINE # 200
MOV R3,#0FFH
MOV R2,#HIGH (?SC_106)
MOV R1,#LOW (?SC_106)
LJMP ?C0067
; return;
; }
; SOURCE LINE # 202
?C0034:
;
;
; u=0xb8;
; SOURCE LINE # 205
MOV DPTR,#u?345
CLR A
MOVX @DPTR,A
INC DPTR
MOV A,#0B8H
MOVX @DPTR,A
; u<<=8;
; SOURCE LINE # 206
MOVX A,@DPTR
MOV R0,A
CLR A
MOVX @DPTR,A
MOV A,R0
MOV DPTR,#u?345
MOVX @DPTR,A
; u+=txdata[i];
; SOURCE LINE # 207
MOV DPTR,#i?344
MOVX A,@DPTR
ADD A,#LOW (txdata)
MOV DPL,A
CLR A
ADDC A,#HIGH (txdata)
MOV DPH,A
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#u?345+01H
MOVX A,@DPTR
ADD A,R7
MOVX @DPTR,A
MOV DPTR,#u?345
MOVX A,@DPTR
ADDC A,#00H
MOVX @DPTR,A
; spisendcommand(u);
; SOURCE LINE # 208
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
LCALL _spisendcommand
; }
; SOURCE LINE # 209
MOV DPTR,#i?344
MOVX A,@DPTR
INC A
MOVX @DPTR,A
LJMP ?C0027
?C0028:
; nsel=0;
; SOURCE LINE # 210
CLR nsel
; //while(!sdo);
; for(k=0;k<6000;k++)
; SOURCE LINE # 212
CLR A
MOV DPTR,#k?346
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
?C0037:
MOV DPTR,#k?346
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
CLR C
SUBB A,#070H
MOV A,R6
SUBB A,#017H
JNC ?C0038
; {
; SOURCE LINE # 213
; if(sdo)
; SOURCE LINE # 214
JB sdo,?C0038
; {
; SOURCE LINE # 215
; break;
; SOURCE LINE # 216
; }
; SOURCE LINE # 217
; }
; SOURCE LINE # 218
?C0039:
MOV DPTR,#k?346+01H
MOVX A,@DPTR
INC A
MOVX @DPTR,A
JNZ ?C0037
MOV DPTR,#k?346
MOVX A,@DPTR
INC A
MOVX @DPTR,A
?C0063:
SJMP ?C0037
?C0038:
; if(k==6000)
; SOURCE LINE # 219
CJNE R6,#017H,?C0041
CJNE R7,#070H,?C0041
; {
; SOURCE LINE # 220
; // nres=0;
; // delayms(50);
; // nres=1;
;
; ia442xinit();
; SOURCE LINE # 225
LCALL ia442xinit
; spirevtwobyte();
; SOURCE LINE # 226
LCALL spirevtwobyte
; spisendcommand(0x8288); //电源管理 whole receive crystal on
; SOURCE LINE # 227
LCALL L?0069
; spisendcommand(0xca83); //FIFO COMMAND
; SOURCE LINE # 228
MOV R7,#083H
MOV R6,#0CAH
LCALL _spisendcommand
; if(DEBUG) Printf_String("\r\n[msg:]004 si4421's sdo is dead but she can receive");
; SOURCE LINE # 229
MOV R3,#0FFH
MOV R2,#HIGH (?SC_159)
MOV R1,#LOW (?SC_159)
?C0066:
SJMP ?C0067
; return;
; }
; SOURCE LINE # 231
?C0041:
; spisendcommand(0xb8aa);//Transmitter Register Write Command byte aa
; SOURCE LINE # 232
MOV R7,#0AAH
MOV R6,#0B8H
LCALL _spisendcommand
; nsel=0;
; SOURCE LINE # 233
CLR nsel
; // while(!sdo);
; for(k=0;k<6000;k++)
; SOURCE LINE # 235
CLR A
MOV DPTR,#k?346
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
?C0043:
MOV DPTR,#k?346
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
CLR C
SUBB A,#070H
MOV A,R6
SUBB A,#017H
JNC ?C0044
; {
; SOURCE LINE # 236
; if(sdo)
; SOURCE LINE # 237
JB sdo,?C0044
; {
; SOURCE LINE # 238
; break;
; SOURCE LINE # 239
; }
; SOURCE LINE # 240
; }
; SOURCE LINE # 241
?C0045:
MOV DPTR,#k?346+01H
MOVX A,@DPTR
INC A
MOVX @DPTR,A
JNZ ?C0043
MOV DPTR,#k?346
MOVX A,@DPTR
INC A
MOVX @DPTR,A
?C0064:
SJMP ?C0043
?C0044:
; if(k==6000)
; SOURCE LINE # 242
CJNE R6,#017H,?C0047
CJNE R7,#070H,?C0047
; {
; SOURCE LINE # 243
; ia442xinit();
; SOURCE LINE # 244
LCALL ia442xinit
; spirevtwobyte();
; SOURCE LINE # 245
LCALL spirevtwobyte
; spisendcommand(0x8288); //电源管理 whole receive crystal on
; SOURCE LINE # 246
LCALL L?0069
; spisendcommand(0xca83); //FIFO COMMAND
; SOURCE LINE # 247
MOV R7,#083H
MOV R6,#0CAH
LCALL _spisendcommand
; if(DEBUG) Printf_String("\r\n[msg:]005 si4421's sdo is dead but she can receive");
; SOURCE LINE # 248
MOV R3,#0FFH
MOV R2,#HIGH (?SC_212)
MOV R1,#LOW (?SC_212)
?C0067:
LJMP _Printf_String
; return;
; }
; SOURCE LINE # 250
?C0047:
; spisendcommand(0x8288);//Enables the whole receiver chain Turns on the crystal
; SOURCE LINE # 251
LCALL L?0069
; spirevtwobyte();//读状态
; SOURCE LINE # 252
LCALL spirevtwobyte
; nsel=1;
; SOURCE LINE # 253
SETB nsel
; }
; SOURCE LINE # 254
?C0036:
RET
; END OF _txregframe
; /******************************************************************************
; ** 函数: spisendcommand()
; ** 入参: unsigned int x
; ** 返回:
; ** 说明: 写指令
; ******************************************************************************/
; void spisendcommand(unsigned int x)
RSEG ?PR?_spisendcommand?SI4421
L?0068:
USING 0
L?0069:
MOV R7,#088H
MOV R6,#082H
_spisendcommand:
USING 0
; SOURCE LINE # 261
;---- Variable 'x?447' assigned to Register 'R6/R7' ----
; {
; SOURCE LINE # 262
; unsigned char comdata1,comdata2;
; unsigned int a;
; a=x;
; SOURCE LINE # 265
;---- Variable 'a?450' assigned to Register 'R6/R7' ----
; nsel=0;
; SOURCE LINE # 266
CLR nsel
; comdata2=a;
; SOURCE LINE # 267
MOV DPTR,#comdata2?449
MOV A,R7
MOVX @DPTR,A
; comdata1=a>>8;
; SOURCE LINE # 268
MOV A,R6
MOV R7,A
;---- Variable 'comdata1?448' assigned to Register 'R7' ----
; spisendbyte(comdata1);
; SOURCE LINE # 269
LCALL _spisendbyte
; spisendbyte(comdata2);
; SOURCE LINE # 270
MOV DPTR,#comdata2?449
MOVX A,@DPTR
MOV R7,A
LCALL _spisendbyte
; nsel=1;
; SOURCE LINE # 271
SETB nsel
; }
; SOURCE LINE # 272
RET
; END OF _spisendcommand
; /******************************************************************************
; ** 函数: spisendbyte(unsigned char x)
; ** 入参: unsigned char x
; ** 返回:
; ** 说明: 写8位数据
; ******************************************************************************/
; void spisendbyte(unsigned char x)
RSEG ?PR?_spisendbyte?SI4421
_spisendbyte:
USING 0
; SOURCE LINE # 279
;---- Variable 'x?551' assigned to Register 'R7' ----
; {
; SOURCE LINE # 280
; unsigned char i,bytedata;
; bytedata=x;
; SOURCE LINE # 282
;---- Variable 'bytedata?553' assigned to Register 'R7' ----
; for(i=0;i<8;i++)
; SOURCE LINE # 283
;---- Variable 'i?552' assigned to Register 'R6' ----
CLR A
MOV R6,A
?C0050:
; {
; SOURCE LINE # 284
; sck=0;
; SOURCE LINE # 285
CLR sck
; sdi=bytedata&0x80;
; SOURCE LINE # 286
MOV A,R7
RLC A
MOV sdi,C
; bytedata=bytedata<<1;
; SOURCE LINE # 287
MOV A,R7
ADD A,ACC
MOV R7,A
; sck=1;
; SOURCE LINE # 288
SETB sck
; }
; SOURCE LINE # 289
INC R6
MOV A,R6
CJNE A,#08H,?C0050
?C0051:
; sck=0;
; SOURCE LINE # 290
CLR sck
; sdi=0;
; SOURCE LINE # 291
CLR sdi
; }
; SOURCE LINE # 292
RET
; END OF _spisendbyte
; /******************************************************************************
; ** 函数: unsigned int spirevtwobyte()
; ** 入参: u
; ** 返回:
; ** 说明: 读状态
; ******************************************************************************/
; unsigned int spirevtwobyte() //读状态
RSEG ?PR?spirevtwobyte?SI4421
spirevtwobyte:
USING 0
; SOURCE LINE # 299
; {
; SOURCE LINE # 300
; unsigned int u;
; nsel=0;
; SOURCE LINE # 302
CLR nsel
; u=spirevbyte();
; SOURCE LINE # 303
LCALL spirevbyte
MOV DPTR,#u?654
CLR A
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
; u<<=8;
; SOURCE LINE # 304
MOVX A,@DPTR
MOV R0,A
CLR A
MOVX @DPTR,A
MOV A,R0
MOV DPTR,#u?654
MOVX @DPTR,A
; u+=spirevbyte();
; SOURCE LINE # 305
LCALL spirevbyte
MOV DPTR,#u?654+01H
MOVX A,@DPTR
ADD A,R7
MOVX @DPTR,A
MOV DPTR,#u?654
MOVX A,@DPTR
ADDC A,#00H
MOVX @DPTR,A
; nsel=1;
; SOURCE LINE # 306
SETB nsel
; return(u);
; SOURCE LINE # 307
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
; }
; SOURCE LINE # 308
?C0054:
RET
; END OF spirevtwobyte
; /******************************************************************************
; ** 函数: unsigned char spirevbyte()
; ** 入参:
; ** 返回: bytedata
; ** 说明: 读8位数据
; ******************************************************************************/
; unsigned char spirevbyte()
RSEG ?PR?spirevbyte?SI4421
spirevbyte:
USING 0
; SOURCE LINE # 315
; {
; SOURCE LINE # 316
; unsigned char i,bytedata;
; sdi=0;
; SOURCE LINE # 318
CLR sdi
; sck=0;
; SOURCE LINE # 319
CLR sck
; bytedata=0;
; SOURCE LINE # 320
;---- Variable 'bytedata?756' assigned to Register 'R7' ----
CLR A
MOV R7,A
; for(i=0;i<8;i++)
; SOURCE LINE # 321
;---- Variable 'i?755' assigned to Register 'R6' ----
MOV R6,A
?C0055:
; {
; SOURCE LINE # 322
; sck=1;
; SOURCE LINE # 323
SETB sck
; bytedata=bytedata<<1;
; SOURCE LINE # 324
MOV A,R7
ADD A,ACC
MOV R7,A
; if(sdo) bytedata+=1;
; SOURCE LINE # 325
JNB sdo,?C0058
INC R7
?C0058:
; sck=0;
; SOURCE LINE # 326
CLR sck
; }
; SOURCE LINE # 327
INC R6
MOV A,R6
CJNE A,#08H,?C0055
?C0056:
; return(bytedata);
; SOURCE LINE # 328
;
; }
; SOURCE LINE # 330
?C0059:
RET
; END OF spirevbyte
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -