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

📄 ci910cpu.asm.svn-base

📁 keilC底层软件,能够结合硬件产生加解密密文,具有安全保护功能.
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
;===============================================================================================;
;****|  										  |****=;
;****|  		      Description of this Program:				  |****=;
;****|  	     -------------------------------------------			  |****=;
;****|    Timer0: interrupt one times when enabled,The next interrupt must be reenable    |****=;
;****|    Timer1: baud rate generator						          |****=;
;****|	     	1.  as baud rate generator when communication			          |****=;
;****|		2.  as WatchDog when working normally				          |****=;
;****|	  Serial interrupt: Reserve(The ISR entrance point to WorkAddress+0x23)	          |****=;
;****|	  External interrupt 0: Reserve(The ISR entrance point to WorkAddress+0x03)       |****=;
;****|	  External interrupt 1: Reserve(The ISR entrance point to WorkAddress+0x13)       |****=;
;****|	  Attention: program must rewrite WatchDogCounter with WatchDogValue within       |****=;
;****|		     WatchDogValue*50ms,otherwise system will be reset when WatchDog      |****=;
;****|		     overflow(WatchDog)						          |****=;
;****|										          |****=;
;===============================================================================================;
#ifndef IncludeHead
	$include (../include/ci910cpudef.h)
	#define	IncludeHead
#endif
;-------------------------------;
public	_StringDisplay
public	_DrawLine
public	_DrawRectangle
public	_ReverseRectangle				;display
public	_DrawPixel
public	_ClearWindow
public	LcdInitial
public	_ClearLCD

public	_WaitKeyOn					;keyboard
public	_WaitKeyOff
public	_GetChar
public	ReadKey

public	_CombFrame					;communication
public	_ReceiveFrame
public	_ReceiveOneByte
public	_SendOneByte
public	_BaudRateSet

public	_ReadFlashToInterMem
public	_ReadFlashToExterMem
public	_InternalWriteFlash				;flash
public	_ExternalWriteFlash
public	_EraseBlock
public	_XByteRead
public	_XByteWrite
public	_ReadOneXByte

public	_WriteRTclock
public	_ReadRTclock					;RTC
public	_DelayTimes

public	_EncryptorAccess
public	_EncryptBusyJudg				;encrypt
public	EncryptorSelfCheck

public	PowerLowDec
public	ShutPower					;power
public	InitSystem

public	BuzzerDriver
public	BuzzerSelfCheck

public	ChangeStatus
public	ReadVersion
public	_CalCheckSum					;calculate check of RAM or FLASH

public	XRAM_Check
public	_XromStringCompare
public	_XramStringCompare

public	ReadLibrary5_7
public	BMP_Read
public	BMP_Write
public	StoreBmpHead
public	_ShutPowerCheck
;========================================================================;
		ORG	0000H
		ljmp 	Start
		ORG	0003h			;external interrupt 0
		ljmp 	WorkAddress+03h
		ORG	000BH			;Timer0
		ljmp	Timer0Server
		ORG	0013H			;external interrupt 1
		ljmp 	WorkAddress+13h
		ORG	001BH			;timer 1
		ljmp	Timer1Server
		ORG	0023H			;serial interrupt
		ljmp 	WorkAddress+23h
           	ORG	002BH			;timer2 interrupt
		ljmp 	WorkAddress+2bh
;========================================================================;
	org	0030h
_StringDisplay:
	ljmp	_StringDisplayPro
	org	0033h
_DrawLine:
	ljmp	_DrawLinePro
	org	0036h
_DrawRectangle:
	ljmp	_DrawRectanglePro
	org	0039h
_ReverseRectangle:				;display
	ljmp	_ReverseRectanglePro
	org	003ch
_DrawPixel:
	ljmp	_DrawPixelPro
	org	003fh
_ClearWindow:
	ljmp	_ClearWindowPro
	org	0042h
LcdInitial:
	ljmp	LcdInitialPro
	org	0045h
_WaitKeyOn:					;keyboard
	ljmp	_WaitKeyOnPro
	org	0048h
_WaitKeyOff:
	ljmp	_WaitKeyOffPro
	org	004bh
_GetChar:
	ljmp	_GetCharPro
	org	004eh
ReadKey:
	ljmp	ReadKeyPro
	org	0051h
_CombFrame:					;communication
	ljmp	_CombFramePro
	org	0054h
_ReceiveFrame:
	ljmp	_ReceiveFramePro
	org	0057h
_ReceiveOneByte:
	ljmp	_ReceiveOneBytePro
	org	005ah
_SendOneByte:
	ljmp	_SendOneBytePro
	org	005dh
_BaudRateSet:
	ljmp	_BaudRateSetPro
	org	0060h
_ReadFlashToInterMem:
	ljmp	_ReadFlashToInterMemPro
	org	0063h
_ReadFlashToExterMem:
	ljmp	_ReadFlashToExterMemPro
	org	0066h
_InternalWriteFlash:				;flash
	ljmp	_InternalWriteFlashPro
	org	0069h
_ExternalWriteFlash:
	ljmp	_ExternalWriteFlashPro
	org	006ch
_EraseBlock:
	ljmp	_EraseBlockPro
	org	006fh
_XByteRead:
	ljmp	_XByteReadPro
	org	0072h
_XByteWrite:
	ljmp	_XByteWritePro
	org	0075h
_WriteRTclock:
	ljmp	_WriteRTclockPro
	org	0078h
_ReadRTclock:					;RTC
	ljmp	_ReadRTclockPro
	org	007bh
_DelayTimes:
	ljmp	_DelayTimesPro
	org	007eh
_EncryptorAccess:
	ljmp	_EncryptorAccessPro
	org	0081h
_EncryptBusyJudg:				;encrypt
	ljmp	_EncryptBusyJudgPro
	org	0084h
EncryptorSelfCheck:
	ljmp	EncryptorSelfCheckPro
	org	0087h
PowerLowDec:
	ljmp	PowerLowDecPro
	org	008ah
ShutPower:					;power
	ljmp	ShutPowerPro
	org	008dh
InitSystem:
	ljmp	InitSystemPro
	org	0090h
BuzzerDriver:
	ljmp	BuzzerDriverPro
	org	0093h
BuzzerSelfCheck:
	;ljmp	BuzzerSelfCheckPro
	org	0096h
ChangeStatus:
	ljmp	ChangeStatusPro
	org	0099h
ReadVersion:
	ljmp	ReadVersionPro
	org	009ch
XRAM_Check:
	ljmp	XRAM_CheckPro
	org	009fh
_XromStringCompare:
	ljmp	_XromStringComparePro
	org	00a2h
_XramStringCompare:
	ljmp	_XramStringComparePro
	org	00a5h
ReadLibrary5_7:
	ljmp	ReadLibrary5_7Pro
	org	00a8h
BMP_Read:
	ljmp	BMP_ReadPro
	org	00abh
BMP_Write:
	ljmp	BMP_WritePro
	org	00aeh
StoreBmpHead:
	ljmp	StoreBmpHeadPro
	org	00b1h
_ClearLCD:
	ljmp	ClearLCDPro
	org	00b4h
_ShutPowerCheck:
	ljmp	_ShutPowerCheckPro
	org	00b7h
_ReadOneXByte:
	ljmp	_ReadOneXBytePro
	org	00bah
_CalCheckSum:
	ljmp	_CalCheckSumPro
;========================================================================;
CPUDispVersion:
	DB	97h,96h,8fh,94h,98h,80h		;[VER] ci910-V100
CPUVersion:	;CI910-V100
	;DB	'C','I','9','1','0','-','V','1','0','0'
	DB	8dh,90h,8ah,82h,81h,8bh,96h,82h,81h,81h
;========================================================================;
	using	0				;using bank0
;========================================================================;
Start:
	mov	sp,#StackPointerBot
	mov	ControlStatus,#ResetStatus
	lcall	ChangeStatusPro
	lcall	InitSystemPro
	mov  	dptr,#LCD_CommandPort
	mov  	a,#0aeh
	movx	@dptr,a						;LCD OFF
	lcall	EncryptorSelfCheckPro				;encryptor selfcheck for save power

	mov	r5,#50
SwitchKeyDetect:
	mov	r6,#0
	mov	r7,#10
	lcall	_DelayTimesPro					;delay 10ms
	jb	PowerSwitch,JumpToShutPower
	djnz	r5,SwitchKeyDetect

	lcall	LcdInitialPro
	mov	r5,#0h						;r6==data1
	mov	r7,#0h						;r7==Data2
	lcall	ClearLCDPro					;for test used
	mov	r5,#2
JudgEnterCPU:
	clr	p1.3
	jb	p1.1,JupmToFlash
	setb	p1.3
	clr	p1.4
	jb	p1.3,JupmToFlash				;branch to CPU?
	orl	p1,#18h
	mov	r6,#0
	mov	r7,#20
	lcall	_DelayTimesPro					;delay 20ms
	djnz	r5,JudgEnterCPU
	ajmp	JumpTo_CPU
JumpToShutPower:
	ljmp	ShutPowerPro					;shut power
JupmToFlash:
	ljmp	JupmToFlashPro
JumpTo_CPU:
	orl	p1,#1fh
	mov	r5,#0h						;r6==data1
	mov	r7,#0h						;r7==Data2
	mov  	ie,#82h						;EA=1,ET1=0,ET0=1
	orl	PublicBitVal,#01h				;enable power detect
	lcall	ClearLCDPro
CPU_LoopIni:
	mov	Index,#Key1
CPU_Loop:
	mov	a,Index
	mov	b,#NoKey					;history focus
	mov	dptr,#MainMenu
	lcall	_DisplayWindow
	mov	Index,r7					;save now focus
DownLoadProcess:
	cjne	r7,#Key1,SefCheck
	mov	r6,#0
	mov	r7,#0
	lcall	_WaitKeyOffPro					;WaitKeyOffPro will enable T1,So _BaudRateSetPro must after _WaitKeyOffPro
	mov	r7,#BaudRate57600
	lcall	_BaudRateSetPro
	lcall	Communication					;communication
	lcall	InitSystemPro
	ljmp	JumpTo_CPU					;modified 2003.01.19
SefCheck:
	cjne	r7,#Key2,JumpToFlashJudg
	lcall	SelfCheck					;self check 
	ljmp	CPU_Loop
JumpToFlashJudg:
	cjne	r7,#KeyClear,CPU_Loop
	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
	mov	b,#5
	mov	r5,#56						;Y
	mov	r7,#37						;X
	mov	dptr,#ExitSetupInf
	lcall	DisplayString
	mov	r6,#0
	mov	r7,#200						;10 second limited
	mov	r5,#1						;buzzer enable
	lcall	_GetCharPro
	cjne	r7,#KEYENTER,CPU_LoopIni			;key enter jump to FLASH
JupmToFlashPro:
	orl	p1,#18h
	orl	a,#1fh
	mov	WatchDogCounter,#1
	mov	tl1,#0ffh
	mov  	th1,#0a3h					;timer1 setup for 100us(11.0592Mhz)
	mov  	ie,#8ah						;EA=1,ET1=1,ET0=1,enable watchdog for system detect "No FLASH program errors"
	ljmp	WorkAddress
;========================================================================;
DisplayString:
	lcall	MemoryCopy
	mov	r2,#HIGH(ExternTempBuffer)			;pointer(MSB)
	mov	r3,#LOW(ExternTempBuffer)			;pointer(LSB)
	mov	PublicVariable1,b
	mov	PublicVariable2,#03h				;display color
	mov	PublicVariable3,#41h				;library select
	lcall	_StringDisplayPro				;exit setup?
	ret
;========================================================================;
;void  LcdInitial(void);
;-------------------------------;
;Description:   Initilization LCD process
;	  IN:	No
;	 OUT:	No
;	 USE:	A,R6,R7,DPTR
;-------------------------------;
LcdInitialPro:
	mov	dptr,#LCD_CommandPort
	mov	a,#0e2h
	movx	@dptr,a						;LCD software reset

	mov	a,#0abh
	movx	@dptr,a						;start internal oscillator 

	mov	a,#0e0h
	movx	@dptr,a						;set modify-read mode

	mov	a,#93h
	movx	@dptr,a						;set PWM and FRC for gray-scale operation

	mov	r7,#2
	mov	r6,#88h
SetDarkModeLoop:
	mov	a,r6
	inc	r6
	movx	@dptr,a
	mov	a,#0ffh
	movx	@dptr,a						;set dark mode
	djnz	r7,SetDarkModeLoop
	mov	r7,#2
	mov	r6,#8ah
SetDarkGrayModeLoop:
	mov	a,r6
	inc	r6
	movx	@dptr,a
	mov	a,#0cch
	movx	@dptr,a						;set dark gray mode
	djnz	r7,SetDarkGrayModeLoop
	mov	r7,#2
	mov	r6,#8ch
SetLightGrayModeLoop:
	mov	a,r6
	inc	r6
	movx	@dptr,a
	mov	a,#058h
	movx	@dptr,a						;set light gray mode
	djnz	r7,SetLightGrayModeLoop
	mov	r7,#2
	mov	r6,#8eh
SetWhiteModeLoop:
	mov	a,r6
	inc	r6
	movx	@dptr,a
	mov	a,#11h
	movx	@dptr,a						;set white mode
	djnz	r7,SetWhiteModeLoop

	mov	a,#40h
	movx	@dptr,a						;set column MSB
	mov	a,#00h
	movx	@dptr,a						;set column LSB

	mov	a,#44h
	movx	@dptr,a
	mov	a,#00h
	movx	@dptr,a						;set COM0

	mov	a,#48h
	movx	@dptr,a
	mov	a,#80h
	movx	@dptr,a						;set multiply ratio

	mov	a,#4ch
	movx	@dptr,a
	mov	a,#00h
	movx	@dptr,a						;set N-line inversion

	mov	a,#0a7h
	movx	@dptr,a						;set normal display

	mov	a,#0a4h
	movx	@dptr,a						;set entire display off

	mov	a,#02fh
	movx	@dptr,a						;set voltage control

	mov	a,#065h
	movx	@dptr,a						;set boost level

	mov	a,#027h
	movx	@dptr,a						;set internal resistor ratio

	mov	a,#081h
	movx	@dptr,a
	mov	a,#02eh
	movx	@dptr,a						;set contrast level

	mov	a,#057h
	movx	@dptr,a						;set LCD bias

	mov	a,#0c8h
	movx	@dptr,a						;set COM scan direction

	mov	a,#0a1h
	movx	@dptr,a						;set segment re-map
	
	mov	a,#0f1h
	movx	@dptr,a
	mov	a,#0fh
	movx	@dptr,a						;set temperature compesation

	mov	a,#0afh
	movx	@dptr,a						;set display on
	ret
;========================================================================;
;void  ClearLCD(uchar Data1,uchar Data2);
;-------------------------------;
;Description:   Clear LCD process
;	  IN:	R5==Data 1
;		R7==Data 2
;	 OUT:	No
;	 USE:	No
;-------------------------------;
ClearLCDPro:
	push	AR6
	push	AR4
	mov	r6,#0b0h						;page
LCD_PageLoop1:
	mov	dptr,#LCD_CommandPort
	mov	a,r6
	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
WriteColumnLoop1:
	mov	a,r5
	movx	@dptr,a							;write data1
	mov	a,r7
	movx	@dptr,a							;write data2
	djnz	r4,WriteColumnLoop1
	inc	r6
	cjne	r6,#0c0h,LCD_PageLoop1
	pop	AR4
	pop	AR6
	ret
;========================================================================;
DisplayConfig:
	mov	AddressRegL,#00h
	mov	AddressRegH,#00h				;external library address
	mov	a,PublicVariable2
	jnb	acc.2,NormalDispaly
	xrl	PublicVariable2,#03h				;reversal display color
NormalDispaly:
	swap	a
	anl	a,#0fh
	mov	CharInterval,a					;dispaly character interval
	mov	a,PublicVariable2
	anl	a,#03h
	clr	c
	rlc	a						;*2
	mov	b,a
	mov	dptr,#ColorGroundTab
	movc	a,@a+dptr
	mov	r3,a						;foregroud color1
	mov	a,b
	inc	a
	movc	a,@a+dptr
	mov	PublicVariable2,a				;foregroud color2
	cjne	r7,#0ffh,DisplayGetY				;r7==0xff x display center
	mov	r7,PublicVariable1				;copy length
	mov	dpl,r3
	mov	dph,r2
	mov	b,#0
GetLength:
	inc	b
	movx	a,@dptr
	cjne	a,#0a0h,JudgCharCode
JudgCharCode:
	jc	GetLengthCon
	inc	b
GetLengthCon:
	djnz	r7,GetLength
	mov	a,#6						;column number
	mul	ab
	clr	c
	rrc	a						;/2
	cpl	a
	add	a,#1
	add	a,#64						;64-a
	mov	r7,a						;X=(128-Length*Col)/2
DisplayGetY:
	clr	TempBit3					;no use background color
	mov	a,PublicVariable3
	jnb	acc.6,DisplayGetYProcess
	mov	a,PublicVariable3
	swap	a
	anl	a,#03h
	clr	c
	rlc	a						;*2
	mov	b,a

⌨️ 快捷键说明

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