📄 serkey.asm
字号:
BA2 $+2
JMP Wait_Start
ANDIM TimeFlag1,1110B
;=================================================
;recycle detect host ACK
;
NOP
CALL Byte_Receive_Routine
LDA TimeFlag,00H
BA2 Start_Send_Command
EORIM ByteCodeLow,05H
BNZ Receive_Host_Head
EORIM ByteCodeHigh,0AH
BNZ Receive_Host_Head
;
CALL Byte_Receive_Routine
LDA TimeFlag,00H
BA2 Start_Send_Command
LDA ByteCodeLow,00H
STA ACKCommand1,00H
LDA ByteCodeHigh,00H
STA ACKCommand2,00H
;
CALL Byte_Receive_Routine
LDA TimeFlag,00H
BA2 Start_Send_Command
LDI DPH,01H
LDI DPM,03H
LDI DPL,08H
LDA ByteCodeLow,00H
STA INX,00H
LDI DPL,09H
LDA ByteCodeHigh,00H
STA INX,00H
;
CALL Byte_Receive_Routine
LDA TimeFlag,00H
BA2 Start_Send_Command
LDI DPH,01H
LDI DPM,03H
LDI DPL,0AH
LDA ByteCodeLow,00H
STA INX,00H
LDI DPL,0BH
LDA ByteCodeHigh,00H
STA INX,00H
;
CALL Byte_Receive_Routine
LDA TimeFlag,00H
BA2 Start_Send_Command
LDI DPH,01H
LDI DPM,03H
LDI DPL,0CH
LDA ByteCodeLow,00H
STA INX,00H
LDI DPL,0DH
LDA ByteCodeHigh,00H
STA INX,00H
;
CALL Byte_Receive_Routine
LDA TimeFlag,00H
BA2 Start_Send_Command
LDI DPH,01H
LDI DPM,03H
LDI DPL,0EH
LDA ByteCodeLow,00H
STA INX,00H
LDI DPL,0FH
LDA ByteCodeHigh,00H
STA INX,00H
;
CALL Byte_Receive_Routine
LDA TimeFlag,00H
BA2 Start_Send_Command
LDA ByteCodeLow,00H
STA ACKChkSum1,00H
LDA ByteCodeHigh,00H
STA ACKChkSum2,00H
;
CALL Byte_Receive_Routine
LDA TimeFlag,00H
BA2 Start_Send_Command
LDA ByteCodeLow,00H
STA ACKEnd1,00H
LDA ByteCodeHigh,00H
STA ACKEnd2,00H
LDI TimeFlag1,00H
;
;ACK Receive finish
;
;test1
NOP
CALL Compare_ChkSum_Routine
NOP
LDA DataFlag1,00H
BA0 $+2
JMP Receive_Host_Head
CALL Verify_ID_Routine
NOP
LDA DataFlag,00H
BA3 $+2
JMP Receive_Host_Head
;judge ACK Command
;
Judge_Alarm
SBI ACKCommand1,0FH
BNZ Judge_Safeguard
SBI ACKCommand2,04H
BNZ Receive_Host_Head
JMP Send_Command_Return
;
Judge_Safeguard
SBI ACKCommand1,01H
BNZ Judge_UnSafeguard
SBI ACKCommand2,02H
BNZ Receive_Host_Head
ORIM StatusFlag,0010B
Modify_EEProm_Safeguard
LDI WriteEEAddress0,00H
LDI WriteEEAddress1,01H
LDI EEByteCount,01H
LDI EEDataBuf1,01H
LDI EEDataBuf2,00H
CALL Write_EE_Byte
ANDIM PORTD,1110B ;safeguard LED ON
JMP Send_Command_Return
;
Judge_UnSafeguard
SBI ACKCommand1,04H
BNZ Judge_Connect
SBI ACKCommand2,03H
;BNZ Send_Command_Again
BNZ Receive_Host_Head
ANDIM StatusFlag,1101B
Modify_EEProm_Unsafeguard
LDI WriteEEAddress0,00H
LDI WriteEEAddress1,01H
LDI EEByteCount,01H
LDI EEDataBuf1,00H
LDI EEDataBuf2,00H
CALL Write_EE_Byte
ORIM PORTD,0001B ;safeguard LED off
JMP Send_Command_Return
;
Judge_Connect
SBI ACKCommand1,0CH
BNZ Receive_Host_Head
SBI ACKCommand2,02H
BNZ Receive_Host_Head
LDA StatusFlag,00H
BA0 $+2
BNZ Receive_Host_Head
ORIM StatusFlag,0100B
ORIM PORTD,1000B ;Buz on
LDI PARM,0FH
CALL Delay_X_6.2ms
LDI PARM,0FH
CALL Delay_X_6.2ms
ANDIM PORTD,0111B ;Buz off
JMP Send_Command_Return
;
Send_Command_Again
NOP
LDI PARM,0CH
CALL Delay_X_6.2ms
NOP
JMP Start_Send_Command
;
Send_Command_Fail
CALL Wait_100ms
ANDIM PORTD,0111B ;Buz off
CALL Wait_100ms
ORIM PORTD,1000B ;Buz on
CALL Wait_100ms
ANDIM PORTD,0111B ;Buz off
CALL Wait_100ms
ORIM PORTD,1000B ;Buz on
CALL Wait_100ms
ANDIM PORTD,0111B ;Buz off
CALL Wait_100ms
ORIM PORTD,1000B ;Buz on
CALL Wait_100ms
ANDIM PORTD,0111B ;Buz off
JMP Send_Command_Return1
;
Send_Command_Return
ORIM PORTD,1000B ;Buz on
CALL Wait_100ms
CALL Wait_100ms
ANDIM PORTD,0111B ;Buz off
Send_Command_Return1
ORIM PORTF,0011B ;Close send and receive power
ORIM PORTD,0010B ;Send LED off
; ORIM PORTF,0000B
LDI IEX,0100B
LDI SendCommandTimes,00H
LDI InputDataIndex,00H
LDI TimeFlag1,00H
JMP Key_Process_Return
;===============================================
Setup_Time0
LDI TM0,0001B ;setup time0
LDI T0L,0DH
LDI T0H,03H
ANDIM IRQ,1011B
ORIM IEX,0100B ;open time0 interrupt
LDI HostACKCount,03H
ANDIM TimeFlag,1011B
RTNI
;===============================================
Byte_Receive_Routine
LDI HighLevel,00H
LDI LowLevel,00H
LDI LevelCount,00H
LDI BitReceiveTimes,00H
LDI WordReceiveTimes,00H
Receive_Start
;
; CALL Setup_Time0_100ms
CALL Setup_Time0_350ms
;
Wait_Host_ACK
LDA TimeFlag,00H
BA2 Byte_Receive_Error
LDA PORTB,00H
BA0 $-3
NOP
Wait_Host_ACK1
LDA TimeFlag,00H
BA2 Byte_Receive_Error
LDA PORTB,00H
BA0 $+2
JMP Wait_Host_ACK1
NOP
LDA PORTB,00H
BA0 $+2
JMP Wait_Host_ACK1
;
CALL Setup_Time0_500us
;
Receive_Start1
LDA TimeFlag,00H
BA2 R_Wait_350ms
LDA PORTB,00H
BA0 Receive_Start1
NOP
LDA PORTB,00H
BA0 Receive_Start1
NOP
;LDA PORTB,00H
;BA0 Receive_Start1
LDA T0H,00H
STA TimeTH,00H
LDA T0L,00H
STA TimeTL,00H
LDI IEX,0000B
;
JUdge_0 ;30 ~ 6f 96us~222us(normal value:4B)
;SBI TimeTH,03H
SBI TimeTH,01H
BNC R_Wait_350ms
;SBI TimeTH,07H
SBI TimeTH,04H ;9
BC Judge_1
JMP Receive_0
Judge_1 ;c0~ef 352us~478us(normal value:D9)
;SBI TimeTH,0CH
SBI TimeTH,05H ;0AH
BNC R_Wait_350ms
SBI TimeTH,09H
BC R_Wait_350ms
JMP Receive_1
;
Receive_0
LDI BitSingle,00H
CALL Wait_380us
JMP Send_Bit
Receive_1
LDI BitSingle,08H
CALL Wait_100us
;
Send_Bit
LDA ByteCodeTemp,00H
SHR
STA ByteCodeTemp,00H
LDA BitSingle,00H
BA3 $+3
ANDIM ByteCodeTemp,0111B
JMP $+2
ORIM ByteCodeTemp,1000B
;
ADIM BitReceiveTimes,01H
SBI BitReceiveTimes,04H
BNZ Receive_Start
LDA WordReceiveTimes,00H
BNZ $+5
LDA ByteCodeTemp,00H
STA ByteCodeLow,00H
LDI WordReceiveTimes,01H
JMP $+4
LDA ByteCodeTemp,00H
STA ByteCodeHigh,00H
LDI WordReceiveTimes,02H
LDI BitReceiveTimes,00H
LDI ByteCodeTemp,00H
SBI WordReceiveTimes,02H
BNZ Receive_Start
Byte_Receive_ret
RTNI
;
R_Wait_350ms ;100ms
CALL Setup_Time0_350ms
LDA TimeFlag,00H
BA2 Byte_Receive_Error
JMP $-2
;
Byte_Receive_Error
LDI ByteCodeLow,0EH
LDI ByteCodeHigh,0EH
RTNI
;===============================================
Verify_ID_Routine
LDI IDBufIndex,00H
LDI TmpDataIndex,08H
LDI DPH,01H
LDI DPM,03H
Verify_ID
LDA IDBufIndex,00H
STA DPL,00H
LDA INX,00H
STA TMP,00H
LDA TmpDataIndex,00H
STA DPL,00H
LDA INX,00H
EOR TMP,00H
BNZ Verify_ID_Error
ADIM IDBufIndex,01H
ADIM TmpDataIndex,01H
BNC Verify_ID
ORIM DataFlag,1000B ;DataPassFlag=1
RTNI
Verify_ID_Error
ANDIM DataFlag,0111B ;IDPassFlag=0
NOP
NOP
RTNI
;===============================================
Compare_ChkSum_Routine
;Calculte Receive Chksum
;
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+ACKIDBuf1
LDI DPH,01H
LDI DPM,03H
LDI DPL,08H
LDA INX,00H
STA TMP,00H
LDI DPM,00H
LDI DPL,08H
LDA INX,00H
CALL Add_Number_Routine
;chksum+ACKIDBuf3
LDI DPH,01H
LDI DPM,03H
LDI DPL,0AH
LDA INX,00H
STA TMP,00H
LDI DPM,00H
LDI DPL,08H
LDA INX,00H
CALL Add_Number_Routine
;chksum+ACKIDBuf5
LDI DPH,01H
LDI DPM,03H
LDI DPL,0CH
LDA INX,00H
STA TMP,00H
LDI DPM,00H
LDI DPL,08H
LDA INX,00H
CALL Add_Number_Routine
;chksum+ACKIDBuf7
LDI DPH,01H
LDI DPM,03H
LDI DPL,0EH
LDA INX,00H
STA TMP,00H
LDI DPM,00H
LDI DPL,08H
LDA INX,00H
CALL Add_Number_Routine
;chksum+ACKCommand1
LDA ACKCommand1,00H
STA TMP,00H
LDI DPM,00H
LDI DPL,08H
LDA INX,00H
CALL Add_Number_Routine
;
;chksum+ACKIDBuf2
LDI DPH,01H
LDI DPM,03H
LDI DPL,09H
LDA INX,00H
STA TMP,00H
LDI DPM,00H
LDI DPL,09H
LDA INX,00H
CALL Add_Number_Routine_H
;chksum+ACKIDBuf4
LDI DPH,01H
LDI DPM,03H
LDI DPL,0BH
LDA INX,00H
STA TMP,00H
LDI DPM,00H
LDI DPL,09H
LDA INX,00H
CALL Add_Number_Routine_H
;chksum+ACKIDBuf6
LDI DPH,01H
LDI DPM,03H
LDI DPL,0DH
LDA INX,00H
STA TMP,00H
LDI DPM,00H
LDI DPL,09H
LDA INX,00H
CALL Add_Number_Routine_H
;chksum+ACKIDBuf8
LDI DPH,01H
LDI DPM,03H
LDI DPL,0FH
LDA INX,00H
STA TMP,00H
LDI DPM,00H
LDI DPL,09H
LDA INX,00H
CALL Add_Number_Routine_H
;chksum+ACKCommnd2
LDA ACKCommand2,00H
STA TMP,00H
LDI DPM,00H
LDI DPL,09H
LDA INX,00H
CALL Add_Number_Routine_H
;
;Compare start
LDI DPH,01H
LDI DPM,00H
LDI DPL,08H
LDA INX,00H
SUB ACKChkSum1,00H
BNZ Receive_ChkSum_Error
LDI DPL,09H
LDA INX,00H
SUB ACKChkSum2,00H
BNZ Receive_ChkSum_Error
;
Receive_ChkSum_Right
ORIM DataFlag1,0001B
RTNI
;
Receive_ChkSum_Error
ANDIM DataFlag1,1110B
RTNI
;===============================================
Send_Safeguard_Command
;calculate chksum
;
LDI DPH,01H
LDI DPM,00H
LDI DPL,00H
LDI TMP,0FH
STA INX,00H
LDI DPL,01H
LDI TMP,00H
STA INX,00H
LDI IEX,00H
CALL Calculate_ChkSum_Routine
;
CALL Send_Head_Code
CALL Send_Protect_Code
CALL Send_ID_Code
CALL Send_ChkSum_Code
CALL Send_Stop_Code
RTNI
;===============================================
Send_UnSafeguard_Command
;calculate chksum
;
LDI DPH,01H
LDI DPM,00H
LDI DPL,00H
LDI TMP,0FH
STA INX,00H
LDI DPL,01H
LDI TMP,0CH
STA INX,00H
CALL Calculate_ChkSum_Routine
;
CALL Send_Head_Code
CALL Send_UnProtect_Code
CALL Send_ID_Code
CALL Send_ChkSum_Code
CALL Send_Stop_Code
RTNI
;===============================================
Send_Connect_Command
;calculate chksum
;
LDI DPH,01H
LDI DPM,00H
LDI DPL,00H
LDI TMP,0CH
STA INX,00H
LDI DPL,01H
LDI TMP,00H
STA INX,00H
CALL Calculate_ChkSum_Routine
;
CALL Send_Head_Code
CALL Send_Connect_Code
CALL Send_ID_Code
CALL Send_ChkSum_Code
CALL Send_Stop_Code
RTNI
;===============================================
Send_Alarm_Command
;calculate chksum
;
LDI DPH,01H
LDI DPM,00H
LDI DPL,00H
LDI TMP,0FH
STA INX,00H
LDI DPL,01H
LDI TMP,08H
STA INX,00H
CALL Calculate_ChkSum_Routine
;
CALL Send_Head_Code
CALL Send_Alarm_Code
CALL Send_ID_Code
CALL Send_ChkSum_Code
CALL Send_Stop_Code
RTNI
;
Send_Alarm_Code
LDI SendData,0FH
CALL Send_Data_Code
LDI SendData,08H
CALL Send_Data_Code
RTNI
;===============================================
Send_Data_Code
LDA SendData,0
BA0 $+2
JMP Send_Low0
Send_High0
ORIM PORTB,0010B
CALL Delay_430us
ANDIM PORTB,1101B
CALL Delay_150us
JMP Send_Data_1bit
Send_Low0
ORIM PORTB,0010B
CALL Delay_150us
ANDIM PORTB,1101B
CALL Delay_430us
;
Send_Data_1bit
LDA SendData,0
BA1 $+2
JMP Send_Low1
Send_High1
ORIM PORTB,0010B
CALL Delay_430us
ANDIM PORTB,1101B
CALL Delay_150us
JMP Send_Data_2bit
Send_Low1
ORIM PORTB,0010B
CALL Delay_150us
ANDIM PORTB,1101B
CALL Delay_430us
;
Send_Data_2bit
LDA SendData,0
BA2 $+2
JMP Send_Low2
Send_High2
ORIM PORTB,0010B
CALL Delay_430us
ANDIM PORTB,1101B
CALL Delay_150us
JMP Send_Data_3bit
Send_Low2
ORIM PORTB,0010B
CALL Delay_150us
ANDIM PORTB,1101B
CALL Delay_430us
;
Send_Data_3bit
LDA SendData,0
BA3 $+2
JMP Send_Low3
Send_High3
ORIM PORTB,0010B
CALL Delay_430us
ANDIM PORTB,1101B
CALL Delay_150us
RTNI
Send_Low3
ORIM PORTB,0010B
CALL Delay_150us
ANDIM PORTB,1101B
CALL Delay_430us
RTNI
;------------------------------------
Send_Stop_Code
LDI SendData,0DH
CALL Send_Data_Code
LDI SendData,00H
CALL Send_Data_Code
;
ORIM PORTB,0010B ;Send End Pulse
CALL Delay_20us
CALL Delay_20us
CALL Delay_20us
CALL Delay_20us
CALL Delay_20us
CALL Delay_20us
ANDIM PORTB,1101B
CALL Delay_10us
RTNI
;------------------------------------
Send_Protect_Code
LDI SendData,0FH
CALL Send_Data_Code
LDI SendData,00H
CALL Send_Data_Code
RTNI
;------------------------------------
Send_UnProtect_Code
LDI SendData,0FH
CALL Send_Data_Code
LDI SendData,0CH
CALL Send_Data_Code
RTNI
;------------------------------------
Send_Connect_Code
LDI SendData,0CH
CALL Send_Data_Code
LDI SendData,00H
CALL Send_Data_Code
RTNI
;------------------------------------
Send_ID_Code
LDI DPH,01H
LDI DPM,03H
LDI DPL,00H
LDA INX,00H
STA SendData,00H
CALL Send_Data_Code
LDI DPL,01H
LDA INX,00H
STA SendData,00H
CALL Send_Data_Code
LDI DPL,02H
LDA INX,00H
STA SendData,00H
CALL Send_Data_Code
LDI DPL,03H
LDA INX,00H
STA SendData,00H
CALL Send_Data_Code
LDI DPL,04H
LDA INX,00H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -