📄 password .asm
字号:
;;*******************************************************
;@************ Filename : CLOCK.ASM ***************
;@****************** OSC:1MHz *********************
;@****************** HT48RA0-2 ****************
;;********************************************************
;*********************************************************
;I/O Structure:
;PB1 -- SCL
;PB0 -- SDA
;;4 scan line for output PA3~PA6
;;3 data line for input PB2~PB4
;;key matrix=3x4 12keys
;;PB5 is for "#" input
;;SYSTEM VOLT = 3V
;;WDT DISABLE
;;PB0~PB4 NO WAKEUP ,PB5 WAKEUP
;*************************************************************
# include ht48ra0-2.inc
;=====================================
;Define area
debounce_num equ 16
scl equ pb.1 ;serial clock data input
sda equ pb.0 ;Serial data I/O
read_out equ [3ch] ;write register
write_in equ [3dh] ;Read register
word_address equ [3eh]
data_8 equ [3fh]
;---------------------------
;---------------------------
;Define Macro
;Delay Macro,delay 100us
d_1 macro
local label
mov a,64h
mov delay,a
label:
sdz delay
jmp label
endm
;*************************************************************
SAMPLE .SECTION 'DATA'
;; --- Temp RAM ---
a_sr10 db ? ;;WORK Temp Register
a_sr11 db ? ;;
temp_num db ?
;;------CODE RAM---------
array_data db 8 dup (?) ;;8 byte password
;;--------- Program RAM --------
column db ? ;;Scan Key column Step Number
key_code0 db ? ;;Save Previous Key Number
key_code db ? ;;Scan Key Number
col_value db ? ;;Read on column value to a_COL_VALUE
kd_temp db ? ;;Key Debounce Check Times
nkd_temp db ? ;;Key Release Confirm Times
Key_data db ? ;;PA temp register
Key_data1 db ?
delay db ?
delay0 db ?
delay1 db ?
t_count db ?
t_count1 db ?
release_num db ? ;;count release key
;;--- User FLAG define ---
fg_SendActive dbit ;;VALIDITY KEY Flag
fg_PressRec dbit ;;Check Column Multi_Key Flag
fg_repeat dbit ;;REPEAT KEY Flag
fg_Multi_Key dbit ;;INVALID KEY Flag
release_flg dbit ;;release flag
flg_chang_key dbit
flg_chang_personal dbit
flg_chang_manage dbit
flg_chang dbit
;*************************************************************
code .section at 0 'code'
org 00h
START:
set pa
mov a, 20H
mov mp0, a
mov a, 50H
CLR_RAM:
clr r0
inc mp0
sdz acc
jmp clr_ram
mov a,070h
mov t_count,a
mov a,050h
mov t_count1,a
mov a,07fh
mov release_num,a
ini_clock:
mov a, offset personal_clock
mov tblp,a
mov a,00h ;write 00H to eeprom address,it is personal password
mov word_address,a
ini_personal_clock:
tabrdl write_in
call ht24_write
inc TBLP
inc word_address
mov a,offset personal_clock+8
xor a,TBLP
sz acc
jmp ini_personal_clock
mov a, offset manage_clock
mov tblp,a
mov a,010h ;write 10H to eeprom address,it is administration password
mov word_address,a
ini_manage_clock:
tabrdl write_in
call ht24_write
inc TBLP
inc word_address
mov a,offset manage_clock+8
xor a,TBLP
sz acc
jmp ini_manage_clock
clr pa.1
clr pa.2
mov a, offset array_data
mov mp0, a
;@*********** Polling System Event ***********
MAIN_PROC:
call scan_key_proc ;SCAN KEY PROCEDURE
mov a,0bh ;* key
xor a,key_code
sz acc
jmp $+2
jmp release_proc
sz fg_repeat
jmp sleep
sz fg_Multi_Key ;Check Invalid Key
jmp main_proc ;
mov a,0ch ;red key
xor a,key_code
sz acc
jmp $+4
set flg_chang_key
set flg_chang_personal
jmp main_proc
mov a,0ah ;"0" key
xor a,key_code
sz acc
jmp $+4
clr flg_chang_personal
set flg_chang_manage
jmp main_proc
sz key_code ;Check NO Key Press
jmp judge
jmp sleep
judge:
set pa.1
call delay30ms
clr pa.1
mov a,070h
mov t_count,a
mov a,050h
mov t_count1,a
sz release_flg
jmp release_proc ;;deal with “*” key
sz flg_chang_key
jmp manage_code ;;input mange password
sz flg_chang_manage
jmp chang_manage_proc ;;change mange password
sz flg_chang_personal
jmp chang_personal_proc ;;change personal password
jmp personal_code ;;input personal password
SLEEP:
sz pa.0
jmp $+2
jmp low_voltage ;;deal with low_voltage
sdz t_count1 ;\
jmp main_proc ; \
sdz t_count ; /if no key code wait 25s
jmp $-3 ;/
sz PB.5
halt ;System Halt
clr release_flg
clr flg_chang_key
clr flg_chang_manage
clr flg_chang_personal
mov a,070h
mov t_count,a
mov a,050h
mov t_count1,a
jmp main_proc ;Any Key WakeUp
;@************* SUBROUTINE[xx]: Scan 12 Key Matrix (3x4) ************
SCAN_KEY_PROC:
;;--- READ KEY PROCEDURE ---
;;Initiate Process
clr key_code ;
clr fg_PressRec ;
clr column ;
clr fg_Multi_Key ;
mov a,0f9h
mov pa,a
mov a,0fdh
mov key_data,a
mov a,0ch
mov key_data1,a
NEXT_COLUMN:
mov a,key_data1
xor a,key_data
rl key_data1
mov key_data,a
mov pa,a ;Scan Column PA PORT OUTPUT
nop
nop ;
;;--- READ PB PORT ---
mov a,pb ;;Read on column value to a_COL_VALUE
mov col_value,a ;;
mov a,1
mov a_sr11,a
mov a,11111011b ;;
mov a_sr10,a ;; This column value to ACC
snz col_value.4
jmp key_row_4
snz col_value.3
jmp key_row_3
snz col_value.2
jmp key_row_2
jmp $+1
nop
jmp col_without_key
key_row_4:
rl a_sr10 ;; a_SR10 rotate to "11101111b"
inc a_sr11
key_row_3:
rl a_sr10 ;; a_SR10 rotate to "11110111b"
inc a_sr11
key_row_2:
mov a,01ch
andm a,a_sr10
and a, col_value
xor A,a_sr10 ;;Check ROW Multi-Key
sz z
jmp col_with_key
col_error_key:
set fg_Multi_Key
col_without_key:
jmp $+1
jmp $+1
jmp $+1
jmp ready_2_next_column
col_with_key: ;;KEY NUMBER PROCESS
mov a,2 ;;\
mov temp_num,a ;; \
mov a,column ;; \
add a, column ;; /column * 3 --> ACC
;mov column,a ;; /
sdz temp_num ;; /
jmp $-2 ;;/
add a,a_sr11 ;;
mov key_code,a ;;
sz fg_PressRec ;;Check Column Multi-Key
set fg_Multi_Key ;;
set fg_PressRec ;;
ready_2_next_column:
inc column
mov A, column
xor a,4
snz z
jmp next_column
nop
READ_KEY_COMPLETE:
;@************* SUBROUTINE[xx]: Check Key Active ************
;@--- Scan Key Complete, Check key valid ? ---
CHECK_KEY_ACTIVE:
sz key_code ;;If a_KEY_NUM = ffh, invalid key
jmp valid_key_chk
jmp invalid_key_chk
;@--------------------------
VALID_KEY_CHK:
sz key_code0 ;;Check New Key
jmp valid_keyc_pro
jmp key_deb
VALID_KEYC_PRO:
mov A, key_code
xor A, key_code0 ;; Check Repeat key
snz z
jmp valid_key
;;----------------------------
VALID_RPSEND_KEY:
snz fg_Multi_key ;Check Multi-Key Clear KEY_CODE
jmp repeat_key
clr key_code
ret
REPEAT_KEY:
set fg_REPEAT ;;SET Repeat Flag
jmp $+1
jmp set_validfg
valid_key:
mov a, key_code0 ;;Check Change Key
xor a,0ffh ;;Check Debounce END
snz z
jmp chang_key
;;--- NEW KEY Initiate
clr fg_REPEAT
mov a, key_code
mov key_code0,a
;;--- SET VALIDITY KEY
SET_VALIDFG:
set fg_SendActive
ret
CHANG_KEY:
clr kd_temp
jmp rkey_pro
;@----------------------------
INVALID_KEY_CHK:
clr kd_temp
RKEY_PRO: ;Release Key Confirm
inc nkd_temp
mov a, nkd_temp
xor a,13
snz z
jmp scan_key_proc
dec nkd_temp
NO_KEY_PROC:
clr fg_SendActive
jmp $+1
jmp $+1
nop
EXIT_INVALID_KEY:
mov a, key_code ;Clear KEY_CODE0
mov key_code0,a
jmp $+1
ret
KEY_DEB:
;Check Key Debounce
inc kd_temp
mov A, kd_temp
xor a,debounce_num
snz z
jmp scan_key_proc
mov a,0ffh ;SAVE KEY Debounce Check END
mov key_code0,A ;0FFH to KEY_CODE0
jmp scan_key_proc
;****************read personal clock******************
personal_code:
mov a,key_code
mov r0, a
inc mp0
rl release_num
mov a,mp0
and a,7fh
xor a,offset array_data+8
sz acc ;;input 8 bit personal password
jmp main_proc
read_code1:
mov a,07fh
mov release_num,a
mov a, 8
mov temp_num, a
mov a,0
mov word_address, a
mov a, offset array_data
mov mp0, a
read_n1:
call ht24_read
mov a, r0
xor a, read_out ;;compare 8 bit personal password
sz acc
jmp fail_out ;;error password
inc mp0
inc word_address
sdz temp_num
jmp read_n1
jmp ok_end ;;right password
;--------------------
chang_personal_proc:
mov a,key_code
mov r0, a
inc mp0
rl release_num
mov a,mp0
and a,7fh
xor a,offset array_data+8
sz acc ;;input 8 bit manage password
jmp main_proc
mov a,07fh
mov release_num,a
mov a, 8
mov temp_num, a
mov a,0
mov word_address, a
mov a, offset array_data
mov mp0, a
personal_1:
mov a,r0
mov write_in,a
call ht24_write ;;input 8 bit to ht24
inc mp0
inc word_address
sdz temp_num
jmp personal_1
clr flg_chang_key
clr flg_chang_personal
call chang_end
mov a, offset array_data
mov mp0, a
jmp main_proc
;---------read manage clock----------------
manage_code:
mov a,key_code
mov r0, a
inc mp0
rl release_num
mov a,mp0
and a,7fh
xor a,offset array_data+8
sz acc
jmp main_proc
read_code2:
mov a,07fh
mov release_num,a
mov a, 8
mov temp_num, a
mov a,010h
mov word_address, a
mov a, offset array_data
mov mp0, a
read_n2:
call ht24_read
mov a, r0
xor a, read_out
sz acc
jmp fail_out
inc mp0
inc word_address
sdz temp_num
jmp read_n2
clr flg_chang_key
call chang_proc
mov a, offset array_data
mov mp0, a
jmp main_proc
;---------------------------------------------
chang_manage_proc:
;call chang_proc
mov a,key_code
mov r0, a
inc mp0
rl release_num
mov a,mp0
and a,7fh
xor a,offset array_data+8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -