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

📄 serkey.asm

📁 防盗报警器NTK源代码
💻 ASM
📖 第 1 页 / 共 4 页
字号:
	STA	SendData,00H
	CALL	Send_Data_Code
	LDI	DPL,05H
	LDA	INX,00H
	STA	SendData,00H
	CALL	Send_Data_Code
	LDI	DPL,06H
	LDA	INX,00H
	STA	SendData,00H
	CALL	Send_Data_Code
	LDI	DPL,07H
	LDA	INX,00H
	STA	SendData,00H
	CALL	Send_Data_Code
	RTNI											
;------------------------------------
Send_ChkSum_Code
	LDI	DPH,01H
	LDI	DPM,00H
	LDI	DPL,08H
	LDA	INX,00H
	STA	SendData,00H
	CALL	Send_Data_Code
	LDI	DPL,09H
	LDA	INX,00H
	STA	SendData,00H
	CALL	Send_Data_Code
	RTNI	
;===============================================
Calculate_ChkSum_Routine
	LDI	DPH,01H
	LDI	DPM,00H
	LDI	DPL,08H
	LDI	TMP,00H
	STA	INX,00H
	LDI	DPL,09H
	LDI	TMP,00H
	STA	INX,00H
;chksum+IDBuf1
	LDI	DPH,01H
	LDI	DPM,03H
	LDI	DPL,00H
	LDA	INX,00H
	STA	TMP,00H
	LDI	DPM,00H
	LDI	DPL,08H
	LDA	INX,00H
	CALL	Add_Number_Routine
;chksum+IDBuf3
	LDI	DPH,01H
	LDI	DPM,03H
	LDI	DPL,02H
	LDA	INX,00H
	STA	TMP,00H
	LDI	DPM,00H
	LDI	DPL,08H
	LDA	INX,00H
	CALL	Add_Number_Routine
;chksum+IDBuf5	
	LDI	DPH,01H
	LDI	DPM,03H
	LDI	DPL,04H
	LDA	INX,00H
	STA	TMP,00H
	LDI	DPM,00H
	LDI	DPL,08H
	LDA	INX,00H
	CALL	Add_Number_Routine
;chksum+IDBuf7	
	LDI	DPH,01H
	LDI	DPM,03H
	LDI	DPL,06H
	LDA	INX,00H
	STA	TMP,00H
	LDI	DPM,00H
	LDI	DPL,08H
	LDA	INX,00H
	CALL	Add_Number_Routine
;chksum+OrderBuf1	
	LDI	DPH,01H
	LDI	DPM,00H
	LDI	DPL,00H
	LDA	INX,00H
	STA	TMP,00H
	LDI	DPM,00H
	LDI	DPL,08H
	LDA	INX,00H
	CALL	Add_Number_Routine	
;				
;chksum+IDBuf2	
	LDI	DPH,01H
	LDI	DPM,03H
	LDI	DPL,01H
	LDA	INX,00H
	STA	TMP,00H
	LDI	DPM,00H
	LDI	DPL,09H
	LDA	INX,00H
	CALL	Add_Number_Routine_H		
;chksum+IDBuf4	
	LDI	DPH,01H
	LDI	DPM,03H
	LDI	DPL,03H
	LDA	INX,00H
	STA	TMP,00H
	LDI	DPM,00H
	LDI	DPL,09H
	LDA	INX,00H
	CALL	Add_Number_Routine_H	
;chksum+IDBuf6	
	LDI	DPH,01H
	LDI	DPM,03H
	LDI	DPL,05H
	LDA	INX,00H
	STA	TMP,00H
	LDI	DPM,00H
	LDI	DPL,09H
	LDA	INX,00H
	CALL	Add_Number_Routine_H	
;chksum+IDBuf8	
	LDI	DPH,01H
	LDI	DPM,03H
	LDI	DPL,07H
	LDA	INX,00H
	STA	TMP,00H
	LDI	DPM,00H
	LDI	DPL,09H
	LDA	INX,00H
	CALL	Add_Number_Routine_H	
;chksum+OrderBuf2	
	LDI	DPH,01H
	LDI	DPM,00H
	LDI	DPL,01H
	LDA	INX,00H
	STA	TMP,00H
	LDI	DPM,00H
	LDI	DPL,09H
	LDA	INX,00H
	CALL	Add_Number_Routine_H
	RTNI		
;------------------------------------
Add_Number_Routine
;
	ADDM	TMP,00H
	LDI	DPH,01H
	LDI	DPM,00H
	LDI	DPL,08H
	LDA	TMP,00H
	STA	INX,00H
;
	LDI	TMP,00H
	LDI	DPL,09H
	LDA	INX,00H	
	ADCM	TMP
	STA	INX,00H
	RTNI	
;------------------------------------
Add_Number_Routine_H
;
	ADDM	TMP,00H
	LDI	DPH,01H
	LDI	DPM,00H
	LDI	DPL,09H
	LDA	TMP,00H
	STA	INX,00H
	RTNI	
;===============================================
Modify_Password_Buf
	LDI	InputDataIndex,00H
	LDI	TmpDataIndex,0AH
	LDI	DPH,01H
Save_Password	
	LDI	DPM,01H
	LDA	InputDataIndex,00H
	STA	DPL,00H
	LDA	INX,00H
	STA	TMP,00H
	LDI	DPM,00H
	LDA	TmpDataIndex,00H
	STA	DPL,00H
	LDA	TMP,00H
	STA	INX,00H
	ADIM	InputDataIndex,01H
	ADIM	TmpDataIndex,01H
	BNC	Save_Password
	RTNI
;===============================================
Verify_Data_Routine
	LDI	InputDataIndex,00H
	LDI	TmpDataIndex,02H
	LDI	DPH,01H
Verify_Data	
	LDI	DPM,01H
	LDA	InputDataIndex,00H
	STA	DPL,00H
	LDA	INX,00H
	STA	TMP
	LDI	DPM,00H
	LDA	TmpDataIndex,00H
	STA	DPL,00H
	LDA	INX,00H
	EOR	TMP
	BNZ	Verify_Data_Error
	ADIM	InputDataIndex,01H
	ADIM	TmpDataIndex,01H
	STA	TMP
	EORIM	TMP,08H
	BNZ	Verify_Data		
	ORIM	DataFlag,0100B		;DataPassFlag=1
	RTNI
Verify_Data_Error
	ANDIM	DataFlag,1011B		;DataPassFlag=0	
	NOP
	RTNI	
;===============================================
Verify_Password_Routine
	LDI	TMP,0FH
	LDI	DPH,01H
	LDI	DPM,01H
	LDI	DPL,05H
	LDA	INX,00H
	EOR	TMP,00H
	BAZ	Not_Pass_Password
;
	LDI	InputDataIndex,00H
	LDI	PasswordIndex,0AH
	LDI	DPH,01H
Verify_Password	
	LDI	DPM,01H
	LDA	InputDataIndex,00H
	STA	DPL,00H
	LDA	INX,00H
	STA	TMP
	LDI	DPM,00H
	LDA	PasswordIndex,00H
	STA	DPL,00H
	LDA	INX,00H
	EOR	TMP
	BNZ	Verify_CPassword
	ADIM	InputDataIndex,01H
	ADIM	PasswordIndex,01H
	BNC	Verify_Password
	ORIM	DataFlag,0010B		;CodePassFlag=1
	ANDIM	PORTD,1101B		;Password LED on
	LDI	FailTimes,00H
	RTNI
;
Verify_CPassword
	LDI	InputDataIndex,00H
	LDI	PasswordIndex,05H
	LDI	DPH,01H
Verify_CPassword1	
	LDI	DPM,01H
	LDA	InputDataIndex,00H
	STA	DPL,00H
	LDA	INX,00H
	STA	TMP
	LDI	DPM,02H
	LDA	PasswordIndex,00H
	STA	DPL,00H
	LDA	INX,00H
	EOR	TMP
	BNZ	Not_Pass_Password
	ADIM	InputDataIndex,01H
	ADIM	PasswordIndex,01H
	BNC	Verify_CPassword1
	ORIM	DataFlag,0010B		;CodePassFlag=1
	ANDIM	PORTD,1101B		;Password LED on
	LDI	FailTimes,00H
	RTNI
;	
Not_Pass_Password
	ANDIM	DataFlag,1101B		;CodePassFlag=0
	ORIM	PORTD,0010B		;Password LEd off
	CALL	Opration_Fail_Routine
	RTNI
;===============================================
Opration_Fail_Routine
	SBI	FailTimes,03H
	BAZ	$+2
	ADIM	FailTimes,01H
	NOP
	RTNI
		
;===============================================
;=      About Key Scan Programme	       =
;===============================================
SCANKEY4
 	LDI	PAOUT,1111B
	LDI	PEOUT,0000B

	LDI	S_CODE,01H
SCAN	
	LDA	S_CODE,00H
	STA	PORTE_E,00H
	EORIM	PORTE_E,0FH
	STA	PORTA,00H
	LDA	PORTE,00H
	STA	KY1,00H
	SBI	KY1,0FH
	BAZ	NT_CODE
	LDI	PARM,3
	CALL	Delay_X_6.2ms

	LDA	PORTE,00H
	STA	KY2,00H
	SBI	KY2,0FH
	BAZ	NT_CODE
	LDA	KY1,00H
	SUB	KY2,00H
	BAZ	PAB1
	
NT_CODE
	LDA	S_CODE,00H
	ADDM	S_CODE,00H
	BAZ	R_SAN32
	JMP	SCAN
;
PAB1
	LDI	B_TBR,01H
	LDI	B_AC,00H
PAB2
	LDA	B_TBR,00H
	STA	TBR,00H
	LDA	B_AC,00H
        CALL    500H
	SUB	KY2,00H
	BAZ	PAB3
	JMP	ADDAC1
PAB3
	LDA	TBR,00H
	SUB	PORTE_E,00H
	BAZ	PAB4
	JMP	ADDAC1
PAB4
	LDA	B_AC,00H
	STA	KEY_NUM,00H
	;LDI	KEY_F,01H
	ORIM	KeyFlag,0100B	;KeyPressFlag=1
	JMP	R_SAN31
ADDAC1
	ADIM	B_AC,01H
	BC	R_SAN32	
	JMP	PAB2
R_SAN3
	LDI	KEY_NUM,00H
	JMP	R_SAN31
R_SAN32
	LDI	KEY_NUM,0FH
	;LDI	KEY_F,00h
	ANDIM	KeyFlag,1011B	;KeyPressFlag=0
	ANDIM	KeyFlag,1101B	;KeyValueOnFlag=0
R_SAN31

	
	RTNI
;------------------------------------
        ORG     0500H
	TJMP
        ORG     0510H
	RTNW	1101B,0111B	;7	0	
	RTNW	1110B,1110B	;0	1
	RTNW	1101B,1110B	;4	2
	RTNW	1011B,1110B	;8	3		
	RTNW	1110B,1101B	;1	4
	RTNW	1101B,1101B	;5	5
	RTNW	1011B,1101B	;9	6		
	RTNW	1110B,1011B	;2	7
	RTNW	1101B,1011B	;6	8
	RTNW	1011B,1011B	;A	9		
	RTNW	1110B,0111B	;3	CANCEL
	RTNW	1011B,0111B	;B	CONFIRM
	RTNW	0111B,1110B	;C	SETUP
	RTNW	0111B,1101B	;D	DEFENCE
	RTNW	0111B,1011B	;E	UNLOCK
	RTNW	0111B,0111B	;F	CONNECT
	
;------------------------------------
Send_Head_Code
;	NOP
;	NOP
	ANDIM	PORTF,1100B		;Open Send Port Power
	;ORIM	PORTF,0010B		;Close Receive Port Power
;	ANDIM	PORTF,1100B		;Open Receive Port Power
	
	NOP
	NOP
	
	NOP
	LDI	SendData,0AH
	CALL	Send_Data_Code
	LDI	SendData,0AH
	CALL	Send_Data_Code
	RTNI
;===============================================
;About EEProm Program
;===============================================
;说明: EEProm N(N<5) 字节写程序:
;入口参数:
;    写入EEProm起始地址: writeEEAddress0(低位), WriteEEAddress1(高位)
;    写入EEProm数据: EEDataBuf1,EEDataBuf2,...EEDataBuf8
;    写入EEProm字节数: EEByteCount

Write_EE_Byte
	LDI	WriteEEData0,00H
	LDI	WriteEEData1,0AH
	CALL	Start_EE
	CALL	Write_EE_8bit
	LDA	WriteEEAddress0,00H
	STA	WriteEEData0,00H
	LDA	WriteEEAddress1,00H
	STA	WriteEEData1,00H
	CALL	Write_EE_8bit
	LDI	DPH,00H
	LDI	DPM,03H
	LDI	DPL,08H
Write_EE_Loop	
	LDA	INX,00H
	STA	WriteEEData0,00H
	ADIM	DPL,01H
	LDA	INX,00H
	STA	WriteEEData1,00H
	CALL	Write_EE_8bit
	ADIM	DPL,01H
	SBIM	EEByteCount,01H
	BNZ	Write_EE_Loop
	CALL	Stop_EE
	RTNI

;===============================================
;说明: EEProm N(N<5) 字节读程序:
;入口参数:
;    读出EEProm起始地址: writeEEAddress0(低位), WriteEEAddress1(高位)
;    读出EEProm字节数: EEByteCount
;出口参数:
;    读出EEProm数据: EEDataBuf1,EEDataBuf2,...EEDataBuf8
;
Read_EE_Byte
	LDI	WriteEEData0,00H
	LDI	WriteEEData1,0AH
	CALL	Start_EE
	CALL	Write_EE_8bit
	LDA	WriteEEAddress0,00H
	STA	WriteEEData0,00H
	LDA	WriteEEAddress1,00H
	STA	WriteEEData1,00H
	CALL	Write_EE_8bit
	CALL	Start_EE
	LDI	WriteEEData0,01H
	LDI	WriteEEData1,0AH
	CALL	Write_EE_8bit

	LDI	DPH,00H
	LDI	DPM,03H
	LDI	DPL,08H
Read_EE_Loop	
	CALL	Read_EE_8bit
	LDA	ReadEEData0,00H
	STA	INX,00H
	ADIM	DPL,01H
	LDA	ReadEEData1,00H
	STA	INX,00H
	ADIM	DPL,01H
	SBIM	EEByteCount,01H
	BNZ	Host_ACK
	;LDI	PBOUT,1100B
	LDI	PBOUT,1110B
	NOP
	NOP
	CALL	Set_esda	;esda=1
	CALL	Reset_esclk	;esclk=0
	CALL	Set_esclk	;esclk=1
	CALL	Stop_EE
	RTNI
Host_ACK
	LDI	PBOUT,1110B	;esda, esclk output
	NOP
	NOP
	CALL	Reset_esda	;esda=0, produce ACK single
	CALL	Set_esclk	;esclk=1
	CALL	Reset_esclk	;esclk=0
	JMP	Read_EE_Loop
	
;------------------------------------	


Set_esda
	LDA	PORTB,00H
	STA	TMP,00H
	ORIM	TMP,1000B	
	STA	PORTB,00H	;esda=1
	NOP
	NOP
	;NOP
	RTNI
;	
Reset_esda
	LDA	PORTB,00H
	STA	TMP,00H
	ANDIM	TMP,0111B	
	STA	PORTB,00H	;esda=0
	NOP
	NOP
	;NOP
	RTNI
;	
Set_esclk
	LDA	PORTB,00H
	STA	TMP,00H
	ORIM	TMP,0100B
	STA	PORTB,00H	;esclk=1
	NOP
	NOP
	;NOP
	RTNI
;	
Reset_esclk
	LDA	PORTB,00H
	STA	TMP,00H
	ANDIM	TMP,1011B
	STA	PORTB,00H	;esclk=0
	NOP
	NOP
	;NOP
	RTNI		
;------------------------------------
Start_EE
	LDI	TMP,1110B
	STA	PBOUT,00H	;esda,esclk output
	NOP
	NOP
	;NOP
	CALL	Set_esda	;esda=1
	CALL	Set_esclk	;esclk=1
	CALL	Reset_esda	;when esclk=1, esda=0 to produce falling edge
	CALL	Reset_esclk	;esclk=0
	RTNI
;------------------------------------
Write_EE_8bit
	LDI	PBOUT,1110B	;esda,esclk output
	NOP
	NOP
	NOP
Write_EE_7
	LDA	WriteEEData1,00H	
	BA3	$+2
	JMP	Write_EE_70
Write_EE_71
	CALL	Set_esda
	JMP	Write_EE_73
Write_EE_70
	CALL	Reset_esda
Write_EE_73
	CALL	Set_esclk	;esclk=1
	CALL	Reset_esclk	;esclk=0
;	
Write_EE_6
	LDA	WriteEEData1,00H	
	BA2	$+2
	JMP	Write_EE_60
Write_EE_61
	CALL	Set_esda
	JMP	Write_EE_63
Write_EE_60
	CALL	Reset_esda
Write_EE_63
	CALL	Set_esclk	;esclk=1
	CALL	Reset_esclk	;esclk=0
;	
Write_EE_5
	LDA	WriteEEData1,00H	
	BA1	$+2
	JMP	Write_EE_50
Write_EE_51
	CALL	Set_esda
	JMP	Write_EE_53
Write_EE_50
	CALL	Reset_esda
Write_EE_53
	CALL	Set_esclk	;esclk=1
	CALL	Reset_esclk	;esclk=0
;	
Write_EE_4
	LDA	WriteEEData1,00H	
	BA0	$+2
	JMP	Write_EE_40
Write_EE_41
	CALL	Set_esda
	JMP	Write_EE_43
Write_EE_40
	CALL	Reset_esda
Write_EE_43
	CALL	Set_esclk	;esclk=1
	CALL	Reset_esclk	;esclk=0
;		
Write_EE_3
	LDA	WriteEEData0,00H	
	BA3	$+2
	JMP	Write_EE_30
Write_EE_31
	CALL	Set_esda
	JMP	Write_EE_33
Write_EE_30
	CALL	Reset_esda
Write_EE_33
	CALL	Set_esclk	;esclk=1
	CALL	Reset_esclk	;esclk=0
;	
Write_EE_2
	LDA	WriteEEData0,00H	
	BA2	$+2
	JMP	Write_EE_20
Write_EE_21
	CALL	Set_esda
	JMP	Write_EE_23
Write_EE_20
	CALL	Reset_esda
Write_EE_23
	CALL	Set_esclk	;esclk=1
	CALL	Reset_esclk	;esclk=0
;	
Write_EE_1
	LDA	WriteEEData0,00H	
	BA1	$+2
	JMP	Write_EE_10
Write_EE_11
	CALL	Set_esda
	JMP	Write_EE_13
Write_EE_10
	CALL	Reset_esda
Write_EE_13
	CALL	Set_esclk	;esclk=1
	CALL	Reset_esclk	;esclk=0
;	
Write_EE_0
	LDA	WriteEEData0,00H	
	BA0	$+2
	JMP	Write_EE_00
Write_EE_01
	CALL	Set_esda
	JMP	Write_EE_03
Write_EE_00
	CALL	Reset_esda
Write_EE_03
	CALL	Set_esclk	;esclk=1
	CALL	Reset_esclk	;esclk=0
	;RTNI
;------------------------------------
Wait_EE_ACK
	LDI	PBOUT,0110B	;esda input, esclk output
	LDI	EEACKCount,0FH
	NOP
	NOP
	NOP
Wait_ACK	
	SBIM	EEACKCount,01H
	BAZ	EE_Error
	CALL	Reset_esclk	;esclk=0
	CALL	Set_esclk	;esclk=1
	LDA	PORTB,00H
	BA3	Wait_ACK
	NOP
	NOP
	CALL	Reset_esclk	;esclk=0
	RTNI	
EE_Error
	ORIM	DataFlag1,0010B	;EEErrorFlag=1
	RTNI		
;------------------------------------							
Stop_EE
	LDI	PBOUT,1110B	;esda,esclk output
	NOP
	NOP
	CALL	Reset_esda	;esda=0
	CALL	Set_esclk	;esclk=1
	CALL	Set_esda	;when esclk=1,esda=1 to produce high edge 
	CALL	Reset_esclk	;esclk=0
	RTNI
;------------------------------------
Read_EE_8bit
	LDI	PBOUT,0110B	;esda input, esclk output
	LDI	ReadEEData0,0FH
	LDI	ReadEEData1,0FH
	NOP
	NOP
	NOP
;	
Read_EE_7
	CALL	Set_esclk	;esclk=1, produce high edge, read a bit
	LDA	PORTB,00H
	BA3	$+2
	JMP	Read_EE_70
Read_EE_71
	ORIM	ReadEEData1,1000B
	JMP	Read_EE_73
Read_EE_70
	ANDIM	ReadEEData1,0111B
Read_EE_73

⌨️ 快捷键说明

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