?? eeprom.src
字號:
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 + -