📄 lock.dt
字号:
INCLUDE "LOCK.INC"
;***************************************
;**************PROGRAM**************
;***************************************
ORG 0X0001 ;单片机起始地址
INTERRUPT: ;中断服务程式执行地址
DISI
MOV A_BUFFER,A ;断点进栈保护,将中断处理子程式中所有用到的寄存器保护起来
SWAP A_BUFFER
SWAPA R3
MOV R3_BUFFER,A
MOV A,R4
MOV R4_BUFFER,A
;--------------------------------------------
INTTCC:
INC KEY_TIME1
JBC STTS,Z
INC KEY_TIME
JBS KEY_F,PAUSE_TONE
JMP INT_RET
MOV A,@0X04
XOR PORT6,A
;--------------------------------------------
INT_RET:
CLR R3F
MOV A,R4_BUFFER ;中断返回,将进栈保护的数据出栈
MOV R4,A
SWAPA R3_BUFFER
MOV R3,A
SWAPA A_BUFFER
RETI
;****************************************
; main program start
;****************************************
;***********************************
ORG 0X0FFF;****
JMP START;******
;***********************************
ORG 0X0020
START:
DISI
WDTC
CLR BSR
MOV A,@0X50
CONTW
MOV A,@0X07
IOW PORT7
MOV A,@0X10
IOW IOC6
MOV A,@0X00
IOW IOC5
MOV A,@0XFF
IOW IOCB
MOV A,@0XFF
MOV PORT7,A
MOV A,@0X0B
MOV PORT6,A
MOV A,@0X01
IOW IOCF
CLR 0X3F
;***********************************************
CLR BSR
MOV A,AAAAAA
XOR A,@0XAA
JBS STTS,Z
CLR RECORD_ERR
MOV A,AAAAAA
XOR A,@0XAA
JBC STTS,Z
INC RECORD_ERR
MOV A,AAAAAA
XOR A,@0XAA
JBS STTS,Z
JMP ALL_RAM_INIT
MOV A,@0X40
AND KEY_F,A
JMP ALL_RAM_INIT0
;**************RAM初始化**********************
BANK_RAM_INIT:;;;;;;;;;;;;;;;;;;;;CLR TOW LINES BANK
CLR R0
INC BSR
MOV A,BSR
XOR A,@0X3E
JBS STTS,Z
JMP BANK_RAM_INIT
RET
DIR_RAM:
MOV A,@0X10
MOV BSR,A
RAM_INIT:
CLR R0
INC BSR
MOV A,BSR
XOR A,@0X20
JBS STTS,Z
JMP RAM_INIT
RET
ALL_RAM_INIT:;**********
CALL DIR_RAM
ALL_RAM_INIT0:;**********
MOV A,@BANK0
MOV BSR,A
CALL BANK_RAM_INIT
MOV A,@0XAA
MOV AAAAAA,A
ENI
;*********MAIN**********
MAIN:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BC STTS,PS0
BC STTS,PS1
JBS KEY_F,ERROR_GUEST
JMP NO_ERR_GUEST
JBC RECORD_ERR,7
JMP ALL_RAM_INIT
NO_ERR_GUEST:
MOV A,KEY_TIME
ADD A,@0X2;0
JBC STTS,C
JMP START
NOP
CALL KEY_SCAN1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NOP
CALL KEY_FUNCTION;;;;;;;;;;;;;;
NOP
JBS KEY_F,DEL_ALL;
JMP MAIN1;
BC KEY_F,DEL_PASS
BC KEY_F,SET_PASS
CALL CLR_ERROR_CODE;
MOV A,@8
MOV START_ADDR,A
MAIN0:
CALL WRITE_CODE;
MOV A,@8;
ADD START_ADDR,A;
MOV A,START_ADDR;
JBS STTS,Z;
JMP MAIN0;
BC KEY_F,DEL_ALL;
CLR KEY_TIME
CLR KEY_TIME1
MAIN1:
NOP
CALL KEY_SCAN2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV A,KEY_F
AND A,@0X06
XOR A,@0X06
JBS STTS,Z
JMP MAIN
BC PORT6,GREEN
BC PORT6,RED
JMP MAIN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;*************THE OK SUBPROFREM**************
KEY_SCAN1: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;DOWN?
JBC KEY_F,ERROR_GUEST
RET
JBC KEY_F,KEY_PRESED
RET
REAL_PRESSED:
MOV A,TEMP1
AND A,@7
TBL
RET
JMP LINE0_PRESSED
JMP LINE1_PRESSED
JMP LINE2_PRESSED
JMP LINE3_PRESSED
RET
RET
RET
LINE0_PRESSED:;;;;;;;;;;;;;;;;;;;;
JBC PORT7,0
JMP SECOND_PRESSED
MOV A,@1
MOV KEY_STATE,A
BS KEY_F,KEY_PRESED
;BS PORT6,TONE
BS KEY_F,PAUSE_TONE
RET
SECOND_PRESSED:
JBC PORT7,1
JMP THIRD_PRESSED
MOV A,@2
MOV KEY_STATE,A
BS KEY_F,KEY_PRESED
;BS PORT6,TONE
BS KEY_F,PAUSE_TONE
RET
THIRD_PRESSED:
JBC PORT7,2
JMP THIRD_PRESSED
MOV A,@3
MOV KEY_STATE,A
BS KEY_F,KEY_PRESED
;BS PORT6,TONE
BS KEY_F,PAUSE_TONE
RET
LINE1_PRESSED:;;;;;;;;;;;;;;;;;;;;;;
CALL LINE0_PRESSED
MOV A,@3
ADD KEY_STATE,A
RET
LINE2_PRESSED:;;;;;;;;;;;;;;;;;;;;;;
CALL LINE0_PRESSED
MOV A,@6
ADD KEY_STATE,A
RET
LINE3_PRESSED:;;;;;;;;;;;;;;;;;;;;;;
CALL LINE0_PRESSED
MOV A,@9
ADD KEY_STATE,A
RET
JUDGE_LINE:
MOV A,@0XFF
MOV PORT7,A
BC PORT7,B3
MOV A,PORT7
AND A,@0X07
XOR A,@0X07
JBS STTS,Z
JMP KEY_PRESSED0
LINE_1:
MOV A,@0XFF
MOV PORT7,A
BC PORT7,B4
MOV A,PORT7
AND A,@0X07
XOR A,@0X07
JBS STTS,Z
JMP KEY_PRESSED1
LINE_2:
MOV A,@0XFF
MOV PORT7,A
BC PORT7,B5
MOV A,PORT7
KEY_PRESSED3:
INC TEMP1
KEY_PRESSED2:
INC TEMP1
KEY_PRESSED1:
INC TEMP1
KEY_PRESSED0:
INC TEMP1
CLR KEY_TIME
CLR KEY_TIME1
RET
KEY_SCAN2:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UP?
CLR BSR
CLR KEY_STATE
MOV A,PORT7
AND A,@0X07
XOR A,@0X07
JBS STTS,Z
RET
CALL DELAY10MS0
MOV A,PORT7
AND A,@0X07
XOR A,@0X07
JBS STTS,Z
RET
CLR BSR
CLR KEY_STATE
BC KEY_F,KEY_PRESED
;BC PORT6,TONE
BC KEY_F,PAUSE_TONE
RET
DELAY10MS:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Delay time 10ms
CLR BSR
MOV A,@0X80;20
MOV TEMP3, A
MOV A,@248
MOV TEMP4, A
DELAYWAIT:
DJZ TEMP4
JMP DELAYWAIT
MOV A,@248
MOV TEMP4, A
DJZ TEMP3
JMP DELAYWAIT
RET
DELAY10MS0:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Delay time 10ms
CLR BSR
MOV A,@0X20
MOV TEMP3, A
MOV A,@248
MOV TEMP4, A
DELAYWAIT0:
DJZ TEMP4
JMP DELAYWAIT0
MOV A,@248
MOV TEMP4, A
DJZ TEMP3
JMP DELAYWAIT0
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DEL_KEY:
CLR BSR
MOV A,BANK0
XOR A,@0XFF
JBS STTS,Z
JMP DEL_FUNC
JMP ADMIN_SW
DEL_FUNC:
MOV A,BANK0
XOR A,@0X0A
JBC STTS,Z
JMP ADMIN_SW
DEL_FUNC0:
MOV A,@LAST_CODE
MOV BSR,A
LOOP_DEL:
MOV A,R0
XOR A,@0XFF
JBS STTS,Z
JMP OUT_DEL
DEC BSR
JBS BSR,B5
RET
JMP LOOP_DEL
OUT_DEL:
MOV A,@0XFF
MOV R0,A
RET
ADMIN_SW:
JMP NOR_CODE
KEY_FUNCTION:
JBS KEY_F,ADMIN_F
JMP NOT_SET_FUNC
JBC KEY_F,ADMIN_FF
JMP SET_PASSWORD
NOT_SET_FUNC:
MOV A,KEY_STATE;###
XOR A,@0X0C
JBC STTS,Z
JMP COM_CODE
MOV A,KEY_STATE;***
XOR A,@0X0A
JBC STTS,Z
JMP DEL_KEY
NOR_CODE:
MOV A,RECORD_F
MOV BSR,A
MOV A,KEY_STATE
MOV R0,A
INC RECORD_F
MOV A,RECORD_F
ADD A,@0XFF-0X26
JBS STTS,C
RET
JMP ERROR_TONE
GUEST_ERROR0:
BC KEY_F,ADMIN_F
JMP GUEST_ERROR
COM_CODE:
MOV A,@BANK0
MOV BSR,A
MOV A,R0
XOR A,@0XFF
JBC STTS,Z
JMP GUEST_ERROR0
MOV A,R0
XOR A,@0X0A
JBS STTS,Z
JMP GUEST_COM
ADMIN_COM:
INC BSR
MOV A,R0
XOR A,@0X0A
JBS STTS,Z
JMP ERROR_TONE
MOV A,BSR
XOR A,@LAST_LAST
JBS STTS,Z
JMP ADMIN_COM
BS KEY_F,ADMIN_F
MOV A,@BANK0
MOV RECORD_F,A
JMP CLR_ERROR_CODE
GUEST_COM:
CLR RECORD_EE
LOOP_GUEST_COM:
JBS PORT6,INIT_PIN
JMP BACK_DOOR
MOV A,RECORD_EE
ADD A,@0X8;6
JBC STTS,C
JMP ERROR_GUST_TONE;GUEST_ERROR
MOV A,@0X20
MOV BSR,A
MOV RECORD_F,A
MOV TEMP3,A
MOV A,@BANK0
MOV BSR,A
MOV A,@BANK0+0X10
MOV TEMP3,A
CLR TEMP2
MOV A,@8;6
MOV DATA_LEN,A
JMP Read_Bytes_From_EEPROM
GUEST_ERROR:
INC RECORD_ERR
JBS RECORD_ERR,3
JMP ERROR_TONE
BS KEY_F,ERROR_GUEST
CLR RECORD_ERR
JMP ERROR_TONE
COMPLETE_READ:
CLR TEMP4
MOV A,@0X20
MOV BSR,A
LOOP_COM:
MOV A,R0
BS BSR,B4
XOR A,R0
JBS STTS,Z
JMP NEXT_ADDR
INC BSR
BC BSR,B4
MOV A,BSR
ADD A,@0XFF-0X25
JBS STTS,C
JMP LOOP_COM
JBC KEY_F,ADMIN_F
JMP ADMIN_WORD_IN
BC KEY_F,ADMIN_F
OPEN_GATE:
CLR RECORD_ERR
BC PORT6,GATE_SW
BC PORT6,GREEN
CALL DELAY10MS
CALL DELAY10MS
CALL DELAY10MS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -