?? led.a51
字號:
?PR?PLY_APDU?PLY_APDU SEGMENT CODE
PUBLIC PLY_APDU
RSEG ?PR?PLY_APDU?PLY_APDU
;編程代碼文件信息存放的地址0x10820 文件名稱0x10820~0x1082
;編程代碼文件起始地址0x10828~0x1082B 文件的長度0x1082C~0x1082
;文件信息放在0030H開始
;數(shù)據(jù)存放起始地址 頁地址0x104 偏移地址0x00 地址10C20H
;程序的時間寫入放入FBF5H~FBFBH FBFCH是否第一次編程
;CPU的FBFDH~FBFFH存放應(yīng)用程序的前三個字節(jié)
;口線定義
EXIO EQU 0C000H ;U11--HC273
IMG_EX EQU 3DH ;Image Unit DR_CN --D0
DT0 EQU P1.3 ;DATA
WRS EQU P1.1 ;WR CLK
LCDM EQU P3.4 ;LCD CS
LCD_DIG_BUF EQU 0E4H ;E4-EDH, LCD digital DIS Buffer (10-1)
LCD_LOG_BUF EQU 0EEH ;EE-EFH, LCD LOG display Buffer (15-0)
;C_RST45 EQU P1.0
;C_SO45 EQU P1.4
;C_SI45 EQU P1.5
;C_SCK45 EQU P1.3
;C_CS45 EQU P1.2
;ISP功能寄存器定義
;FAH EQU 0F4H ;編程高位地址(CPU地址)
;FAL EQU 0F5H ;編程低位地址(CPU地址)
;FDATA EQU 0F6H ;編程數(shù)據(jù)
;FCR EQU 0F7H ;控制編程或擦除
;SCONF EQU 0BFH ;控制ISP使能
;
;BUF EQU 60H
;CON1 EQU 73H ;
;LEN_L EQU 74H ;編程緩沖區(qū)長度低位
;LEN_H EQU 75H ;編程緩沖區(qū)長度高位
;PAH1 EQU 76H ;編程地址高位
;PAL1 EQU 77H ;編程地址低位
;CON EQU 78H ;移位計數(shù)器
;PA_H EQU 79H ;Page address H8 PAG=0-2048
;P;A_L EQU 7AH ;Page address L8
;BA_H EQU 7BH ;Byte/Buf1/Buf2 addr H8 BA:0-264
;BA_L EQU 7CH ;Byte/Buf1/Buf2 addr L8
;CON2 EQU 7DH
;CON3 EQU 7EH
;AT_45_ADD EQU 0C000H ;45D卡選通芯片地址
;ISP_DATA EQU 2000H ;編程數(shù)據(jù)緩沖256個字節(jié)
;PRO_NAME EQU 1100H ;文件名稱1100H~1107H
;PRO_STAADD EQU 1108H ;文件數(shù)據(jù)起始地址1108H~110BH
;PRO_LEN EQU 110CH ;文件長度110C~110FH
;PRO_DATE EQU 1110H ;文件生成日期1110H~1117H
;PRO_NAME EQU 30H ;文件名稱1100H~1107H
;PRO_STAADD EQU 38H ;文件數(shù)據(jù)起始地址1108H~110BH
;PRO_LEN EQU 3CH ;文件長度110C~110FH
;PRO_DATE EQU 40H ;文件生成日期1110H~1117H
;TIMEADD EQU 21F5H
;ORG 0FC00H
;ORG 0000H
;ISP_SERVER:
;判斷是否有卡,有041卡
; MOV SP,#80H
; MOV DPTR,#AT_45_ADD
; MOV A,#08H
; MOVX @DPTR,A
; SETB C_RST45
; JNB C_RST45,RETURN1
; SETB C_SO45
; JNB C_SO45,RETURN1
; SETB C_SI45
; JNB C_SI45,RETURN1
; SETB C_SCK45
; JNB C_SCK45,RETURN1
; SETB C_CS45
; JNB C_CS45,RETURN1
; LCALL LCD_INI
; MOV DPTR,#ISP_PSW_TB
; LCALL SW_BACK_MODE2
; MOV DPTR,#ISP_PSW_OK
; LCALL SW_BACK_MODE2
; MOV DPTR,#CPU_ERR
; LCALL SW_BACK_MODE2
;============================================================
;讀文件信息存放在 X:0030H~0047H
;============================================================
; LCALL RED_INFO ;讀出下載文件信息0030H~0047H
; MOV R7,#18H
; MOV R0,#30H
; MOV DPTR,#30H
;AA:
; MOVX A,@DPTR
; INC DPTR
; MOV @R0,A
; INC R0
; DJNZ R7,AA
;============================================================
;比較名稱 X:0030H~0036H是否為"KTD1101"OK繼續(xù)比較時間ERR退出
;============================================================
; MOV R2,#7
; MOV R0,#30H ;外部SRAM:0030H
; MOV DPTR,#KTD1101 ;"KTD1101"
; MOV R6,DPL
; MOV R7,DPH
; MOV R0,#30H
;COMP_NAME:
; MOV P2,#0 ;外部SRAM:0030H
; PUSH DPL
; PUSH DPH
; MOV DPL,R6
; MOV DPH,R7
; CLR A
; MOVC A,@A+DPTR
; INC DPTR
; MOV B,A
; MOV R6,DPL
; MOV R7,DPH
; CLR A
; POP DPH
; POP DPL
; MOV A,@R0
; CJNE A,B,RETURN1 ;名稱不相同則退出
; INC R0
; DJNZ R2,COMP_NAME ;
; LJMP ENFORCE_LOAD ;名稱相同則判斷是否強(qiáng)制下載
; LJMP COMP_TIME
; JMP RETURN1
;RETURN1:
; LJMP ISPEND
;===============================================================
;判斷是否強(qiáng)制下載
;===============================================================
;ENFORCE_LOAD:
; MOV R0,#47H
; MOV A,@R0
; CJNE A,#0,PRO_SATA ;不為0強(qiáng)制下載,為0則判斷時間
;===============================================================
;比較時間 X:0040H~0046H和C:FBF5H比較,如X大于C則開始編程,否則退出
;===============================================================
;COMP_TIME:
; MOV DPTR,#0FBF5H ;CPU里存放時間的地址
; CLR A
; MOVC A,@A+DPTR ;得到時間的第一個字節(jié)
; CJNE A,#0FFH,COMP_TIME1 ;不是第一次編程
; LJMP PRO_SATA ;第一遲編程
;COMP_TIME1:
; MOV DPTR,#0FBF5H
; MOV R5,DPL
; MOV R6,DPH
;; MOV R7,#7
; MOV R0,#40H
;COMP_TIME2:
; PUSH DPL
; PUSH DPH
; MOV DPL,R5
; MOV DPH,R6
; CLR A
; MOVC A,@A+DPTR
; MOV B,A
; INC DPTR
; MOV R5,DPL
; MOV R6,DPH
; POP DPH
; POP DPL
; MOVX A,@R0
; INC R0
; MOV CON,A
; CLR C
; SUBB A,B
; JC RETURN1 ;小于則結(jié)束
; MOV A,CON
; CJNE A,B,PRO_SATA ;大于則開始編程
; DJNZ R7,COMP_TIME2
; JMP RETURN1 ;等于則結(jié)束
;=======================================================================
;編程0000H~F900H 將X:2000H~21FFH的 數(shù)據(jù)編程到一頁(512個字節(jié)),共編程125頁
;=======================================================================
PLY_APDU:
MOV DPTR,#0C000H
MOV A,#0FBH
MOVX @DPTR,A
LCALL LCD_INI
MOV DPTR,#ISP_PSW_TB
LCALL SW_BACK_MODE2
RET
; LCALL INIT_45D
; MOV PA_H,#01H ;45D041頁高位地址
; MOV PA_L,#04H ;45D041頁低位地址
; MOV BA_H,#0 ;45D041頁內(nèi)偏移地址高位
; MOV BA_L,#0 ;45D041頁內(nèi)偏移地址低位
; MOV PAH1,#0 ;編程地址高位
; MOV PAL1,#0 ;編程地址低位
; MOV CON2,#7DH
;ISP_SERVER1:
; MOV DPTR,#ISP_DATA ;存放編程數(shù)據(jù)的緩沖
; LCALL READ_PAGE
; LCALL COMPILE_CPU ;將取出的數(shù)據(jù)編程到一PAH1,PAL1起始地址并改變地址
; DJNZ CON2,ISP_SERVER1
;=================================================================
;編程FA00H~FB00H 將當(dāng)前時間和代碼前三個字節(jié)編程到C:FBF5H
;=================================================================
; LCALL INIT_45D
; LCALL RED_INFO
; LCALL READ_PAGE
; MOV R3,#7 ;時間長度
; MOV R0,#40H ;日期存放地址
; MOV DPTR,#KTD1101
; MOV R6,DPH
; MOV R5,DPL
; MOV DPTR,#TIMEADD ;日期在SRAM中的地址
;ISP_SERVER2:
; PUSH DPH
; PUSH DPL
; MOV DPL,R5
; MOV DPH,R6
; CLR A
; MOV A,@R0 ;取出日期數(shù)據(jù)
; MOVC A,@A+DPTR
; INC R0
; MOV R6,DPH
; MOV R5,DPL
; POP DPL
; POP DPH
; MOVX @DPTR,A
; INC DPTR
; DJNZ R3,ISP_SERVER2
; CLR A ;清是否第一次標(biāo)志
; MOVX @DPTR,A
; INC DPTR ;將JMP的操作碼02
; MOV A,#02H
; MOVX @DPTR,A
;
; MOV DPTR,#1
; CLR A
; MOVC A,@A+DPTR
; MOV DPTR,#21FEH
; MOVX @DPTR,A
; MOV DPTR,#2
; CLR A
; MOVC A,@A+DPTR
; MOV DPTR,#21FFH
; MOVX @DPTR,A
; MOV PAH1,#0FAH ;編程地址高位
; MOV PAL1,#00H ;編程地址低位
; LCALL COMPILE_CPU
; LCALL LCD_INI
; MOV DPTR,#ISP_PSW_OK
; LCALL SW_BACK_MODE2
;ISPEND:
; LJMP 0FBFDH
;************************************************************
;
;************************************************************
;=================================================================
;讀45D主頁數(shù)據(jù)
;頁地址 PA_H,PA_L; 字節(jié)地址 BA_H,BA_L
;讀出來的數(shù)據(jù)放入 DPTR為起始地址,長度 R3,R2
;執(zhí)行完后頁地址PA_H,PA_L;字節(jié)地址BA_H,BA_L由長度LEN_H,LEN_L更新
;=================================================================
;CM_MEM_PAG_RD:
; MOV A,#52H ;讀主程序的操作嘛
;CM_MEM_READ:
; CLR C_CS45 ;CS45=L
; LCALL CSD_OPC_PBA ;發(fā)送操作碼和24字節(jié)
; LCALL CSD_45_8B ;連續(xù)發(fā)4個隨機(jī)字節(jié)
; LCALL CSD_45_8B
; LCALL CSD_45_8B
; LCALL CSD_45_8B
; CJNE R2,#00H,CM_MEM_PAG_RD1
; MOV R2,#0FFH
; LCALL CRD_45_8B
; MOVX @R0,A
; INC R0
; JMP CM_MEM_PAG_RD6
;CM_MEM_PAG_RD1: ;讀出256字節(jié)
; LCALL CRD_45_8B ;讀出一個字節(jié)
; MOV P2,CON3
; MOVX @DPTR,A
; INC DPTR
; DJNZ R2,CM_MEM_PAG_RD1
;CM_MEM_PAG_RD6:
; CJNE R3,#00H,CM_MEM_PAG_RD2
; SJMP CM_MEM_PAG_RD3
;CM_MEM_PAG_RD2:
; DEC R3
; SJMP CM_MEM_PAG_RD1
;CM_MEM_PAG_RD3:
; SETB C_CS45 ;CS45=H
;CM_MEM_PAG_RD4:
; MOV CON,#08H
;CM_MEM_PAG_RD5:
; MOV BA_L,#0
; MOV BA_H,#0
; MOV A,BA_L
; ADD A,#1
; MOV BA_L,A
; DJNZ CON,CM_MEM_PAG_RD5
; CLR C ;連續(xù)讀時頁地址和頁內(nèi)地址的更新
; MOV A,BA_L ;將當(dāng)前的地址設(shè)置為下一次要讀的數(shù)據(jù)的
; ADD A,LEN_L ;地址
; MOV BA_L,A
; MOV A,BA_H
; ADDC A,LEN_H
; MOV BA_H,A
; SETB C
; MOV A,BA_L ;判斷是否要翻頁
; SUBB A,#07H
; MOV A,BA_H
; SUBB A,#01H
; JC RETURN ;不要翻頁
; CLR C ;翻頁;
; MOV A,BA_L
; SUBB A,#08H
; MOV BA_L,A
; MOV A,BA_H
; SUBB A,#01H
; MOV BA_H,A
; MOV A,PA_L
; ADD A,#1
; MOV PA_L,A
; MOV A,PA_H
; ADDC A,#0
; MOV PA_H,A
;RETURN:
; CLR C
; MOV A,PA_L ;頁地址加一
; ADD A,#1
; MOV PA_L,A
; MOV A,PA_H
; ADDC A,#0
; MOV PA_H,A
; RET
;=================================================================
;發(fā)送操作碼
;PA--PA_H,PA_L BA--BA_H,BA_L
;=================================================================
;C;SD_OPC_PBA:
; PUSH PA_H
; PUSH PA_L
; PUSH BA_H
; PUSH BA_L
;; LCALL COMBI_ADD ;
;LCALL CSD_45_8B ;發(fā)送操作碼
; MOV A,PA_H
; LCALL CSD_45_8B ;發(fā)送頁地址低位的第8位和頁地址的高位
;MOV A,PA_L
;LCALL CSD_45_8B ;發(fā)送頁內(nèi)地址的高字節(jié)的最后一位和頁地址的低字節(jié)的前7位
;MOV A,BA_L
;LCALL CSD_45_8B ;發(fā)送頁內(nèi)地址的低八位
;POP BA_L
;POP BA_H
;POP PA_L
;POP PA_H
;RET
;=================================================================
;產(chǎn)生發(fā)送數(shù)據(jù)(由BA_H,BA_L,PA_H,PA_L產(chǎn)生)
;=================================================================
;COMBI_ADD:
; PUSH ACC
; MOV A,BA_H
; RRC A ;將BA_H的最后一位放入C
; MOV A,PA_L ;將BA_H的最后推入PA_L的最后一位PA_L的其它為依次左移
; RLC A ;
; MOV PA_L,A ;將要發(fā)送的第3個字節(jié)放入PA_L
; MOV A,PA_H ;
; RLC A ;將PA_L的最高位推入PA_H的最低位其它的依次左移
; MOV PA_H,A ;將要發(fā)送的第2個字節(jié)放入PA_H
; POP ACC
; RET
;=================================================================
;發(fā)送一字節(jié)數(shù)據(jù)
;=================================================================
;CSD_45_8B:
; MOV B,R2
; MOV R2,#8
;CSD_45_8B1:
; RLC A
; CLR C_SCK45 ;SCK-->L
; JC CSD_45_8B2
; CLR C_SI45 ;SI-->L
; SJMP CSD_45_8B3
;CSD_45_8B2:
; SETB C_SI45 ;SI-->H
;CSD_45_8B3:
; SETB C_SCK45 ;SCK-->H
; DJNZ R2,CSD_45_8B1
; MOV R2,B
; RET
;=================================================================
;讀一個字節(jié)
;=================================================================
;CRD_45_8B:
; SETB C_SO45
; MOV B,R2
; MOV R2,#8
;CRD_45_8B1:
; LCALL CLK_45 ;SCK45 Pules L-->H
; MOV C,C_SO45
; RLC A
; DJNZ R2,CRD_45_8B1
; MOV R2,B
; RET
;=================================================================
;輸出時鐘信號
;=================================================================
;CLK_45:
; CLR C_SCK45 ;SCK -->L
; NOP
; NOP
; NOP
; SETB C_SCK45 ;SCK -->H
; RET
;=================================================================
;45D041初始化
;=================================================================
;INIT_45D:
; MOV DPTR,#AT_45_ADD
; MOV A,#38H
; MOVX @DPTR,A
; SETB C_CS45 ;ORG_Status
; SETB C_RST45 ;CS,RST,SI SCK=H
; SETB C_SI45
; SETB C_SCK45
; LCALL DLY02S
; RET
;=================================================================
;編程一頁512字節(jié)
;長度LEN_H,LEN_L
;=================================================================
;COMPILE_CPU:
; MOV DPTR,#ISP_DATA
; MOV A,PAL1
; CJNE A,#00H,COMPILE_CPU3
; MOV A,PAH1
; CJNE A,#00H,COMPILE_CPU3
; MOV A,#0FFH
; MOVX @DPTR,A
;COMPILE_CPU3:
; LCALL ENABLE_ISP
; MOV FAL,PAL1
; MOV FAH,PAH1
; MOV FCR,#82H
; MOV FCR,#82H
;
; MOV R4,#0
;COMPILE_CPU1:
; LCALL COMPILE_DATA
; DJNZ R4,COMPILE_CPU1
; MOV R4,#0
;COMPILE_CPU2:
; LCALL COMPILE_DATA
; DJNZ R4,COMPILE_CPU2
; MOV SCONF,#00H ;禁止ISP編程功能
; RET
;=================================================================
;編程一個字節(jié),并修改指針:將下次編程的數(shù)據(jù)指針DPTR+1
; 將下次編程地址指針PAH1,PAL1+1
;=================================================================
;COMPILE_DATA:
; PUSH DPL ;編程數(shù)據(jù)指針
; PUSH DPH ;編程數(shù)據(jù)指針
; LCALL ENABLE_ISP
; MOV R5,#09H ;循環(huán)檢驗(yàn)編程數(shù)據(jù)次數(shù)
;COMPILE_DATA1:
; DJNZ R5,COMPILE_DATA2
; LCALL LCD_INI
; MOV DPTR,#CPU_ERR
; LCALL SW_BACK_MODE2
; LJMP $
;; LJMP ERR_CPU ;CPU發(fā)生異常
;COMPILE_DATA2:
; PUSH DPH ;保存編程數(shù)據(jù)指針
; PUSH DPL ;保存編程數(shù)據(jù)指針
; MOVX A,@DPTR
; MOV B,A
; MOV FDATA,A ;將編程數(shù)據(jù)放入編程數(shù)據(jù)寄存器
; MOV FAL,PAL1 ;準(zhǔn)備編程地址
; MOV FAH,PAH1 ;
; MOV FCR,#80H ;開始編程
;
; MOV DPL,PAL1
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -