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

📄 comm.src

📁 c8051f310xmodembootloader.rar
💻 SRC
📖 第 1 页 / 共 2 页
字号:
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	DPTR,#inRxBuf
	XCH  	A,R1
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
; 
;        }
			; SOURCE LINE # 100
;        
; 
; }
			; SOURCE LINE # 103
?C0011:
	POP  	AR6
	POP  	AR3
	POP  	AR2
	POP  	AR1
	POP  	AR0
	POP  	PSW
	POP  	DPL
	POP  	DPH
	POP  	B
	POP  	ACC
	RETI 	
; END OF serial

; 
; /**********************************************************************
; ** 函数原型:    void  	Printf_Char(u8_t ascii)
; ** 参数说明:	ascii:	发送到串口的ASCII
; ** 返 回 值:	无      
; ** 说    明:	往串口发送一个字符
; ************************************************************************/
; 
; void Printf_Char(unsigned char ascii)

	RSEG  ?PR?_Printf_Char?COMM
_Printf_Char:
	USING	0
			; SOURCE LINE # 112
;---- Variable 'ascii?341' assigned to Register 'R7' ----
; {
			; SOURCE LINE # 113
; 	unsigned char *t;
; 
; 	ES0=0;
			; SOURCE LINE # 116
	CLR  	ES0
; 	if(TIflag)
			; SOURCE LINE # 117
	JNB  	TIflag,?C0016
; 	{
			; SOURCE LINE # 118
; 		TIflag=0;
			; SOURCE LINE # 119
	CLR  	TIflag
; 		TI0=1;
			; SOURCE LINE # 120
	SETB 	TI0
; 	}
			; SOURCE LINE # 121
?C0016:
; 	t=inTxBuf;t++;
			; SOURCE LINE # 122
	MOV  	DPTR,#inTxBuf
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,AR4
	MOV  	R1,A
	MOV  	DPTR,#t?342
	MOV  	A,#01H
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
	MOV  	DPTR,#t?342+01H
	CLR  	A
	MOV  	B,#01H
	LCALL	?C?IILDX
; 	if(t==TxBuf+LenTxBuf) t=TxBuf;
			; SOURCE LINE # 123
	MOV  	DPTR,#t?342
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	A,#01H
	MOV  	DPTR,#TxBuf+080H
	XRL  	A,R3
	JNZ  	?C0039
	MOV  	A,R1
	XRL  	A,DPL
	JNZ  	?C0039
	MOV  	A,R2
	XRL  	A,DPH
?C0039:
	JNZ  	?C0017
	MOV  	DPTR,#t?342
	INC  	A
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#HIGH (TxBuf)
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#LOW (TxBuf)
	MOVX 	@DPTR,A
?C0017:
; 	if(t==outTxBuf) {ES0=1;return;}			//TxBuf Full
			; SOURCE LINE # 124
	MOV  	DPTR,#outTxBuf
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	PUSH 	AR3
	PUSH 	AR2
	PUSH 	AR1
	MOV  	DPTR,#t?342
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	POP  	DPL
	POP  	DPH
	POP  	ACC
	XRL  	A,R3
	JNZ  	?C0040
	MOV  	A,R1
	XRL  	A,DPL
	JNZ  	?C0040
	MOV  	A,R2
	XRL  	A,DPH
?C0040:
	JNZ  	?C0018
	SETB 	ES0
	RET  	
?C0018:
; 	*inTxBuf=ascii;
			; SOURCE LINE # 125
	MOV  	DPTR,#inTxBuf
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	DPL,A
	MOV  	DPH,R4
	MOV  	A,R7
	MOVX 	@DPTR,A
; 	inTxBuf=t;
			; SOURCE LINE # 126
	MOV  	DPTR,#t?342
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	DPTR,#inTxBuf
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R7
	MOVX 	@DPTR,A
; 	ES0=1;
			; SOURCE LINE # 127
	SETB 	ES0
; }
			; SOURCE LINE # 128
?C0019:
	RET  	
; END OF _Printf_Char

; 
; 
; /**********************************************************************
; ** 函数原型:    void  		Printf_String(u8_t code *string)
; ** 参数说明:	string:	字符串的起始地址
; ** 返 回 值:	无      
; ** 说    明:	向串口发送字符串,碰到0x00结束
; ************************************************************************/
; void Printf_String(unsigned char  *string)

	RSEG  ?PR?_Printf_String?COMM
_Printf_String:
	USING	0
			; SOURCE LINE # 137
	MOV  	DPTR,#string?443
	MOV  	A,R3
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
; {
			; SOURCE LINE # 138
?C0020:
; 
;    while(*string!=0)
			; SOURCE LINE # 140
	MOV  	DPTR,#string?443
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	LCALL	?C?CLDPTR
	MOV  	R7,A
	JZ   	?C0022
;    {
			; SOURCE LINE # 141
;      Printf_Char(*string);
			; SOURCE LINE # 142
	LCALL	_Printf_Char
;      string++;
			; SOURCE LINE # 143
	MOV  	DPTR,#string?443+01H
	CLR  	A
	MOV  	B,#01H
	LCALL	?C?IILDX
;    }
			; SOURCE LINE # 144
	SJMP 	?C0020
; }
			; SOURCE LINE # 145
?C0022:
	RET  	
; END OF _Printf_String

; 
; /**********************************************************************
; **函数原型:    Get_Char()
; **参数说明:	无
; **返 回 值:	temp      
; **说    明:	从串口缓冲区接收一个字符
; ************************************************************************/
; bit Get_Char(unsigned char xdata *ch)

	RSEG  ?PR?_Get_Char?COMM
_Get_Char:
	USING	0
			; SOURCE LINE # 153
;---- Variable 'ch?544' assigned to Register 'R6/R7' ----
; {
			; SOURCE LINE # 154
;  
; 	ES0=0;
			; SOURCE LINE # 156
	CLR  	ES0
; 	if(inRxBuf==outRxBuf) {ES0=1;return 0;}   	//RxBuf Empty
			; SOURCE LINE # 157
	MOV  	DPTR,#outRxBuf
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	PUSH 	AR3
	PUSH 	AR2
	PUSH 	AR1
	MOV  	DPTR,#inRxBuf
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	POP  	DPL
	POP  	DPH
	POP  	ACC
	XRL  	A,R3
	JNZ  	?C0041
	MOV  	A,R1
	XRL  	A,DPL
	JNZ  	?C0041
	MOV  	A,R2
	XRL  	A,DPH
?C0041:
	JNZ  	?C0023
	SETB 	ES0
	CLR  	C
	RET  	
?C0023:
; 	*ch=*outRxBuf;  outRxBuf++;					//数据被读走,读指针加1
			; SOURCE LINE # 158
	MOV  	DPTR,#outRxBuf
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	LCALL	?C?CLDPTR
	MOV  	DPL,R7
	MOV  	DPH,R6
	MOVX 	@DPTR,A
	MOV  	DPTR,#outRxBuf+01H
	CLR  	A
	MOV  	B,#01H
	LCALL	?C?IILDX
; 	if(outRxBuf==RxBuf+LenRxBuf) outRxBuf=RxBuf;	//如果读指针到缓冲区尾部,则返回到头部
			; SOURCE LINE # 159
	MOV  	DPTR,#outRxBuf
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	A,#01H
	MOV  	DPTR,#RxBuf+022H
	XRL  	A,R3
	JNZ  	?C0042
	MOV  	A,R1
	XRL  	A,DPL
	JNZ  	?C0042
	MOV  	A,R2
	XRL  	A,DPH
?C0042:
	JNZ  	?C0025
	MOV  	DPTR,#outRxBuf
	INC  	A
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#HIGH (RxBuf)
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#LOW (RxBuf)
	MOVX 	@DPTR,A
?C0025:
; 	ES0=1;
			; SOURCE LINE # 160
	SETB 	ES0
; 	return 1;
			; SOURCE LINE # 161
	SETB 	C
; 
; }
			; SOURCE LINE # 163
?C0024:
	RET  	
; END OF _Get_Char

; 
; /**********************************************************************
; **函数原型:    process_uart
; **入口参数:		com_len
; **出口参数:		无
; **返 回 值:	无
; **功能说明:		接收上位机的配置,检测串口有数据,等待一帧数据结束处理
; ***********************************************************************/
; 
; void process_uart()

	RSEG  ?PR?process_uart?COMM
process_uart:
	USING	0
			; SOURCE LINE # 173
; {
			; SOURCE LINE # 174
;   unsigned char dat_len=0;
			; SOURCE LINE # 175
	CLR  	A
	MOV  	DPTR,#dat_len?645
	MOVX 	@DPTR,A
?C0026:
;   unsigned char xdata ch;
; 
;   while(Get_Char(&ch))
			; SOURCE LINE # 178
	MOV  	R6,#HIGH (ch?646)
	MOV  	R7,#LOW (ch?646)
	LCALL	_Get_Char
	JNC  	?C0033
;   {
			; SOURCE LINE # 179
;      delayms(2);
			; SOURCE LINE # 180
	MOV  	R7,#02H
	MOV  	R6,#00H
	LCALL	_delayms
;      combuf[dat_len]=ch;
			; SOURCE LINE # 181
	MOV  	DPTR,#ch?646
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	DPTR,#dat_len?645
	MOVX 	A,@DPTR
	ADD  	A,#LOW (combuf)
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (combuf)
	MOV  	DPH,A
	MOV  	A,R7
	MOVX 	@DPTR,A
; 	 if(ch!=0xff) dat_len++;
			; SOURCE LINE # 182
	MOV  	A,R7
	CPL  	A
	JZ   	?C0028
	MOV  	DPTR,#dat_len?645
	MOVX 	A,@DPTR
	INC  	A
	MOVX 	@DPTR,A
?C0028:
; 	 if(dat_len==maxlen) dat_len=0;
			; SOURCE LINE # 183
	MOV  	DPTR,#dat_len?645
	MOVX 	A,@DPTR
	CJNE 	A,#020H,?C0029
	CLR  	A
	MOVX 	@DPTR,A
?C0029:
; 	  if(ch==0xff)
			; SOURCE LINE # 184
	MOV  	DPTR,#ch?646
	MOVX 	A,@DPTR
	CJNE 	A,#0FFH,?C0026
; 	  {
			; SOURCE LINE # 185
; 		 if((combuf[23]==0x55)&&(combuf[24]==0xaa))
			; SOURCE LINE # 186
	MOV  	DPTR,#combuf+017H
	MOVX 	A,@DPTR
	CJNE 	A,#055H,?C0031
	INC  	DPTR
	MOVX 	A,@DPTR
	CJNE 	A,#0AAH,?C0031
; 		 {
			; SOURCE LINE # 187
; 	       Printf_Char(0xf0);		   //ok
			; SOURCE LINE # 188
	MOV  	R7,#0F0H
	LCALL	_Printf_Char
; 		   process_incmd();			   //处理串口接收的配置表
			; SOURCE LINE # 189
	LCALL	process_incmd
; 		 }
			; SOURCE LINE # 190
	SJMP 	?C0026
?C0031:
; 		 else
; 	     {
			; SOURCE LINE # 192
; 	       Printf_Char(0xf1);	       //error
			; SOURCE LINE # 193
	MOV  	R7,#0F1H
	LCALL	_Printf_Char
; 	     }
			; SOURCE LINE # 194
; 	  }
			; SOURCE LINE # 195
; 	  
; 	   
;   }
			; SOURCE LINE # 198
	SJMP 	?C0026
;  
; }
			; SOURCE LINE # 200
?C0033:
	RET  	
; END OF process_uart

; 
; 
; /**********************************************************************
; **函数原型:    process_incmd
; **入口参数:		无
; **出口参数:		无
; **返 回 值:	无
; **功能说明:		处理接收的PC命令帧,准备flash保存与修改实时RAM值
; ***********************************************************************/
; 
; void process_incmd()

	RSEG  ?PR?process_incmd?COMM
process_incmd:
	USING	0
			; SOURCE LINE # 211
; {
			; SOURCE LINE # 212
;   
;   READER_PCS xdata *pcs;
; 
; 
;   pcs=(READER_PCS xdata *)(combuf+2);
			; SOURCE LINE # 217
	MOV  	R6,#HIGH (combuf+02H)
	MOV  	R7,#LOW (combuf+02H)
	MOV  	DPTR,#pcs?747
	MOV  	A,R6
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R7
	MOVX 	@DPTR,A
;  
; 
;   wiefmt=wie[pcs->pcs_wiefat];					  //提取RAM更改参数
			; SOURCE LINE # 220
	MOV  	DPTR,#pcs?747
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R5,A
	ADD  	A,#012H
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,R4
	MOV  	DPH,A
	MOVX 	A,@DPTR
	MOV  	DPTR,#wie
	MOVC 	A,@A+DPTR
	MOV  	R0,#LOW (wiefmt)
	MOV  	@R0,A
;   power =pow[pcs->pcs_power];
			; SOURCE LINE # 221
	MOV  	A,R5
	ADD  	A,#0DH
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,R4
	MOV  	DPH,A
	MOVX 	A,@DPTR
	ADD  	A,ACC
	ADD  	A,#LOW (pow)
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (pow)
	MOV  	DPH,A
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	R4,A
	MOV  	A,#01H
	MOVC 	A,@A+DPTR
	MOV  	R0,#LOW (power)
	MOV  	@R0,AR4
	INC  	R0
	MOV  	@R0,A
;   INACTIVITY_TIME=cardouttime[pcs->pcs_cardt];
			; SOURCE LINE # 222
	MOV  	DPTR,#pcs?747
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R5,A
	ADD  	A,#0FH
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,R4
	MOV  	DPH,A
	MOVX 	A,@DPTR
	MOV  	DPTR,#cardouttime
	MOVC 	A,@A+DPTR
	MOV  	R0,#LOW (INACTIVITY_TIME)
	MOV  	@R0,A
;   RELAY_TIME_IN  =relay_time[pcs->pcs_relayt];
			; SOURCE LINE # 223
	MOV  	A,R5
	ADD  	A,#010H
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,R4
	MOV  	DPH,A
	MOVX 	A,@DPTR
	MOV  	DPTR,#relay_time
	MOVC 	A,@A+DPTR
	MOV  	R0,#LOW (RELAY_TIME_IN)
	MOV  	@R0,A
;   RELAY_TIME_OUT =relay_time[pcs->pcs_relayt];
			; SOURCE LINE # 224
	MOV  	R0,#LOW (RELAY_TIME_OUT)
	MOV  	@R0,A
; 
; 
; 
;    memcpy(MyID,pcs->pcs_rid,4);					  //赋值系统ID
			; SOURCE LINE # 228
	MOV  	A,R7
	ADD  	A,#02H
	MOV  	R7,A
	CLR  	A
	ADDC 	A,R6
	MOV  	R2,A
	MOV  	R1,AR7
	MOV  	R3,#01H
	MOV  	R0,#LOW (MyID)
	MOV  	R4,#HIGH (MyID)
	MOV  	R5,#01H
	MOV  	R6,#00H
	MOV  	R7,#04H
	LCALL	?C?COPY
; 
;    
; 
;   pcs->pcs_crc16=cal_crc(combuf+2,sizeof(READER_PCS)-2); //计算CRC
			; SOURCE LINE # 232
	MOV  	R3,#01H
	MOV  	R2,#HIGH (combuf+02H)
	MOV  	R1,#LOW (combuf+02H)
	MOV  	R5,#015H
	LCALL	_cal_crc
	MOV  	DPTR,#pcs?747
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R5,A
	ADD  	A,#015H
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,R4
	MOV  	DPH,A
	MOV  	A,R6
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R7
	MOVX 	@DPTR,A
; 
;   memcpy(combuf,pcs,sizeof(READER_PCS));	   //计算好的参数回COPY内存,结构体不能传递指针
			; SOURCE LINE # 234
	MOV  	R2,AR4
	MOV  	R1,AR5
	MOV  	R3,#01H
	MOV  	R0,#LOW (combuf)
	MOV  	R4,#HIGH (combuf)
	MOV  	R5,#01H
	MOV  	R6,#00H
	MOV  	R7,#017H
	LCALL	?C?COPY
;  
; 
;   flash_save(combuf,F_ADDR,32);           //保存数据至flash;
			; SOURCE LINE # 237
	MOV  	R3,#01H
	MOV  	R2,#HIGH (combuf)
	MOV  	R1,#LOW (combuf)
	MOV  	DPTR,#?_flash_save?BYTE+05H
	MOV  	A,#020H
	MOVX 	@DPTR,A
	MOV  	R5,#00H
	MOV  	R4,#030H
	LCALL	_flash_save
; 
;    
; 
;    delayms(100);					    //重新配置SI芯片
			; SOURCE LINE # 241
	MOV  	R7,#064H
	MOV  	R6,#00H
	LCALL	_delayms
;    nres=0;
			; SOURCE LINE # 242
	CLR  	nres
;    delayms(100);
			; SOURCE LINE # 243
	MOV  	R7,#064H
	MOV  	R6,#00H
	LCALL	_delayms
;    nres=1;
			; SOURCE LINE # 244
	SETB 	nres
;    ia442xinit();
			; SOURCE LINE # 245
	LCALL	ia442xinit
;    spirevtwobyte();
			; SOURCE LINE # 246
	LCALL	spirevtwobyte
;    spisendcommand(0x8288);			    //电源管理 whole receive crystal on
			; SOURCE LINE # 247
	MOV  	R7,#088H
	MOV  	R6,#082H
	LCALL	_spisendcommand
;    spisendcommand(0xca83);				//FIFO COMMAND
			; SOURCE LINE # 248
	MOV  	R7,#083H
	MOV  	R6,#0CAH
	LJMP 	_spisendcommand
; END OF process_incmd

	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -