📄 serkey.asm
字号:
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 + -