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

📄 ci910cpu.asm.svn-base

📁 keilC底层软件,能够结合硬件产生加解密密文,具有安全保护功能.
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
	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 + -