📄 led.a51
字号:
; 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 + -