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

📄 led.a51

📁 keil下ISO7816规则的APDU程序
💻 A51
📖 第 1 页 / 共 2 页
字号:
;	MOV DPH,PAH1
;	CLR A
;	MOVC A,@A+DPTR
;	POP DPL			;返回编程数据指针		
;	POP DPH			;返回编程数据指针
;	CJNE A,B,COMPILE_DATA1
;;				;编程OK
;	CLR C
;;	MOV A,PAL1
;	ADD A,#1		;编程地址+1
;	MOV PAL1,A
;	MOV A,PAH1
;	ADDC A,#0
;	MOV PAH1,A
;;	POP DPH
;	POP DPL
;	INC DPTR		;编程数据指针+1
;	RET
;=================================================================

;=================================================================
;READ_START_ADD:
;	MOV PA_H,#01H		;45D041页高位地址
;	MOV PA_L,#00H		;45D041页低位地址
;	MOV BA_H,#0		;45D041页内偏移地址高位
;	MOV BA_L,#20H		;45D041页内偏移地址低位
;	MOV DPTR,#30H		;
;;	MOV CON3,#0
;	MOV R2,#18H		;程序名称8个字节	程序存放的地址4个字节	
;	MOV R3,#0		;程序的长度4个字节	程序的时间8个字节
;	LCALL CM_MEM_PAG_RD	;读出程序起始地址和数据长度
;	RET
;;==================================================================
;Delay 0.1,0.2,0.3,0.4,0.5 Sec 11.0592M
;==================================================================
;DLY05S:MOV R6,#00H	;0.5S
;       SJMP DLY0X1
;DLY04S:MOV R6,#200	;0.4S
;       SJMP DLY0X1
;DLY03S:MOV R6,#150	;0.3S
;       SJMP DLY0X1
DLY02S:MOV R6,#100	;0.2S
       SJMP DLY0X1
DLY01S:MOV R6,#150	;0.1S
;
DLY0X1:MOV R7,#00H	;1T
DLY0X2:NOP		;1T
       NOP		;1T
       NOP		;1T
       NOP		;1T
       NOP		;1T
       DJNZ R7,DLY0X2	;2T
       DJNZ R6,DLY0X1
       RET
;============================================================
;读出卡类下载程序信息放
;============================================================
;RED_INFO:
;	LCALL INIT_45D
;	LCALL READ_START_ADD	;读出代码长度x:1100H长度的低字节x:1101H长度的高字节
;				;读出程序时间
;	MOV P2,#0
;	MOV DPTR,#PRO_DATE
;	MOVX A,@DPTR
;	MOV CON,A
;	INC DPTR
;	MOVX A,@DPTR
 ;	MOV B,A
;	MOV A,CON
;	MOVX @DPTR,A
;	MOV DPTR,#PRO_DATE
;	MOV A,B
;	MOVX @DPTR,A
;	RET
;ENABLE_ISP:
 ;	MOV SCONF,#04H            ;ISP enable
;	MOV FDATA,#55H             ;FDAT-ISPFD (SM5964) 
;	MOV FDATA,#0AAH
;	MOV FDATA,#55H
;	RET
;=========================================================
;读一页512字节
;=========================================================
;READ_PAGE:
;	MOV DPTR,#2000H
;	MOV CON3,#20H	
;	MOV R2,#0H		;256一页后8个字节不用		
;	MOV LEN_L,R2
;	MOV R3,#01H		;编程从0000H~FBFFH		
;	MOV LEN_H,R3		;读取长度为256起始页地址0x104   偏移地址0x00
;	LCALL CM_MEM_PAG_RD	;取去长度为LEN_H,LEN_L的编程数据放入ISP_BUFFER并更新041卡地址
;	MOV CON3,#21H
;	MOV DPTR,#2100H
;	MOV R2,#0H		;256一页后8个字节不用		
;	MOV LEN_L,R2
;	MOV R3,#01H		;编程从0000H~FBFFH		
;	MOV LEN_H,R3		;读取长度为256起始页地址0x104   偏移地址0x00
;	LCALL CM_MEM_PAG_RD	;取去长度为LEN_H,LEN_L的编程数据放入ISP_BUFFER并更新041卡地址
;				;将时间,是否第一次编程标志,应用程序前3个字节放入	
;	RET
;;=======================================================
;初始化LED
;=======================================================
LED_DRIV:
;=======================================================
;LCD Initial (Bias 1/3 Duty 1/4 RC256K,TONE 2K)
;=======================================================
LCD_INI:
;      	PUSH IMG_EX
       	LCALL IC_CARD_DN	     ;Disable IC Card
       	LCALL EE_MEM_DN	     ;EE MEM OP Disable

      	LCALL ENLCD	     ;LCD enable
       	LCALL RC256	     ;In chip RC 256K OSC
       	LCALL BS3DT4	     ;Bias -- 1/3; Duty -- 1/4
       	LCALL TONE2K	     ;Tone 2KHz
       	LCALL LCDON	     ;LCD Display On
;	LCALL SW_BACK_MODE2

;       POP IMG_EX
;       PUSH DPH
;       PUSH DPL
;       MOV A,IMG_EX
;       MOV DPTR,#EXIO 
;       MOVX @DPTR,A             
;       POP DPL
;       POP DPH
;              
;      LCALL SET_LCD_BUF     ;Set all LCD dispaly buffer
       	LCALL ALL_LCD
;      	LCALL BEEP	     ;Beep & Delay
      	LCALL CLR_LCD_BUF     ;Clear all LCD display buffer   
       	LCALL ALL_LCD
       	RET
;=======================================================
;
;=======================================================
IC_CARD_DN:
       PUSH ACC	
       MOV A,#0F7H		;CD_EN--D3=L 
       LJMP EXIO_BIT_OF
EE_MEM_DN:
       PUSH ACC	
       MOV A,#7FH		;M_PR--D7=L 
       LJMP EXIO_BIT_OF 


       EXIO_BIT_OF:
       PUSH DPL
       PUSH DPH
       MOV DPTR,#EXIO
       ANL IMG_EX,A
       MOV A,IMG_EX	     
       MOVX @DPTR,A
       POP DPH
       POP DPL
       POP ACC       
       RET 




;===================================================
;LCD Enable (turn on LCD system oscillator)
;===================================================
ENLCD:
       LCALL LCDCMD	     ;LCD Command 1 0 0
       MOV A,#01H
       LCALL LCD_CMD_9B      ;Write 9 bit(A+X)
       SETB LCDM
       RET


;==================================================
;RC 256K (On Chip RC 256K Oscillator)
;==================================================
RC256:
       LCALL LCDCMD	     ;LCD Command 1 0 0
       MOV A,#18H
       LCALL LCD_CMD_9B      ;Write 9 bit(A+X)
       SETB LCDM
       RET


;===================================================
;BIAS 1/3 (LCM 1/3 bias option) Duty 1/4
;===================================================
BS3DT4:
       LCALL LCDCMD	     ;LCD Command 1 0 0
       MOV A,#29H
       LCALL LCD_CMD_9B      ;1/3 Bias 1/4 Duty
       SETB LCDM
       RET


;===================================================
;TONE 2K (Tone frequency 2 KHz)
;===================================================
TONE2K:
       LCALL LCDCMD	     ;LCD Command 1 0 0
       MOV A,#60H
       LCALL LCD_CMD_9B      ;Write 9 bit(A+X)
       SETB LCDM
       RET


;===================================================
;LCD ON (turn on LCD bias generator)
;===================================================
LCDON:
      	LCALL LCDCMD	     ;LCD Command 1 0 0
      	MOV A,#03H
       	LCALL LCD_CMD_9B      ;Write 9 bit(A+X)
       	SETB LCDM
       	RET


;===================================================
;First 3 BIT LCD Command Mode
;===================================================
LCDCMD:
       MOV R2,#03H
       MOV A,#80H	     ;1 0 0 X X X X X
       CLR LCDM
LCDCMD1:
       RLC A
       MOV DT0,C
       LCALL WRPULSE
       DJNZ R2,LCDCMD1
       RET


;===================================================
; 9 BIT LCD Command  C8 -- C0 (C8-C1-->A C0--X)
;===================================================
LCD_CMD_9B:
       MOV R2,#08H	     ;C8 - C1 -->LCD
       CLR LCDM
LCD_CMD_9B1:
       RLC A
       MOV DT0,C
       LCALL WRPULSE
       DJNZ R2,LCD_CMD_9B1
       SETB DT0
       LCALL WRPULSE	     ;9th X=1
       RET


WRPULSE:
       CLR WRS
       NOP
       NOP
       NOP
       NOP
       NOP
       NOP
       SETB WRS
       RET


;===================================================
;SET/Clear LCD display buffer(32-4BIT -- 16 byte)
;===================================================
;SET_LCD_BUF:
;       MOV A,#0FFH
;       SJMP SC_LCD_BUF
CLR_LCD_BUF:
       CLR A
SC_LCD_BUF:
       MOV R0,#LCD_DIG_BUF   ;LCD_DIG_BUF 10
       MOV R2,#12	     ;LCD_LOG_BUF  2
SC_LCD_BUF1:
       MOV @R0,A
       INC R0
       DJNZ R2,SC_LCD_BUF1
       RET

;===============================================================
;LCD ALL Display (LCD_DIG_BUF:10-1 Digital & LCD_LOG_BUF:16 LOG)
;===============================================================
ALL_LCD:
       PUSH ACC
       MOV A,R3
       PUSH ACC
       MOV A,R0
       PUSH ACC       
;       
       PUSH IMG_EX
       LCALL IC_CARD_DN	     ;Disable IC Card
       LCALL EE_MEM_DN	     ;EE MEM OP Disable
;
       MOV A,#00H
       LCALL LCD_WR_ADD      ;Start addr in A
;
       MOV R3,#2
       MOV R0,#LCD_LOG_BUF   ;LOG Data Write In
ALL_LCD1:
       MOV A,@R0
       INC R0
       LCALL LCD8BW	     ;Write 8 bit
       DJNZ R3,ALL_LCD1      ;D0 -- D3,D0 -- D3
;
       MOV R3,#8	     ;4+4(not used)
       MOV R0,#LCD_DIG_BUF   ;Digital D10,9,8,7
ALL_LCD2:
       MOV A,@R0
       INC R0
       LCALL LCD8BW	     ;Write 8 bit
       DJNZ R3,ALL_LCD2      ;D0 -- D3,D0 -- D3
;
       MOV R3,#6
       MOV R0,#LCD_DIG_BUF+4 ;Digital D6,5,4,3,2,1
ALL_LCD3:
       MOV A,@R0
       INC R0
       LCALL LCD8BW	     ;Write 8 bit
       DJNZ R3,ALL_LCD3      ;D0 -- D3,D0 -- D3
       SETB LCDM
       SETB DT0
;
       POP IMG_EX
       PUSH DPH
       PUSH DPL
       MOV A,IMG_EX
       MOV DPTR,#EXIO 
       MOVX @DPTR,A             
       POP DPL
       POP DPH
;
       POP ACC
       MOV R0,A
       POP ACC
       MOV R3,A 
       POP ACC
       RET




;===================================================
;LCD Read/Write Command and 6 bit address(A5=0)
;===================================================
LCD_RD_ADD:
       ORL A,#0C0H	     ;1  1  0	 X  X  X  X  X
       SJMP LCD_ADD	     ;	      A5 A4 A3 A2 A1 A0
LCD_WR_ADD:
       ORL A,#0A0H	     ;1  0  1	 X  X  X  X  X
LCD_ADD:		     ;	      A5 A4 A3 A2 A1 A0
       CLR LCDM
       MOV R2,#03H
LCD_ADD1:
       RLC A
       MOV DT0,C
       LCALL WRPULSE
       DJNZ R2,LCD_ADD1
       CLR DT0		     ;A5=0
       LCALL WRPULSE
       MOV R2,#05H	     ;A4 A3 A2 A1 A0
LCD_ADD2:
       RLC A
       MOV DT0,C
       LCALL WRPULSE
       DJNZ R2,LCD_ADD2
       RET


LCD8BW:
       MOV R2,#08H
       CLR LCDM
LCD8BW1:
       RLC A
       MOV DT0,C
       LCALL WRPULSE
       DJNZ R2,LCD8BW1
       RET


;===================================================
;BEEP & Delay (by Tone On & Tone Off)
;===================================================
;BEEP:
;       PUSH IMG_EX
;       LCALL IC_CARD_DN	     ;Disable IC Card
;       LCALL EE_MEM_DN	     ;EE MEM OP Disable
;
;       LCALL TONON	     ;Tone On
;       LCALL DLY02S
;       LCALL TONOFF	     ;Tone Off
;
;       POP IMG_EX
;       PUSH DPH
;       PUSH DPL
;       MOV A,IMG_EX
;       MOV DPTR,#EXIO 
;       MOVX @DPTR,A             
;       POP DPL
;       POP DPH       
;       RET

;===================================================
;TONE OFF (turn off tone outputs)
;===================================================
;TONON:
;       LCALL LCDCMD	     ;LCD Command 1 0 0
;       MOV A,#09H
;       LCALL LCD_CMD_9B      ;Write 9 bit(A+X)
;       SETB LCDM
;       RET

;===================================================
;TONE OFF (turn off tone outputs)
;===================================================
;TONOFF:
;       LCALL LCDCMD	     ;LCD Command 1 0 0
;       MOV A,#08H
;       LCALL LCD_CMD_9B      ;Write 9 bit(A+X)
;       SETB LCDM
;       RET


;===================================================
;Load LCD Prompt Info Table to [R0],R2 len
;===================================================
LD_PROMPT_TB:
	PUSH ACC
	MOV A,R0
	PUSH ACC
LD_PROMPT_TB1:
	CLR A
	MOVC A,@A+DPTR
	MOV @R0,A
	INC R0
	INC DPTR
	DJNZ R2,LD_PROMPT_TB1
	POP ACC
	MOV R0,A
	POP ACC
	RET

;===================================================
;Switch Back On/Off by SM2965 ISP "SET+8"
;===================================================
SW_BACK_MODE2:
	MOV R0,#LCD_DIG_BUF	  ;LCD Display Buffer
	MOV R2,#10
;	MOV DPTR,#ISP_PSW_TB
	LCALL LD_PROMPT_TB	  ;"ISP ______"
	LCALL ALL_LCD
	RET
;=======================================================
;CPU异常
;=======================================================
;ERR_CPU:
;	JMP $
;=======================================================
;正在下载
;=======================================================
;DISPLAY_LOAD:
;	RET
;=======================================================
;下载OK
;=======================================================
;LOAD_OK:
;	RET
;
;KTD1101:
;	DB 4BH,54H,44H,31H,31H,30H,31H
ISP_PSW_TB:
	DB 0EEH,0ECH,76H,0B6H,40H,40H,40H,40H,40H,40H	 ;"ISP ______"
;CPU_ERR:
;	DB 0A0H,0DAH,0ECH,00H,0F8H,60H,60H,40H,40H,40H	 ;"ISP Err____"
	
END








⌨️ 快捷键说明

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