📄 serkey.asm
字号:
;KEYBOARD-WIRELESS-00
;第二次烧片子正式程序
;所有功能均调试通过(无线通信)
;pulse wide detect
;接受每帧数据之间需2秒时间间隔
;带起始高电平纠正
;增加发送信号闪烁指示,接收信号错误响声指示.
;chksum=2190
;
;LIST P=6622
;romsize=4000
;romsize=4096
;===============================================
;System Register Define
;
IEX EQU 00H
IRQ EQU 01H
TM0 EQU 02H
T0L EQU 04H
T0H EQU 05H
LPD EQU 07H
PORTA EQU 08H
PORTB EQU 09H
PORTC EQU 0AH
PORTD EQU 0BH
PORTE EQU 0CH
PORTF EQU 0DH
TBR EQU 0EH
INX EQU 0FH
DPL EQU 10H
DPM EQU 11H
DPH EQU 12H
PAOUT EQU 16H
PBOUT EQU 17H
PCOUT EQU 18H
PDOUT EQU 19H
PEOUT EQU 1AH
PFOUT EQU 1BH
T0 EQU 1CH
WDT EQU 1EH
;-------------------------------
;Data Memory Define
;
TMP EQU 20H
BackLightCount EQU 21H
TimeingCount EQU 22H
Delay0 EQU 23H
Delay1 EQU 24H
Delay2 EQU 25H
DelayParameter EQU 26H
SendData EQU 27H
InputDataIndex EQU 28H
PasswordIndex EQU 29H
IDBufIndex EQU 2AH
TmpDataIndex EQU 2BH
FailTimes EQU 6AH
ConfirmCount EQU 2FH
;
WriteEEData0 EQU 30H
WriteEEData1 EQU 31H
ReadEEData0 EQU 32H
ReadEEData1 EQU 33H
WriteEEAddress0 EQU 34H
WriteEEAddress1 EQU 35H
EEByteCount EQU 36H
EEDataBuf1 EQU 38H
EEDataBuf2 EQU 39H
EEDataBuf3 EQU 3AH
EEDataBuf4 EQU 3BH
EEDataBuf5 EQU 3CH
EEDataBuf6 EQU 3DH
EEDataBuf7 EQU 3EH
EEDataBuf8 EQU 3FH
;
CT0 EQU 40H
CT1 EQU 41H
CT2 EQU 42H
PARM EQU 43H
KY1 EQU 45H
KEY_F EQU 46H
KEY_NUM EQU 47H
S_CODE EQU 48H
B_AC EQU 49H
B_TBR EQU 4AH
PORTE_E EQU 4BH
KY2 EQU 4CH
;
ByteCodeLow EQU 50H
ByteCodeHigh EQU 51H
ACKCommand1 EQU 52H
ACKCommand2 EQU 53H
ACKChkSum1 EQU 54H
ACKChkSum2 EQU 55H
ACKEnd1 EQU 56H
ACKEnd2 EQU 57H
HighLevel EQU 58H
LowLevel EQU 59H
LevelCount EQU 5AH
BitReceiveTimes EQU 5BH
WordReceiveTimes EQU 5CH
BitSingle EQU 5DH
ByteCodeTemp EQU 5EH
SendCommandTimes EQU 5FH
HostACKCount EQU 60H
TimeTL EQU 61H
TimeTH EQU 62H
EEACKCount EQU 63H
STACK_BUF EQU 64H
;
DataFlag EQU 70H
;DataValidFlag EQU 70H.0
;CodePassFlag EQU 70H.1
;DataPassFlag EQU 70H.2
;IDPassFlag EQU 70H.3
DataFlag1 EQU 71H
;ACKChkSumPassFlag EQU 71H.0
;EEErrorFlag EQU 71H.1
StatusFlag EQU 72H
;ConnectStatusFlag EQU 72H.0
;SafeguardFlag EQU 72H.1
;ConnectedFlag EQU 72H.2
;AlarmFlag EQU 72H.3
TimeFlag EQU 7FH
;Timer1sFlag EQU 73H.0
;Timer5sFlag EQU 73H.1
;Timer100msFlag EQU 73H.2
KeyFlag EQU 74H
;BackLightFlag EQU 74H.0
;KeyValueOn EQU 74H.1
;KeyPressFlag EQU 74H.2
TimeFlag1 EQU 75H
;Time2msFlag EQU 75H.0
;Time500usFlag EQU 75H.1
;
OrderBuf1 EQU 080H
OrdefBuf2 EQU 081H
;
DataTmpBuf1 EQU 082H
DataTmpBuf2 EQU 083H
DataTmpBuf3 EQU 084H
DataTmpBuf4 EQU 085H
DataTmpBuf5 EQU 086H
DataTmpBuf6 EQU 087H
;
ChkSumLow EQU 088H
ChkSumHigh EQU 089H
;
PasswordBuf1 EQU 08AH
PasswordBuf2 EQU 08BH
PasswordBuf3 EQU 08CH
PasswordBuf4 EQU 08DH
PasswordBuf5 EQU 08EH
PasswordBuf6 EQU 08FH
;
DataInputBuf1 EQU 090H
DataInputBuf2 EQU 091H
DataInputBuf3 EQU 092H
DataInputBuf4 EQU 093H
DataInputBuf5 EQU 094H
DataInputBuf6 EQU 095H
DataInputBuf7 EQU 096H
DataInputBuf8 EQU 097H
DataInputBuf9 EQU 098H
DataInputBuf10 EQU 099H
DataInputBuf11 EQU 09AH
;
CPasswordBuf1 EQU 0A5H
CPasswordBuf2 EQU 0A6H
CPasswordBuf3 EQU 0A7H
CPasswordBuf4 EQU 0A8H
CPasswordBuf5 EQU 0A9H
CPasswordBuf6 EQU 0AAH
CPasswordBuf7 EQU 0ABH
CPasswordBuf8 EQU 0ACH
CPasswordBuf9 EQU 0ADH
CPasswordBuf10 EQU 0AEH
CPasswordBuf11 EQU 0AFH
;
IDBuf1 EQU 0B0H
IDBuf2 EQU 0B1H
IDBuf3 EQU 0B2H
IDBuf4 EQU 0B3H
IDBuf5 EQU 0B4H
IDBuf6 EQU 0B5H
IDBuf7 EQU 0B6H
IDBuf8 EQU 0B7H
;
ACKIDBUF1 EQU 0B8H
ACKIDBUF2 EQU 0B9H
ACKIDBUF3 EQU 0BAH
ACKIDBUF4 EQU 0BBH
ACKIDBUF5 EQU 0BCH
ACKIDBUF6 EQU 0BDH
ACKIDBUF7 EQU 0BEH
ACKIDBUF8 EQU 0BFH
;-------------------------------
;Constant Define
EEIDAddress EQU 00H
EEPasswordAddress EQU 04H
;
;===============================================
;notice:
; PassWord Address in EEProm: 04-06
; SafeguardFlag Address in EEProm:10
;
;===============================================
ORG 000H
JMP RESET
NOP
JMP TIMER0
NOP
NOP
NOP
;------------------------------------
ORG 020H
TJMP
;CPassword
RTNW 01H,02H
RTNW 03H,04H
RTNW 05H,06H
RTNW 07H,08H
RTNW 09H,00H
RTNW 01H,00H
;ID Code
RTNW 01H,03H
RTNW 05H,07H
RTNW 09H,01H
RTNW 01H,01H
;------------------------------------
ORG 030H
RESET
NOP
NOP
NOP
;
CALL Reset_Memory
CALL Reset_Port
ORIM PORTD,0011B
CALL Reset_CPassword_ID
CALL Reset_Password
CALL Reset_Time0_100ms
CALL Read_Intial_Status
NOP
;
LDA DataFlag1,00H
BA1 Reset_Error_Indicate
;
Reset_right_Indicate
ORIM PORTD,1000B ;BUZ on
CALL Wait_100ms
CALL Wait_100ms
ANDIM PORTD,0111B ;BUZ off
; NOP
JMP Main
;
Reset_Error_Indicate
ANDIM DataFlag1,1101B ;EEErrorFlag=0
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
NOP
LDI PBOUT,0010B
Main
CALL Alarm_Detect
LDA StatusFlag,00H
BA3 Send_Command_Segment
LDA KeyFlag,00H
BA2 $+2
CALL Time0_100ms_int
SBI FailTimes,03H
BNZ $+2
CALL Wait_1min
;
CALL SCANKEY4
LDA KeyFlag,00H
BA2 $+2
JMP Key_Process_Return
SBI KEY_NUM,0FH
BAZ Check_Key
JMP Check_Over
Check_Key
LDA KeyFlag,00H
BA2 $+2
JMP Key_Process_Return
Check_Over
LDA KeyFlag,00H
BA1 Key_Process_Return
ORIM KeyFlag,0010B
ORIM KeyFlag,0001B
LDI IEX,0100B
CALL Enable_BackLight
;
ORIM PORTD,1000B
LDI PARM,04H
CALL Delay_X_6.2ms
ANDIM PORTD,0111B
LDI TMP,0AH
SUB KEY_NUM,00H
BNC Number_key_Segment
;
LDI TMP,0AH
EOR KEY_NUM,00H
BAZ Cancel_Segment
;
LDI TMP,0BH
EOR KEY_NUM,00H
BAZ Confirm_Segment
;
LDI TMP,0CH
EOR KEY_NUM,00H
BAZ Modify_Segment
;
LDI TMP,0DH
EOR KEY_NUM,00H
BAZ Send_Command_Segment
;
LDI TMP,0EH
EOR KEY_NUM,00H
BAZ Unlock_Segment
;
LDI TMP,0FH
EOR KEY_NUM,00H
BAZ Connect_Segment
NOP
Key_Process_Return
LDA DataFlag1,00H
BA1 $+2
JMP Key_Process_Return1
ANDIM DataFlag1,1101B ;EEErrorFlag=0
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
NOP
Key_Process_Return1
LDI IEX,0100B
JMP Main
;------------------------------------
Number_key_Segment
LDI TMP,0BH
SUB InputDataIndex,00H
BNC Number_Input
ORIM DataFlag,0001B ;DataValidFlag=1
LDA DataFlag,00H
JMP Key_Process_Return
Number_Input
LDI DPH,01H
LDI DPM,01H
LDA InputDataIndex,00H
STA DPL,00H
LDA KEY_NUM
STA INX,00H
ADIM InputDataIndex,01H
JMP Key_Process_Return
;------------------------------------
Confirm_Segment
LDA ConfirmCount,00H
BNZ Confirm_Two_Times
LDA DataFlag,00H
BA1 $+2
JMP Confirm_Failure
ANDIM DataFlag,1101B ;CodePassFlag=0
ADIM ConfirmCount,01H
;
LDI InputDataIndex,00H
LDI TmpDataIndex,02H
LDI DPH,01H
Temp_Save_Data
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
STA TMP
EORIM TMP,08H
BAZ Clear_Data_Buf
JMP Temp_Save_Data
Clear_Data_Buf
LDI TMP,0FH
LDI DPH,01H
LDI DPM,01H
LDI DPL,0FH
CALL Clear_Memory_Loop
LDI InputDataIndex,00H
JMP Key_Process_Return
;
Confirm_Two_Times
LDI TMP,01H
EOR ConfirmCount,01H
BNZ Confirm_Failure
LDI TMP,0FH
LDI DPH,01H
LDI DPM,01H
LDI DPL,05H
LDA INX,00H
SUB TMP,00H
BAZ Confirm_Failure
CALL Verify_Data_Routine
LDA DataFlag,00H
BA2 $+2
JMP Confirm_Failure
CALL Modify_Password_Buf
;
;password to EEDataBuf
;
LDI PasswordIndex,0AH
LDI TmpDataIndex,08H
Confirm_EEData_Buf
LDI DPH,01H
LDI DPM,00H
LDA PasswordIndex,00H
STA DPL,00H
LDA INX,00H
STA TMP,00H
LDI DPH,00H
LDI DPM,03H
LDA TmpDataIndex,00H
STA DPL,00H
LDA TMP,00H
STA INX,00H
ADIM TmpDataIndex,01H
ADIM PasswordIndex,01H
BNC Confirm_EEData_Buf
;
Password_to_EEProm
LDI WriteEEAddress0,04H
LDI WriteEEAddress1,00H
LDI EEByteCount,03H
CALL Write_EE_Byte
LDI ConfirmCount,00H
Confirm_Right_Indicate
ORIM PORTD,1000B ;Buz on
ANDIM PORTD,1101B ;Password LED on
CALL Wait_100ms
ANDIM PORTD,0111B ;Buz off
CALL Wait_100ms
ORIM PORTD,0010B ;Password LED off
CALL Wait_100ms
CALL Wait_100ms
ANDIM PORTD,1101B ;Password LED on
CALL Wait_100ms
CALL Wait_100ms
ORIM PORTD,0010B ;Password LED off
CALL Wait_100ms
CALL Wait_100ms
ANDIM PORTD,1101B ;Password LED on
CALL Wait_100ms
CALL Wait_100ms
ORIM PORTD,0010B ;Password LED off
CALL Wait_100ms
CALL Wait_100ms
ANDIM PORTD,1101B ;Password LED on
JMP Clear_Data_Buf
;
Confirm_Failure
LDI ConfirmCount,02H
ORIM PORTD,0010B ;Password LED off
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 Key_Process_Return
;------------------------------------
Modify_Segment
LDI ConfirmCount,00H
CALL Verify_Password_Routine
LDA DataFlag,00H
BA1 $+2
JMP Clear_Data_Buf
NOP
ORIM PORTD,1000B ;Buz on
CALL Wait_100ms
ANDIM PORTD,0111B ;Buz off
JMP Clear_Data_Buf
;------------------------------------
Cancel_Segment
LDI TMP,0FH
LDI DPH,01H
LDI DPM,01H
LDI DPL,0FH
CALL Clear_Memory_Loop
LDI DataFlag,00H
LDI InputDataIndex,00H
LDI ConfirmCount,00H
ORIM PORTD,1000B ;Buz on
CALL Wait_100ms
ANDIM PORTD,0111B ;Buz off
JMP Key_Process_Return
;------------------------------------
Unlock_Segment
JMP Key_Process_Return
;------------------------------------
Connect_Segment
ORIM StatusFlag,0001B ;ConnectStatusFlag=1
JMP Send_Command_Segment
;------------------------------------
Send_Command_Segment
LDA StatusFlag,00H
BA3 Start_Send_Alarm_Command
LDA DataFlag,00H
BA0 Send_Command_Fail
CALL Verify_Password_Routine
LDA DataFlag,00H
BA1 $+2
JMP Send_Command_Fail
;
ORIM PORTD,1000B ;Buz on
ANDIM PORTD,1101B ;Password LED on
CALL Wait_100ms
ANDIM PORTD,0111B ;Buz off
;
LDI TMP,0FH
LDI DPH,01H
LDI DPM,01H
LDI DPL,0FH
CALL Clear_Memory_Loop
LDI SendCommandTimes,00H
;
Start_Send_Command
LDA PORTD,00H
BA1 $+3
ORIM PORTD,0010B ;Send LED on
JMP $+2
ANDIM PORTD,1101B ;Send LED off
;
ADIM SendCommandTimes,01H
SBI SendCommandTimes,06H ;send 5 times
BAZ Send_Command_Fail
LDI IEX,0000B ;Close Interrupt
LDA StatusFlag,00H
BA3 Start_Send_Alarm_Command
BA0 $+2
JMP To_Safeguard_Segment
;
To_Connect_Segment
ANDIM IEX,1011B
CALL Send_Connect_Command
LDI PARM,01H
CALL Delay_X_6.2ms
CALL Send_Connect_Command
LDI PARM,01H
CALL Delay_X_6.2ms
CALL Send_Connect_Command
LDI PARM,01H
CALL Delay_X_6.2ms
CALL Send_Connect_Command
LDI PARM,01H
CALL Delay_X_6.2ms
CALL Send_Connect_Command
JMP Receive_Host_Head
;
To_Safeguard_Segment
BA1 To_UnSafeguard_Segment
ANDIM IEX,1011B
CALL Send_Safeguard_Command ;1
LDI PARM,01H
CALL Delay_X_6.2ms
CALL Send_Safeguard_Command ;2
LDI PARM,01H
CALL Delay_X_6.2ms
CALL Send_Safeguard_Command ;3
LDI PARM,01H
CALL Delay_X_6.2ms
CALL Send_Safeguard_Command ;4
LDI PARM,01H
CALL Delay_X_6.2ms
CALL Send_Safeguard_Command ;5
LDI PARM,01H
CALL Delay_X_6.2ms
CALL Send_Safeguard_Command ;6
; LDI PARM,01H
; CALL Delay_X_6.2ms
; CALL Send_Safeguard_Command ;7
; LDI PARM,01H
; CALL Delay_X_6.2ms
; CALL Send_Safeguard_Command ;8
JMP Receive_Host_Head
;
To_UnSafeguard_Segment
ANDIM IEX,1011B
CALL Send_UnSafeguard_Command ;1
LDI PARM,01H
CALL Delay_X_6.2ms
CALL Send_UnSafeguard_Command ;2
LDI PARM,01H
CALL Delay_X_6.2ms
CALL Send_UnSafeguard_Command ;3
LDI PARM,01H
CALL Delay_X_6.2ms
CALL Send_UnSafeguard_Command ;4
LDI PARM,01H
CALL Delay_X_6.2ms
CALL Send_UnSafeguard_Command ;5
LDI PARM,01H
CALL Delay_X_6.2ms
CALL Send_UnSafeguard_Command ;6
; LDI PARM,01H
; CALL Delay_X_6.2ms
; CALL Send_UnSafeguard_Command ;7;
; LDI PARM,01H
; CALL Delay_X_6.2ms
; CALL Send_UnSafeguard_Command ;8
JMP Receive_Host_Head
;
Start_Send_Alarm_Command
LDI IEX,1011B
CALL Send_Alarm_Command
LDI PARM,01H
CALL Delay_X_6.2ms
CALL Send_Alarm_Command
LDI PARM,01H
CALL Delay_X_6.2ms
CALL Send_Alarm_Command
LDI PARM,01H
CALL Delay_X_6.2ms
CALL Send_Alarm_Command
LDI PARM,01H
CALL Delay_X_6.2ms
CALL Send_Alarm_Command
LDI PARM,01H
CALL Delay_X_6.2ms
CALL Send_Alarm_Command
LDI PARM,01H
CALL Delay_X_6.2ms
CALL Send_Alarm_Command
Receive_Host_Head
wait
CALL Setup_Time0_2ms
NOP
Wait_Start
NOP
NOP
LDA PORTB,00H
BA0 $+2
JMP Wait_Start1
NOP
NOP
NOP
LDA PORTB,00H
BA0 $+2
JMP Wait_Start1
CALL Setup_Time0_2ms
JMP Wait_Start
Wait_Start1
LDA TimeFlag,00H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -