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

📄 eeprom.src

📁 c8051f310xmodembootloader.rar
💻 SRC
📖 第 1 页 / 共 3 页
字号:
	LJMP 	_AT25_SetStatusReg
; END OF _Init_AT25XXX

; }
; 
; 
; 
; 
; 
; /***************************************************************************************
; **函数功能:flash_c8051f310
; **入参:	addr
; **返回值:	无
; **作者:	jerkoh
; **日期:	2009-03-16
; **说明:	c8051f310擦读写
; ***************************************************************************************/ 
; 
; void FLASH_PageErase (UINT addr)

	RSEG  ?PR?_FLASH_PageErase?EEPROM
_FLASH_PageErase:
			; SOURCE LINE # 341
;---- Variable 'addr?860' assigned to Register 'R6/R7' ----
; {
			; SOURCE LINE # 342
;    bit EA_SAVE = EA;                   // preserve EA
			; SOURCE LINE # 343
	MOV  	C,EA
	MOV  	EA_SAVE?861,C
;    UCHAR xdata * data pwrite;           // FLASH write pointer
; 
;    EA = 0;                          // disable interrupts
			; SOURCE LINE # 346
	CLR  	EA
; 
;    // change clock speed to slow, then restore later
;    VDM0CN = 0x80;                      // enable VDD monitor
			; SOURCE LINE # 349
	MOV  	VDM0CN,#080H
;    RSTSRC = 0x02;                   // enable VDD monitor as a reset source
			; SOURCE LINE # 350
	MOV  	RSTSRC,#02H
;    pwrite = (UCHAR xdata *) addr;
			; SOURCE LINE # 351
	MOV  	pwrite?862,R6
	MOV  	pwrite?862+01H,R7
;    FLKEY  = 0xA5;                   // Key Sequence 1
			; SOURCE LINE # 352
	MOV  	FLKEY,#0A5H
;    FLKEY  = 0xF1;                   // Key Sequence 2
			; SOURCE LINE # 353
	MOV  	FLKEY,#0F1H
;    PSCTL |= 0x03;                   // PSWE = 1; PSEE = 1
			; SOURCE LINE # 354
	ORL  	PSCTL,#03H
;    VDM0CN = 0x80;                      // enable VDD monitor
			; SOURCE LINE # 355
	MOV  	VDM0CN,#080H
;    RSTSRC = 0x02;                   // enable VDD monitor as a reset source
			; SOURCE LINE # 356
	MOV  	RSTSRC,#02H
;    *pwrite = 0;                     // initiate page erase
			; SOURCE LINE # 357
	MOV  	DPL,pwrite?862+01H
	MOV  	DPH,pwrite?862
	CLR  	A
	MOVX 	@DPTR,A
;    PSCTL &= ~0x03;                  // PSWE = 0; PSEE = 0
			; SOURCE LINE # 358
	ANL  	PSCTL,#0FCH
;    EA = EA_SAVE;                    // restore interrupts
			; SOURCE LINE # 359
	MOV  	C,EA_SAVE?861
	MOV  	EA,C
; }
			; SOURCE LINE # 360
	RET  	
; END OF _FLASH_PageErase

; 
; void FLASH_ByteWrite (UINT addr, UCHAR byte)

	RSEG  ?PR?_FLASH_ByteWrite?EEPROM
_FLASH_ByteWrite:
			; SOURCE LINE # 362
;---- Variable 'byte?964' assigned to Register 'R5' ----
;---- Variable 'addr?963' assigned to Register 'R6/R7' ----
; {
			; SOURCE LINE # 363
;    bit EA_SAVE = EA;                   // preserve EA
			; SOURCE LINE # 364
	MOV  	C,EA
	MOV  	EA_SAVE?965,C
;    UCHAR xdata * data pwrite;           // FLASH write pointer
; 
;    EA = 0;                             // disable interrupts
			; SOURCE LINE # 367
	CLR  	EA
; 
;    // change clock speed to slow, then restore later
;    VDM0CN = 0x80;                      // enable VDD monitor
			; SOURCE LINE # 370
	MOV  	VDM0CN,#080H
;    RSTSRC = 0x02;                      // enable VDD monitor as a reset source
			; SOURCE LINE # 371
	MOV  	RSTSRC,#02H
;    pwrite = (UCHAR xdata *) addr;
			; SOURCE LINE # 372
	MOV  	pwrite?966,R6
	MOV  	pwrite?966+01H,R7
; 
;    FLKEY  = 0xA5;                      // Key Sequence 1
			; SOURCE LINE # 374
	MOV  	FLKEY,#0A5H
;    FLKEY  = 0xF1;                      // Key Sequence 2
			; SOURCE LINE # 375
	MOV  	FLKEY,#0F1H
;    PSCTL |= 0x01;                      // PSWE = 1
			; SOURCE LINE # 376
	ORL  	PSCTL,#01H
;    VDM0CN = 0x80;                      // enable VDD monitor
			; SOURCE LINE # 377
	MOV  	VDM0CN,#080H
;    RSTSRC = 0x02;                      // enable VDD monitor as a reset source
			; SOURCE LINE # 378
	MOV  	RSTSRC,#02H
;    *pwrite = byte;                     // write the byte
			; SOURCE LINE # 379
	MOV  	DPL,pwrite?966+01H
	MOV  	DPH,pwrite?966
	MOV  	A,R5
	MOVX 	@DPTR,A
;    PSCTL &= ~0x01;                     // PSWE = 0
			; SOURCE LINE # 380
	ANL  	PSCTL,#0FEH
;    EA = EA_SAVE;                       // restore interrupts
			; SOURCE LINE # 381
	MOV  	C,EA_SAVE?965
	MOV  	EA,C
; }
			; SOURCE LINE # 382
	RET  	
; END OF _FLASH_ByteWrite

; 
; UCHAR FLASH_PageRead(UINT addr)

	RSEG  ?PR?_FLASH_PageRead?EEPROM
_FLASH_PageRead:
	USING	0
			; SOURCE LINE # 384
;---- Variable 'addr?1067' assigned to Register 'R6/R7' ----
; { 
			; SOURCE LINE # 385
;    bit EA_SAVE = EA;                   // preserve EA
			; SOURCE LINE # 386
	MOV  	C,EA
	MOV  	EA_SAVE?1068,C
;    UCHAR dat;
;    char code * data pread;           // FLASH read pointer
;    EA = 0;
			; SOURCE LINE # 389
	CLR  	EA
; 
;    pread=(char code *)addr;
			; SOURCE LINE # 391
	MOV  	pread?1070,R6
	MOV  	pread?1070+01H,R7
;    dat=*pread;
			; SOURCE LINE # 392
	MOV  	DPL,R7
	MOV  	DPH,R6
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	R7,A
;---- Variable 'dat?1069' assigned to Register 'R7' ----
; 
;      
;    EA = EA_SAVE;                      // restore interrupts
			; SOURCE LINE # 395
	MOV  	C,EA_SAVE?1068
	MOV  	EA,C
;    return dat;
			; SOURCE LINE # 396
; }
			; SOURCE LINE # 397
?C0047:
	RET  	
; END OF _FLASH_PageRead

; /***************************************************************************************
; **函数功能:flash_save
; **入参:	bufaddr s_len
; **返回值:	无
; **作者:	jerkoh
; **日期:	2009-03-16
; **说明:	无
; ***************************************************************************************/ 
; void flash_save(unsigned char *source_buf,unsigned int desk_addr,unsigned char s_len)

	RSEG  ?PR?_flash_save?EEPROM
_flash_save:
	USING	0
			; SOURCE LINE # 406
	MOV  	DPTR,#source_buf?1171
	MOV  	A,R3
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R4
	MOVX 	@DPTR,A
	MOV  	R6,A
	INC  	DPTR
	MOV  	A,R5
	MOVX 	@DPTR,A
	MOV  	R7,A
; {
			; SOURCE LINE # 407
;   unsigned char i,j;
; 
;   FLASH_PageErase (desk_addr);
			; SOURCE LINE # 410
	LCALL	_FLASH_PageErase
; 
;   if(s_len<=512)	      	          //make sure it's not over 512bytes
			; SOURCE LINE # 412
	MOV  	DPTR,#s_len?1173
	MOVX 	A,@DPTR
	SETB 	C
	SUBB 	A,#00H
	MOV  	A,#080H
	SUBB 	A,#082H
	JNC  	?C0055
;   {
			; SOURCE LINE # 413
; 
;    	for(j=0;j<3;j++) 
			; SOURCE LINE # 415
	CLR  	A
	MOV  	DPTR,#j?1175
	MOVX 	@DPTR,A
?C0049:
; 	{
			; SOURCE LINE # 416
;       for(i=0;i<s_len;i++)
			; SOURCE LINE # 417
	CLR  	A
	MOV  	DPTR,#i?1174
	MOVX 	@DPTR,A
?C0052:
	MOV  	DPTR,#s_len?1173
	MOVX 	A,@DPTR
	MOV  	R7,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R6,A
	CLR  	C
	SUBB 	A,R7
	JNC  	?C0053
;       {
			; SOURCE LINE # 418
;         FLASH_ByteWrite (desk_addr+i, source_buf[i]);
			; SOURCE LINE # 419
	MOV  	A,R6
	MOV  	R7,A
	MOV  	DPTR,#desk_addr?1172+01H
	MOVX 	A,@DPTR
	ADD  	A,R7
	MOV  	R7,A
	MOV  	DPTR,#desk_addr?1172
	MOVX 	A,@DPTR
	ADDC 	A,#00H
	MOV  	R6,A
	MOV  	DPTR,#source_buf?1171
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#i?1174
	MOVX 	A,@DPTR
	MOV  	DPL,A
	MOV  	DPH,#00H
	LCALL	?C?CLDOPTR
	MOV  	R5,A
	LCALL	_FLASH_ByteWrite
; 	  }
			; SOURCE LINE # 420
	MOV  	DPTR,#i?1174
	MOVX 	A,@DPTR
	INC  	A
	MOVX 	@DPTR,A
	SJMP 	?C0052
?C0053:
; 
; 	   desk_addr+=512;  //保存3份数据
			; SOURCE LINE # 422
	MOV  	DPTR,#desk_addr?1172+01H
	MOVX 	A,@DPTR
	ADD  	A,#00H
	MOVX 	@DPTR,A
	MOV  	DPTR,#desk_addr?1172
	MOVX 	A,@DPTR
	ADDC 	A,#02H
	MOVX 	@DPTR,A
; 	   FLASH_PageErase (desk_addr);
			; SOURCE LINE # 423
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	LCALL	_FLASH_PageErase
; 	}
			; SOURCE LINE # 424
	MOV  	DPTR,#j?1175
	MOVX 	A,@DPTR
	INC  	A
	MOVX 	@DPTR,A
	MOVX 	A,@DPTR
	CLR  	C
	SUBB 	A,#03H
	JC   	?C0049
; 
; 
;   }
			; SOURCE LINE # 427
; }
			; SOURCE LINE # 428
?C0055:
	RET  	
; END OF _flash_save

; /***************************************************************************************
; **函数功能:flash_boot
; **入参:	无
; **返回值:	无
; **作者:	jerkoh
; **日期:	2009-06-30
; **说明:	提取参数,如果检验失败 设备默认值
; ***************************************************************************************/ 
; void flash_boot()

	RSEG  ?PR?flash_boot?EEPROM
flash_boot:
	USING	0
			; SOURCE LINE # 437
; {
			; SOURCE LINE # 438
;    UCHAR i,j;
;    READER_PCS xdata *pt;
;    UINT nf_addr;
; 
;    nf_addr=F_ADDR;
			; SOURCE LINE # 443
	MOV  	DPTR,#nf_addr?1279
	MOV  	A,#030H
	MOVX 	@DPTR,A
	INC  	DPTR
	CLR  	A
	MOVX 	@DPTR,A
; 
;  for(j=0;j<3;j++)
			; SOURCE LINE # 445
	MOV  	DPTR,#j?1277
	MOVX 	@DPTR,A
?C0056:
;  {
			; SOURCE LINE # 446
;       for(i=0;i<32;i++)	 
			; SOURCE LINE # 447
;---- Variable 'i?1276' assigned to Register 'R5' ----
	CLR  	A
	MOV  	R5,A
?C0059:
;       {
			; SOURCE LINE # 448
; 	      combuf[i]=FLASH_PageRead(nf_addr+i);
			; SOURCE LINE # 449
	MOV  	A,R5
	MOV  	R7,A
	MOV  	DPTR,#nf_addr?1279+01H
	MOVX 	A,@DPTR
	ADD  	A,R7
	MOV  	R7,A
	MOV  	DPTR,#nf_addr?1279
	MOVX 	A,@DPTR
	ADDC 	A,#00H
	MOV  	R6,A
	LCALL	_FLASH_PageRead
	MOV  	A,#LOW (combuf)
	ADD  	A,R5
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (combuf)
	MOV  	DPH,A
	MOV  	A,R7
	MOVX 	@DPTR,A
;       }
			; SOURCE LINE # 450
	INC  	R5
	MOV  	A,R5
	CJNE 	A,#020H,?C0059
?C0060:
; 
;           pt=(READER_PCS xdata *)(combuf);
			; SOURCE LINE # 452
	MOV  	DPTR,#pt?1278
	MOV  	A,#HIGH (combuf)
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#LOW (combuf)
	MOVX 	@DPTR,A
; 
; 
;        if((cal_crc(combuf,sizeof(READER_PCS)-2))==(pt->pcs_crc16))
			; SOURCE LINE # 455
	MOV  	R3,#01H
	MOV  	R2,#HIGH (combuf)
	MOV  	R1,A
	MOV  	R5,#015H
	LCALL	_cal_crc
	MOV  	DPTR,#pt?1278
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	ADD  	A,#015H
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,R4
	MOV  	DPH,A
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	XRL  	A,R7
	JNZ  	?C0075
	MOV  	A,R4
	XRL  	A,R6
?C0075:
	JZ   	?C0057
;        {	    
			; SOURCE LINE # 456
; 	    break;			  //crc16正确 退出
			; SOURCE LINE # 457
;        }
			; SOURCE LINE # 458
?C0062:
;  
;        else
;        {
			; SOURCE LINE # 461
;         nf_addr+=512;	  //错误的话查下一块
			; SOURCE LINE # 462
	MOV  	DPTR,#nf_addr?1279+01H
	MOVX 	A,@DPTR
	ADD  	A,#00H
	MOVX 	@DPTR,A
	MOV  	DPTR,#nf_addr?1279
	MOVX 	A,@DPTR
	ADDC 	A,#02H
	MOVX 	@DPTR,A
;        }	 
			; SOURCE LINE # 463
;  } 
			; SOURCE LINE # 464
?C0058:
	MOV  	DPTR,#j?1277
	MOVX 	A,@DPTR
	INC  	A
	MOVX 	@DPTR,A
	MOVX 	A,@DPTR
	CLR  	C
	SUBB 	A,#03H
	JC   	?C0056
?C0057:
; 
;  	   if(j==0)
			; SOURCE LINE # 466
	MOV  	DPTR,#j?1277
	MOVX 	A,@DPTR
	JNZ  	?C0064
; 	     {
			; SOURCE LINE # 467
; 		   set_cs();
			; SOURCE LINE # 468
; 		   //if(DEBUG) Printf_String("\r\n[msg:]flash ok");	  //块1正确直接判断正确
; 		 }
			; SOURCE LINE # 470
	SJMP 	?C0076
?C0064:
; 
; 	   else if ((j==1)||(j==2))
			; SOURCE LINE # 472
	MOV  	DPTR,#j?1277
	MOVX 	A,@DPTR
	MOV  	R7,A
	XRL  	A,#01H
	JZ   	?C0067
	MOV  	A,R7
	CJNE 	A,#02H,?C0066
?C0067:
; 	     {
			; SOURCE LINE # 473
; 		   //if(DEBUG) Printf_String("\r\n[msg:]flashok 1-2");  //如果块2或3正确,3块统一
; 		   flash_save(combuf,F_ADDR,32);  
			; SOURCE LINE # 475
	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
	LJMP 	_flash_save
; 		 }
			; SOURCE LINE # 476
?C0066:
; 	   else
; 	     {
			; SOURCE LINE # 478
; 		    //if(DEBUG) Printf_String("\r\n[msg:]flash error");  //都不正确,写默认值
; 		    memcpy(combuf,defdata,sizeof(defdata));	//提取默认值
			; SOURCE LINE # 480
	MOV  	R0,#LOW (combuf)
	MOV  	R4,#HIGH (combuf)
	MOV  	R5,#01H
	MOV  	R3,#0FFH
	MOV  	R2,#HIGH (defdata)
	MOV  	R1,#LOW (defdata)
	MOV  	R6,#00H
	MOV  	R7,#020H
	LCALL	?C?COPY
; 
; 	  	    flash_save(combuf,F_ADDR,32);           //保存数据至flash,自动3份;
			; SOURCE LINE # 482
	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
; 			set_cs();   
			; SOURCE LINE # 483
?C0076:
	LCALL	set_cs
; 
; 		 }
			; SOURCE LINE # 485
; }
			; SOURCE LINE # 486
?C0069:
	RET  	
; END OF flash_boot

; 
; /***************************************************************************************
; **函数功能:set_cs
; **入参:	无
; **返回值:	无
; **作者:	jerkoh
; **日期:	2009-06-30
; **说明:	设置系统参数
; ***************************************************************************************/
; void set_cs()

	RSEG  ?PR?set_cs?EEPROM
set_cs:
	USING	0
			; SOURCE LINE # 496
; {
			; SOURCE LINE # 497
; 
;     READER_PCS xdata *ptr;
; 
; 	ptr=(READER_PCS xdata *)(combuf);
			; SOURCE LINE # 501
	MOV  	R6,#HIGH (combuf)
	MOV  	R7,#LOW (combuf)
;---- Variable 'ptr?1380' assigned to Register 'R6/R7' ----
; 
;   	wiefmt=wie[ptr->pcs_wiefat];
			; SOURCE LINE # 503
	MOV  	A,R7
	ADD  	A,#012H
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,R6
	MOV  	DPH,A
	MOVX 	A,@DPTR
	MOV  	DPTR,#wie
	MOVC 	A,@A+DPTR
	MOV  	R0,#LOW (wiefmt)
	MOV  	@R0,A
; 	power =pow[ptr->pcs_power];
			; SOURCE LINE # 504
	MOV  	A,R7
	ADD  	A,#0DH
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,R6
	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[ptr->pcs_cardt];
			; SOURCE LINE # 505
	MOV  	A,R7
	ADD  	A,#0FH
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,R6
	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[ptr->pcs_relayt];
			; SOURCE LINE # 506
	MOV  	A,R7
	ADD  	A,#010H
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,R6
	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[ptr->pcs_relayt];
			; SOURCE LINE # 507
	MOV  	R0,#LOW (RELAY_TIME_OUT)
	MOV  	@R0,A
; 
; 	memcpy(MyID,ptr->pcs_rid,sizeof(MyID));
			; SOURCE LINE # 509
	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
	LJMP 	?C?COPY
; END OF set_cs

	END

⌨️ 快捷键说明

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