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

📄 ci910flash.asm.svn-base

📁 keilC底层软件,能够结合硬件产生加解密密文,具有安全保护功能.
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
name	ci910Flash
?ci910Flash	segment   code
	public	ci910Flash
	rseg	?ci910Flash

$include (../include/ci910cpudef.h)

public	_DisplayString5_7
public	_BMPDisplay
public	_SaveWindow
public	_RestoreWindow

public	_XramBCD_ASIIC
public	_BCD_ASIIC
public	_ASIIC_BCD
public	_Xram_ASIIC_BCD
public	_BIN_BCD
public	_BCD_BIN
public	_XramBIN_BCD
public	_XramBCD_BIN
public	_BCD_Add

public	_StringCompare

extrn	code (StoreBmpHead)
extrn	code (ReadLibrary5_7)
extrn	code (BMP_Read)
extrn	code (BMP_Write)

;========================================================================;
	using	0				;using bank0
;========================================================================;
ci910Flash:
;========================================================================;
;void XramBCD_ASIIC(uchar Length,ucharx *BCD_String,ucharx *ASIIC_String);
;-------------------------------;
;Description:   transform string BCD to string ASIIC,The string in static RAM
;	  IN:	R7==Length
;		R4==BCD_String(MSB)
;		R5==BCD_String(LSB)
;		R2==ASIIC_String(MSB)
;		R3==ASIIC_String(LSB)
;	 OUT:	No
;	 USE:	A,B,R0,R1,R7,(A)
;-------------------------------;
_XramBCD_ASIIC:
	mov	dpl,r5
	mov	dph,r4
	movx	a,@dptr
	push	acc
	inc	dptr
	mov	r4,dph
	mov	r5,dpl
	swap	a
	lcall	_BCD_ASIIC1Byte
	mov	dpl,r3
	mov	dph,r2
	movx	@dptr,a							;MSB
	inc	dptr
	pop	acc
	lcall	_BCD_ASIIC1Byte
	movx	@dptr,a							;MSB
	inc	dptr
	mov	r2,dph
	mov	r3,dpl
	djnz	r7,_XramBCD_ASIIC
	ret
;========================================================================;
;void BCD_ASIIC(uchar Length,ucharx *BCD_String,ucharx *ASIIC_String);
;-------------------------------;
;Description:   transform string BCD to string ASIIC.
;	  IN:	R7==Length
;		R4==BCD_String(MSB)
;		R5==BCD_String(LSB)
;		R2==ASIIC_String(MSB)
;		R3==ASIIC_String(LSB)
;	 OUT:	No
;	 USE:	A,B,R0,R1,R7,(A)
;-------------------------------;
_BCD_ASIIC:
	mov	AR0,r3
	mov	AR1,r5
_BCD_ASIIC_Loop:
	mov	a,@r1
	swap	a
	lcall	_BCD_ASIIC1Byte
	mov	@r0,a							;MSB
	inc	r0
	mov	a,@r1
	lcall	_BCD_ASIIC1Byte
	mov	@r0,a							;LSB
	inc	r0
	inc	r1
	djnz	r7,_BCD_ASIIC_Loop
	mov	AR0,r3
	mov	AR1,r5
	ret
;========================================================================;
;uchar  XramBIN_BCD(uchar Length,ucharx *BIN_String,ucharx *BCD_String);
;-------------------------------;
;Description:   converte BIN to BCD format,Data in external memory
;	  IN:	R7==Length
;		R4==BIN pointer(MSB)
;		R5==BIN pointer(LSB)
;		R2==BCD pointer(MSB)
;		R3==BCD pointer(LSB)
;	 OUT:	R7==BCD Length
;	 USE:	A,B,R0,R2,R3,R5,R6,R7
;-------------------------------;
_XramBIN_BCD:
	mov	dpl,r5
	mov	dph,r4
	mov	a,sp
	inc	a
	mov	r0,a
	mov	r5,a
	mov	a,r7
	mov	b,#3						;length*3
	mul	ab
	add	a,r0
	mov	sp,a
	push	AR2
	push	AR3						;copy destination pointer
	mov	a,r0
	add	a,r7
	mov	r3,a						;dest
	mov	b,r7
_XramBINCopy:
	movx	a,@dptr
	mov	@r0,a
	inc	r0
	inc	dptr
	djnz	b,_XramBINCopy
	push	AR7
	lcall	_BIN_BCD
	pop	AR4						;source data length
	mov	b,r7
	mov	r0,AR3
	pop	dpl						;restore destination pointer
	pop	dph
_XramBINResCpy:
	mov	a,@r0
	movx	@dptr,a
	inc	r0
	inc	dptr
	djnz	b,_XramBINResCpy
	mov	a,r4
	mov	b,#3						;length*3
	mul	ab
	inc	a
	mov	b,a
	mov	a,sp
	subb	a,b
	mov	sp,a
	ret
;========================================================================;
;uchar  BIN_BCD(uchar Length,ucharx *BIN_String,ucharx *BCD_String);
;-------------------------------;
;Description:   converte BIN to BCD format,Data in enternal memory
;	  IN:	R7==Length
;		R4==BIN pointer(MSB)
;		R5==BIN pointer(LSB)
;		R2==BCD pointer(MSB)
;		R3==BCD pointer(LSB)
;	 OUT:	R7==BCD Length
;	 USE:	A,B,R0,R2,R3,R5,R6,R7
;-------------------------------;
_BIN_BCD:
	mov	AR0,r3     						;clear target area
	mov	AR6,r7							;copy length
	lcall	Buffer_Clear
	mov	a,r7
	mov	b,#8
	mul	ab
	mov	r2,a							;bin lenght
bin_bcd13:      
	mov	AR0,r5
	mov	b,r7
	clr     c
bin_bcd11:      
	mov     a,@r0
	rlc     a
	mov     @r0,a
	inc     r0
	djnz    b,bin_bcd11
	mov	b,r6
	mov	AR0,r3
bin_bcd12:      
	mov     a,@r0
	addc    a,@r0
	da      a
	mov     @r0,a
	inc     r0
	djnz    b,bin_bcd12
	jnc	bin_bcd131
	mov	@r0,#00h
	inc	r6
	inc	b
	ljmp	bin_bcd12	
bin_bcd131:
	djnz    r2,bin_bcd13
	mov	AR7,r6
	ret
;========================================================================;
;void  XramBCD_BIN(uchar Length,ucharx *BCD_String,ucharx *BIN_String);
;-------------------------------;
;Description:   converte BCD to BIN,Data in external memory
;	  IN:	R7==Length
;		R4==BCD pointer(MSB)
;		R5==BCD pointer(LSB)
;		R2==BIN pointer(MSB)
;		R3==BIN pointer(LSB)
;	 OUT:	No
;	 USE:	A,B,R0,R1,R2,R3,R4,R5,R6,R7
;-------------------------------;
_XramBCD_BIN:
	mov	dpl,r5
	mov	dph,r4
	mov	a,sp
	inc	a
	mov	r0,a						;source buffer
	mov	r5,a
	mov	a,r7
	mov	b,#3
	mul	ab						;length*3
	add	a,r0
	mov	sp,a
	push	AR2
	push	AR3
	clr	c
	subb	a,r7
	mov	r3,a						;dest buffer
	mov	b,r7
_XramBCD_BINCpData:
	movx	a,@dptr
	mov	@r0,a
	inc	dptr
	inc	r0
	djnz	b,_XramBCD_BINCpData
	push	AR7
	lcall	_BCD_BIN
	pop	AR7
	pop	dpl
	pop	dph
	mov	b,r7
	mov	r0,AR3
_XramCopyResult:
	mov	a,@r0
	movx	@dptr,a
	inc	r0
	inc	dptr
	djnz	b,_XramCopyResult
	mov	a,r7
	mov	b,#3
	mul	ab						;length*3
	inc	a
	mov	b,a
	mov	a,sp
	subb	a,b						;sp=sp-1-length*3
	mov	sp,a
	ret
;========================================================================;
;void  BCD_BIN(uchar Length,ucharx *BCD_String,ucharx *BIN_String);
;-------------------------------;
;Description:   converte BCD to BIN,Data in enternal memory
;	  IN:	R7==Length
;		R4==BCD pointer(MSB)
;		R5==BCD pointer(LSB)
;		R2==BIN pointer(MSB)
;		R3==BIN pointer(LSB)
;	 OUT:	No
;	 USE:	A,B,R0,R1,R2,R3,R4,R5,R6,R7
;-------------------------------;
_BCD_BIN:
	cjne	r7,#1,ExchangeDataIni
	ljmp	NoExchange
ExchangeDataIni:
	mov	AR0,r5							;BCD pointer
	mov	a,r5
	add	a,r7
	dec	a
	mov	r1,a							;exchange LSB and MSB
	mov	a,r7
	clr	c
	rrc	a							;length/2
	mov	r6,a
ExchangeDataLoop:
	xch	a,@r0
	xch	a,@r1
	xch	a,@r0
	inc	r0
	dec	r1
	djnz	r6,ExchangeDataLoop
NoExchange:
	mov	AR0,r3							;clear BIN buffer
	lcall	Buffer_Clear
	mov	AR0,r5							;BCD buffer pointer
	mov	AR4,r7							;length
BCD_BIN_Calcul:
	lcall	Mul10
	mov	a,@r0
	swap	a
	anl	a,#0fh
	lcall	AddSum
	lcall	Mul10
	mov	a,@r0
	anl	a,#0fh
	lcall	AddSum
	inc	r0
	djnz	r4,BCD_BIN_Calcul
	ret
;------------------------------------------------------------------------;
Mul10:
	mov	AR6,r7							;length
	mov	AR1,r3							;dest
	mov	r2,#00h
	clr	c
Mul10_Loop:
	mov	a,@r1
	mov	b,#10
	push	psw
	mul	ab
	pop	psw
	addc	a,r2
	mov	@r1,a
	mov	r2,b
	inc	r1
	djnz	r6,Mul10_Loop
	ret
;------------------------------------------------------------------------;
AddSum:
	mov	AR1,r3							;dest
	mov	b,r7							;length
	add	a,@r1
	mov	@r1,a
	djnz	b,AddSumLoop
	ljmp	AddSumExit
AddSumLoop:
	inc	r1
	mov	a,@r1
	addc	a,#00h
	mov	@r1,a
	djnz	b,AddSumLoop
AddSumExit:
	ret
;========================================================================;
;void BCD_Add(uchar Length,ucharx *SourceData1,ucharx *SourceData2);
;-------------------------------;
;Description:   多字节BCD码加法,输入数据都是先低后高
;	  IN:	R7==Length
;		R4==SourceData1(MSB)
;		R5==SourceData1(LSB)
;		R2==SourceData2(MSB)
;		R3==SourceData2(LSB)
;	OUT:	和在SourceData1指向的缓冲区中,最高位进位在CY中
;	USE:	A,B,R2,R3,R4,R5,DPTR
;-------------------------------;
_BCD_Add:
	clr	c
_BCD_AddLoop:
	mov	dpl,r3
	mov	dph,r2
	movx	a,@dptr
	inc	dptr
	mov	r2,dph
	mov	r3,dpl
	mov	b,a
	mov	dpl,r5
	mov	dph,r4
	movx	a,@dptr
	addc	a,b
	da	a
	movx	@dptr,a
	inc	dptr
	mov	r4,dph
	mov	r5,dpl
	djnz	r7,_BCD_AddLoop
	ret
;========================================================================;
;uint Buffer_Clear(uchar TimeLimit);
;-------------------------------;
;Description:   Buffer clear
;	  IN:	R0==Buffer address
;		A ==Length
;	 OUT:	No
;	 USE:	R0,A
;-------------------------------;
Buffer_Clear:
	push	AR7
Buffer_ClearLoop:	
	mov	@r0,#00h
	inc	r0
	djnz	r7,Buffer_ClearLoop
	pop	AR7
	ret
;========================================================================;
;void Xram_ASIIC_BCD(uchar Length,ucharx *ASIIC_String,ucharx *BCD_String);
;-------------------------------;
;Description:   transform string ASIIC to string BCD in external memory
;	  IN:	R7==Length
;		R4==ASIIC_String(MSB)
;		R5==ASIIC_String(LSB)
;		R2==BCD_String(MSB)
;		R3==BCD_String(LSB)
;	 OUT:	No
;	 USE:	A,B,R0,R1,R7,(A)
;-------------------------------;
_Xram_ASIIC_BCD:
	mov	dpl,r5
	mov	dph,r4							;ASCII pointer
	movx	a,@dptr
	lcall	_ASIIC_BCD1Byte
	swap	a							;MSB
	mov	b,a
	inc	dptr
	movx	a,@dptr
	lcall	_ASIIC_BCD1Byte
	orl	a,b
	inc	dptr
	mov	r5,dpl
	mov	r4,dph
	mov	dpl,r3
	mov	dph,r2							;BCD pointer
	movx	@dptr,a
	inc	dptr
	mov	r3,dpl
	mov	r2,dph							;BCD pointer
	djnz	r7,_Xram_ASIIC_BCD
	ret
;========================================================================;
;void ASIIC_BCD(uchar Length,ucharx *ASIIC_String,ucharx *BCD_String);
;-------------------------------;
;Description:   transform string ASIIC to string BCD
;	  IN:	R7==Length
;		R4==ASIIC_String(MSB)
;		R5==ASIIC_String(LSB)
;		R2==BCD_String(MSB)
;		R3==BCD_String(LSB)
;	 OUT:	No
;	 USE:	A,B,R0,R1,R7,(A)
;-------------------------------;
_ASIIC_BCD:
	mov	AR0,r3
	mov	AR1,r5
_ASIIC_BCD_Loop:
	mov	a,@r1
	lcall	_ASIIC_BCD1Byte
	swap	a							;MSB
	mov	b,a
	inc	r1
	mov	a,@r1
	lcall	_ASIIC_BCD1Byte
	orl	a,b
	mov	@r0,a
	inc	r0	
	inc	r1
	djnz	r3,_ASIIC_BCD_Loop
	mov	AR0,r3
	mov	AR1,r5
	ret
;========================================================================;
;uchar	ASIIC_BCD1Byte(uchar Number)
;-------------------------------;
;Description:   transform ASIIC to BCD 
;	  IN:	A==ASIIC
;	 OUT:	A==BCD
;	 USE:	A
;-------------------------------;
_ASIIC_BCD1Byte:
	cjne	a,#'A',ChangChar1
ChangChar1:
	jc	ChangNumb1
	anl	a,#0dfh							;both upcase and lowcase are legal
	subb	a,#37h
	ret
ChangNumb1:
	anl	a,#0fh							;-0x30
	ret
;========================================================================;
;uchar StringCompare(uchar Length,ucharx *String1,ucharx *String2);
;-------------------------------;
;Description:   String compare process
;	  IN:	R7==Length
;		R4==String1 Pointer(MSB)
;		R5==String1 Pointer(LSB)
;		R2==String2 Pointer(MSB)
;		R3==String2 Pointer(LSB)
;	 OUT:	R7==0 String1=String2
;		R7==1 String1<String2
;		R7==2 String1>String2
;	 USE:	A,B,R0,R1,R7
;-------------------------------;
_StringCompare:
	mov	AR1,r5
	mov	AR0,r3
_StringCompareLoop:
	mov	a,@r0
	mov	b,a
	mov	a,@r1
	inc	r0
	inc	r1
	cjne	a,b,_IntStringCompare
	djnz	r7,_StringCompareLoop
	ret
_IntStringCompare:
	jc	_IntString1Less
	mov	r7,#2
	ret
_IntString1Less:
	mov	r7,#1
	ret
;========================================================================;
;uchar	BCD_ASIIC1Byte(uchar Number)
;-------------------------------;
;Description:   transform BCD to ASIIC 
;	  IN:	A==BCD
;	 OUT:	A==ASIIC
;	 USE:	A
;-------------------------------;
_BCD_ASIIC1Byte:
	anl	a,#0fh
	cjne	a,#0ah,ChangChar
ChangChar:
	jc	ChangNumb
	add	a,#37h							;A--Z
	ret
ChangNumb:								;0--9
	add	a,#30h
	ret
;========================================================================;
;void DisplayString5_7(uchar X,uchar Y,ucharx *Spointer);
;-------------------------------;
;Description:   Display 5*7 string on LCD
;	  IN:	R7==X
;		R5==Y
;		R2==Spointer(MSB)
;		R3==Spointer(LSB)
;		PublicVariable1==Length
;		PublicVariable2==DispMode
;		PublicVariable3==BackGroundColor
;	 OUT:	No
;	 USE:	
;-------------------------------;
_DisplayString5_7:
	mov	AR1,r3
	lcall	EnterModifyReadMode				;LCD enter modify-read mode
	push	DataPointer1
	push	DataPointer2
	mov	a,sp
	inc	a
	mov	DataPointer1,a
	add	a,#6
	mov	DataPointer2,a
	add	a,#6
	mov	sp,a
	
	push	TempBitVariable
	push	AddressRegL
	push	AddressRegH
	push	CharInterval
	push	PageReg1
	push	PageReg2
	push	HideReg1
	push	HideReg2
	push	LengthX
	push	DispPageCopy
	push	HideReg1Copy
	push	DeltaYCopy
	push	ColumnNum
	push	BackgroundColor1
	push	BackgroundColor2
	
	mov	r4,#6						;r2==column number
	lcall	DisplayConfig
	mov	AddressRegL,#LOW(Char5_7Add)
	mov	AddressRegH,#HIGH(Char5_7Add)			;library 5*7 address in flash
	mov	a,PageReg2
	clr	c
	subb	a,PageReg1
	inc	a
	mov	DeltaYCopy,a					;copy △Y DeltaYCopy=Y2/8-Y1/8+1
Dislay5_7LoopX:							;X loop
	mov	HideReg1,HideReg1Copy				;restore Hide control register 1
	mov	PageReg1,DispPageCopy				;restore page address
	mov	PageReg2,DeltaYCopy				;restore DeltaY
	clr	TempBit1
String5_7LoopYIni:
	mov	r0,DataPointer2
String5_7LoopY:							;display Y loop
	mov	a,PageReg2
	cjne	a,#1,Display5_7NoEndLine			;end line ?
	mov	HideReg1,HideReg2				;restore Hide control register 2
	mov	r0,DataPointer2
Display5_7NoEndLine:
	jb	TempBit1,String5_7WriteData			;TempBit1==reread library flag
	mov	dpl,r1
	mov	dph,r2
	movx	a,@dptr
	inc	dptr
	mov	r1,dpl
	mov	r2,dph
	mov	dpl,AddressRegL
	mov	dph,AddressRegH
	clr	c
	subb	a,#20h						;ASIIC code
	mov	b,#6
	mul	ab
	add	a,dpl
	mov	dpl,a						;to find ASIIC code address in library
	mov	a,b
	addc	a,dph
	mov	dph,a
	mov	r5,#6						;LengthX==ColumnNum/2
	lcall	ReadLibrary5_7
String5_7WriteData:
	lcall	SetLCDAddress					;set display address
	mov	LengthX,#6
	push	AR2
	lcall	WriteDisplayData
	pop	AR2
Display5_7NextPage:
	mov	HideReg1,#0
	inc	PageReg1					;page increment
	djnz	PageReg2,String5_7LoopYIni			;Y loop

	mov	a,LengthX					;LengthX==column number
	add	a,CharInterval					;x increment to display next word
	add	a,r7
	mov	r7,a
	djnz	PublicVariable1,Dislay5_7LoopX			;X loop
	lcall	ResetModifyReadMode

	pop	BackgroundColor2
	pop	BackgroundColor1
	pop	ColumnNum
	pop	DeltaYCopy
	pop	HideReg1Copy
	pop	DispPageCopy
	pop	LengthX
	pop	HideReg2
	pop	HideReg1
	pop	PageReg2
	pop	PageReg1
	pop	CharInterval
	pop	AddressRegH
	pop	AddressRegL
	pop	TempBitVariable

⌨️ 快捷键说明

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