⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 si4421.src

📁 c8051f310xmodembootloader.rar
💻 SRC
📖 第 1 页 / 共 2 页
字号:
	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 + -