📄 ci910cpu.asm.svn-base
字号:
lcall _GetCharPro
cjne r7,#TimerOut,KeyCheckPower ;disable auto power off
ajmp KeyCheckEnterPro
KeyCheckPower:
lcall _ShutPowerCheckPro
KeyCheckEnterPro:
cjne r7,#KEYENTER,KeyCheckNoEnter
inc SubMenuNumber
KeyCheckNoEnter:
mov a,r7
mov b,#7
mul ab
add a,#LOW(KeyBoardMap)
mov dpl,a
mov a,b
addc a,#HIGH(KeyBoardMap) ;get address
mov dph,a
lcall ReadTable
dec a
dec a
mov r7,a ;X1
lcall ReadTable
dec a
mov r5,a ;Y1
add a,#14
mov PublicVariable1,a ;Y2
inc dptr ;skip display length
lcall ReadTable ;read length
mov b,#6
mul ab
add a,r7
add a,#5
mov r3,a ;X2
lcall _ReverseRectanglePro
mov a,SubMenuNumber
cjne a,#2,KeyCheckLoop
pop SubMenuNumber
ret
;========================================================================;
;Description: LCD selfcheck
; IN: No
; OUT: No
; USE: A,B,R4,R5,R6,R7,DPTR(...)
;-------------------------------;
LCD_SelfCheck:
mov r7,#00h
mov r6,#00h
lcall Lcd_CheckWindowH
mov r7,#00h
mov r6,#55h
lcall Lcd_CheckWindowH
mov r7,#00h
mov r6,#0ffh
lcall Lcd_CheckWindowV
mov r7,#55h
mov r6,#00h
lcall Lcd_CheckWindowH
mov r7,#0ffh
mov r6,#00h
lcall Lcd_CheckWindowV
mov r7,#55h
mov r6,#55h
lcall Lcd_CheckWindowH
mov r7,#0ffh
mov r6,#0ffh
lcall Lcd_CheckWindowV
lcall GrayCheck
mov r5,#0ffh ;r6==data1
mov r7,#0ffh ;r7==Data2
lcall ClearLCDPro ;for test used
mov r6,#0
mov r7,#200 ;10 second limited
mov r5,#1 ;buzzer enable
lcall _GetCharPro
ret
;========================================================================;
;void Lcd_CheckWindowV(uchar Data1,uchar Data2);
;-------------------------------;
;Description: LCD check vertical
; IN: R7==data 1
; R6==data 2
; OUT: No
; USE: A,B,R3,R4,R5,DPTR
;-------------------------------;
Lcd_CheckWindowV:
mov r5,#0b0h ;page
LCD_CheckVLoop1:
mov dptr,#LCD_CommandPort
mov a,r5
movx @dptr,a ;write page address
clr a
movx @dptr,a ;write column address LSB
mov a,#10h
movx @dptr,a ;write column address MSB
mov r4,#64
mov dptr,#LCD_DataPort
CheckColumnVLoop1:
mov a,r7
movx @dptr,a ;write data1
mov a,r6
movx @dptr,a ;write data2
clr a
movx @dptr,a ;write data1
movx @dptr,a ;write data2
djnz r4,CheckColumnVLoop1
inc r5
cjne r5,#0c0h,LCD_CheckVLoop1
mov r6,#0
mov r7,#40 ;2 second limited
mov r5,#1 ;buzzer enable
lcall _GetCharPro
ret
;========================================================================;
;void Lcd_CheckWindowH(uchar Data1,uchar Data2);
;-------------------------------;
;Description: LCD check horizon
; IN: R7==data 1
; R6==data 2
; OUT: No
; USE: A,B,R3,R4,DPTR
;-------------------------------;
Lcd_CheckWindowH:
mov r5,#0b0h ;page
LCD_CheckLoop1:
mov dptr,#LCD_CommandPort
mov a,r5
movx @dptr,a ;write page address
clr a
movx @dptr,a ;write column address LSB
mov a,#10h
movx @dptr,a ;write column address MSB
mov r4,#128
mov dptr,#LCD_DataPort
CheckColumnLoop1:
mov a,r7
movx @dptr,a ;write data1
mov a,r6
movx @dptr,a ;write data2
djnz r4,CheckColumnLoop1
inc r5
cjne r5,#0c0h,LCD_CheckLoop1
mov r6,#0
mov r7,#40 ;2 second limited
mov r5,#1 ;buzzer enable
lcall _GetCharPro
ret
;========================================================================;
;void GrayCheck(void);
;-------------------------------;
;Description: LCD gray check
; IN: No
; OUT: No
; USE: A,B,R3,R4,DPTR
;-------------------------------;
GrayCheck:
mov r7,#0
mov r5,#0
mov r3,#127
mov PublicVariable1,#127
mov PublicVariable2,#43h
lcall _DrawRectanglePro
mov r7,#65
mov r5,#1
mov r3,#126
mov PublicVariable1,#63
mov PublicVariable2,#05h ;light gray
lcall _ClearWindowPro
mov r7,#1
mov r5,#65
mov r3,#63
mov PublicVariable1,#126
mov PublicVariable2,#06h ;dark gray
lcall _ClearWindowPro
mov r7,#65
mov r5,#65
mov r3,#126
mov PublicVariable1,#126
mov PublicVariable2,#07h ;dark
lcall _ClearWindowPro
mov r7,#64
mov r5,#1
mov r3,#64
mov PublicVariable1,#126
mov PublicVariable2,#03h
lcall _DrawLinePro
mov r7,#1
mov r5,#64
mov r3,#126
mov PublicVariable1,#64
mov PublicVariable2,#03h
lcall _DrawLinePro
mov r6,#0
mov r7,#40 ;2 second limited
mov r5,#1 ;buzzer enable
lcall _GetCharPro
ret
;========================================================================;
OthersCheck:
mov r7,#5 ;X1
mov r5,#30 ;Y1
mov r3,#122 ;X2
mov PublicVariable1,#100 ;Y2
mov PublicVariable2,#03h ;color
lcall _DrawRectanglePro ;draw rectangle
mov b,#10
mov dptr,#HardName
lcall MemoryCopy
mov r7,#15 ;X
mov r5,#40 ;Y
mov r2,#HIGH(ExternTempBuffer) ;pointer(MSB)
mov r3,#LOW(ExternTempBuffer) ;pointer(LSB)
mov PublicVariable1,#4 ;length
lcall DisplayInfPro1 ;encryptor
mov r7,#15 ;X
mov r5,#60 ;Y
mov r2,#HIGH(ExternTempBuffer+4) ;pointer(MSB)
mov r3,#LOW(ExternTempBuffer+4) ;pointer(LSB)
mov PublicVariable1,#4 ;length
lcall DisplayInfPro1 ;SRAM
mov r7,#15 ;X
mov r5,#80 ;Y
mov r2,#HIGH(ExternTempBuffer+8) ;pointer(MSB)
mov r3,#LOW(ExternTempBuffer+8) ;pointer(LSB)
mov PublicVariable1,#2 ;length
lcall DisplayInfPro1 ;RTC
lcall EncryptorSelfCheckPro ;encryptor selfcheck
mov r5,#40 ;Y
lcall DispCheckResult
lcall SRAM_SelfCheck
mov r5,#60 ;Y
lcall DispCheckResult
lcall RTC_SelfCheck ;RTC selfcheck
mov r5,#80 ;Y
lcall DispCheckResult
mov r6,#0
mov r7,#200 ;10 second limited
mov r5,#1 ;buzzer enable
lcall _GetCharPro
cjne r7,#TimerOut,OthersShutPowerCheck ;disable auto power off
ret
OthersShutPowerCheck:
lcall _ShutPowerCheckPro
ret
;========================================================================;
DispCheckResult:
cjne r7,#00h,ResultError
mov b,#4
mov dptr,#PassInf
ajmp ReadResult
ResultError:
mov b,#5
mov dptr,#ErrorInf
ReadResult:
lcall MemoryCopy
mov r7,#78 ;X
mov r2,#HIGH(ExternTempBuffer) ;pointer(MSB)
mov r3,#LOW(ExternTempBuffer) ;pointer(LSB)
mov PublicVariable1,b ;length
mov PublicVariable2,#13h ;display color
mov PublicVariable3,#41h ;library select
lcall _StringDisplayPro
ret
;========================================================================;
DrawWindow:
mov r7,#7 ;X1
mov r5,#35 ;Y1
mov r3,#120 ;X2
mov PublicVariable1,#90 ;Y2
mov PublicVariable2,#(ColorBlack or (ColorDarkGray shl 3) or 20h) ;Display mode
lcall _DrawRectanglePro
ret
;========================================================================;
DisplayInformation:
push dpl
push dph
push b
push AR7
lcall DrawWindow
pop AR7
pop b
pop dph
pop dpl
mov PublicVariable1,b ;length
lcall MemoryCopy
mov r5,#56 ;Y
mov r2,#HIGH(ExternTempBuffer) ;pointer(MSB)
mov r3,#LOW(ExternTempBuffer) ;pointer(LSB)
DisplayInfPro1:
mov PublicVariable2,#03h ;display color
mov PublicVariable3,#41h ;library select
lcall _StringDisplayPro ;being selfcheck
ret
;========================================================================;
;Description: SRAM selfcheck
; IN: No
; OUT: R7==0(pass)
; ==1(error)
; USE: R7,(A,B,R5,R6,R7,DPTR)
;-------------------------------;
SRAM_SelfCheck:
lcall XRAM_CheckPro
cjne r7,#00h,SRAM_Exit
lcall XRAM_CheckPro
cjne r7,#00h,SRAM_Exit
SRAM_Exit:
ret
;========================================================================;
;uchar EncryptorSelfCheck(void);
;-------------------------------;
;Description: Encryptor selfcheck
; IN: No
; OUT: R7==0 Success
; R7==1 Error occurs
; USE: A,R1
;-------------------------------;
EncryptorSelfCheckPro:
anl ControlStatus,#_Bit_SSX_Rst ;reset over
lcall ChangeStatusPro
mov dptr,#(ExternTempBuffer)
mov a,#SecrecierSelfCheck
movx @dptr,a
inc dptr
mov a,#0
movx @dptr,a
mov r7,#LOW(ExternTempBuffer)
mov r6,#HIGH(ExternTempBuffer)
lcall _EncryptorAccessPro
cjne r7,#Success,EncryptError
mov dptr,#ExternTempBuffer
movx a,@dptr
cjne a,#SecrecierCheckAns,EncryptError
inc dptr
inc dptr ;pointe to check result
inc dptr
movx a,@dptr
cjne a,#Success,EncryptPass2Check
ljmp EncryptOk
EncryptPass2Check:
cjne a,#13h,EncryptError
EncryptOk:
mov r7,#Success
ljmp EncryptExit
EncryptError:
mov r7,#Failure ;check error flag
EncryptExit:
orl ControlStatus,#Bit_SSX_Rst ;reset
lcall ChangeStatusPro
ret
;========================================================================;
;uchar XRAM_Check(void);
;-------------------------------;
;Description: Sram check
; IN: No
; OUT: R7==0 OK
; R7!=0 Error occurs
; USE: A,B,R5,R6,R7,DPTR
;-------------------------------;
XRAM_CheckPro:
mov r7,#SRamSize
mov dptr,#SRAM_Add
mov b,#CheckSumIniValu
mov a,#1
XRAM_Write:
mov r6,#4
mov r5,#0
XRAM_WriteLoop:
movx @dptr,a ;write data
xrl b,a
inc a
inc dptr
djnz r5,XRAM_WriteLoop
djnz r6,XRAM_WriteLoop
djnz r7,XRAM_Write
mov r7,#SRamSize
mov dptr,#SRAM_Add
push b ;copy check
mov b,#CheckSumIniValu
XRAM_CheckIni:
mov r6,#4
mov r5,#0
XRAM_CheckLoop:
movx a,@dptr
xrl b,a
inc dptr
djnz r5,XRAM_CheckLoop
djnz r6,XRAM_CheckLoop
djnz r7,XRAM_CheckIni
pop acc
cjne a,b,CheckSramError ;R7!=0 error occurs
mov r7,#Success
ret
CheckSramError:
mov r7,#Failure
ret ;SRAM OK
;========================================================================;
;uchar XramStringCompare(uchar xdata *StringPt1,uchar xdata *StringPt2,uchar Length);
;-------------------------------;
;Description: Compare the string in external memory
; IN: R6==StringAdd1(MSB)
; R7==StringAdd1(LSB)
; R4==StringAdd2(MSB)
; R5==StringAdd2(LSB)
; R3==Length
; OUT: R7==0 String1=String2
; R7==1 String1<String2
; R7==2 String1>String2
; USE:
;-------------------------------;
_XramStringComparePro:
mov dpl,r7
mov dph,r6
movx a,@dptr
inc dptr
mov r7,dpl
mov r6,dph
mov b,a
mov dpl,r5
mov dph,r4
movx a,@dptr
inc dptr
mov r5,dpl
mov r4,dph
cjne a,b,_XramStringComp
djnz r3,_XramStringComparePro
mov r7,#0
ret
_XramStringComp:
jc _XramString1Great
mov r7,#1
ret
_XramString1Great:
mov r7,#2
ret
;========================================================================;
;uchar XromStringCompare(uchar xdata *StringPt1,uchar xdata *StringPt2,uchar Length);
;-------------------------------;
;Description: Compare the content in external FLASH
; IN: R6==StringAdd1(MSB)
; R7==StringAdd1(LSB)
; R4==StringAdd2(MSB)
; R5==StringAdd2(LSB)
; R3==Length
; PublicVariable1==page
; OUT: R7==0 String1=String2
; R7==1 String1<String2
; R7==2 String1>String2
; USE:
;-------------------------------;
_XromStringComparePro:
push ControlStatus ;zdhx
mov a,PublicVariable1
rlc a
anl a,#0eh
orl ControlStatus,a
lcall ChangeStatusPro ;chip enable LCD
lcall _XramStringCompare
pop ControlStatus ;zdhx
lcall ChangeStatusPro
ret
;========================================================================;
;Description: Draw soft keyboard on LCD
; IN: No
; OUT: No
; USE: A,B,R3,R4,R5,R6,(A,R2,R3,R4,R5,R7)
;-------------------------------;
DrawKeyBoard:
mov r7,#0 ;X1
mov r5,#20 ;Y1
mov r3,#127 ;X2
mov PublicVariable1,#113 ;Y2
mov PublicVariable2,#(ColorBlack or (ColorDarkGray shl 3) or 20h) ;Display mode
lcall _DrawRectanglePro
mov r7,#1
mov r5,#52
mov r3,#126
mov PublicVariable1,#52
mov PublicVariable2,#01h
lcall _DrawLinePro
mov r7,#1
mov r5,#92
mov r3,#126
mov PublicVariable1,#92
mov PublicVariable2,#01h
lcall _DrawLinePro
push Index
mov Index,#20
DrawKeyBoardLoop:
clr c
mov a,#20
subb a,Index
mov b,#7
mul ab
add a,#LOW(KeyBoardMap)
mov dpl,a
mov a,b
addc a,#HIGH(KeyBoardMap) ;get address
mov dph,a
lcall ReadTable
mov r7,a ;X
lcall ReadTable
mov r5,a ;Y
lcall ReadTable
mov PublicVariable1,a ;display length
mov b,a ;data Length(bytes)
inc dptr ;skip datus length
lcall MemoryCopy
mov r2,#HIGH(ExternTempBuffer) ;pointer
mov r3,#LOW(ExternTempBuffer)
mov PublicVariable2,#ColorBlack ;DispMode
mov PublicVariable3,#01h ;LibSelect
lcall _StringDisplayPro
djnz Index,DrawKeyBoardLoop
pop Index
ret
;========================================================================;
;void ShutPowerCheck(uchar KeyValue);
;-------------------------------;
;Description: CPU local repeating until any key pressed
; IN: R7==Key value
; OUT: No
; USE: R7
;-------------------------------;
_ShutPowerCheckPro:
cjne r7,#TimerOut,ShutPowerKeyScan
lcall ShutPowerPro
ShutPowerKeyScan:
cjne r7,#KeySwitch,ShutPowerCheckExit ;judg shut power key
lcall S
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -