?? m_master.asm
字號:
;接收后回傳
;M_Master:
;Date 06.04.30
;MCU HT48R30A-1 24pin sop
;空腳全做輸出,防止受到外部干擾
;帶斷電記憶,靜音時按key2不回到有聲,而是尋車,要按key3解除再按key2才回到有聲
;進入防槍時,只有KEY3有效
R0 EQU 00H
MP EQU 01H
ACC EQU [05H]
Wdts equ [09h]
STATUS EQU [0AH]
C EQU [0AH].0
Z EQU [0AH].2
TO EQU [0AH].5
Intc equ 0bh
Emi equ 0
EEi equ 1
Eti equ 2
EIF equ 4
TF equ 5
Tmr equ 0dh
Tmrc equ 0eh
Ton equ 4
PA EQU [12H]
Vdd_STA EQU [12H].0
Flameout EQU [12H].1 ;熄火
Learn_Key EQU [12H].2
LockOn EQU [12H].6
PAC EQU [13H]
PB EQU [14H]
Bugle EQU [14H].1
STA EQU [14H].2
Light EQU [14H].3
Vib EQU [14H].4 ;振動
;;TX EQU [14H].5
RX EQU [14H].6
Vdd_TxRx EQU [14H].7 ;TxRx Vdd
RF EQU [14H].6;0
BUZ EQU [14H].0
PBC EQU [15H]
PC EQU [16H]
SDA EQU [16H].0;4;0;1
SCL EQU [16H].2;5;2
PCC EQU [17H]
SDA_C EQU [17H].0;4;0;1
SCL_C EQU [17H].2;5;2
PGC EQU [1FH]
PG EQU [1EH]
COUNT0 EQU [40H]
COUNT1 EQU [41H]
COUNT2 EQU [42H]
COUNT3 EQU [43H]
TX_CNT EQU [44H]
CNT0 EQU 45H
CNT1 EQU 46H
CNT2 EQU 47H
TMP_CNT EQU 48H
FLAGS EQU 49H
BITIN EQU 07H
DATA1 EQU 4AH
DATA2 EQU 4BH
DATA3 EQU 4CH
COUNT4 EQU [4DH]
TX_CNT1 EQU [4EH]
KEY_Cancel EQU 4FH
CHKData1 EQU 51H
CHKData2 EQU 52H
CHKData3 EQU 53H
CHKData4 EQU 54H
CHKData5 EQU 55H
CHKData6 EQU 56H
KEY_Only EQU 57H
FLAG EQU 58H
F_KEY1 EQU [58H].0
F_KEY2 EQU [58H].1
F_KEY3 EQU [58H].2
F_KEY4 EQU [58H].3
F_KEY5 EQU [58H].4
F_KEY6 EQU [58H].5
F_KEY7 EQU [58H].6
F_KEY8 EQU [58H].7
Dataaddr EQU 59H
Tempdata2 EQU 5AH
CentreConlTime EQU 5BH
Read_out EQU 5CH
Temp3 EQU 5DH
COUNT_IIC0 EQU 5EH
COUNT_IIC1 EQU 5FH
BUF EQU [60H]
CNT10s_30s EQU [61H]
COUNT_4s EQU [62H]
COUNT_30s EQU [63H]
COUNT_Vib EQU [64H]
CNT_Bits EQU [65H] ;TX 位數
CNT_TX EQU [66H] ;TX 次數
FLAG1 EQU [67H]
;/F_guard EQU [67H].0
F_first EQU [67H].1
;/Un_Bugle EQU [67H].2 ;靜音
F_START EQU [67H].3 ;啟動標記
F_SaveKeyArea EQU [67H].4
Un_Light EQU [67H].5
Open_Light EQU [67H].6 ;第2次振動 OR LOCK ON ,燈閃爍
F_run EQU [67H].7 ;n.串聯 ;第2次振動 OR LOCK ON ,只做一次響應標記
Temp0 EQU 68H
COUNT_240ms EQU [69H]
FLAG2 EQU [6AH]
F_Rob EQU [6AH].0 ;防搶標記
F_DELAY EQU [6AH].1 ;延時次數
F_glom EQU [6AH].2 ;偷
Relay_Stop EQU [6AH].3 ;Relay stop 釋放,延時,防止自身振動連續響應
come_lockon equ [6ah].4 ;來自 LOCKON 發射標記
come_vib equ [6ah].5 ;來自 振動 發射標記
tx_comeVib equ [6ah].6 ;決定來自 振動 再次發射標記 在MAIN里掃描
tx_comelock equ [6ah].7 ;決定來自 LOCKON 再次發射標記 在MAIN里掃描
TX_Data1 EQU 6BH ;Return Remote Code
TX_Data2 EQU 6CH
TX_Data3 EQU 6DH
Re_LOOP EQU [6EH] ;循環次數
;----------------------------------
;放在同一個單元以便控制斷電記憶
Memory_ret EQU [6FH] ;
F_guard EQU [6FH].0
Un_Bugle EQU [6FH].1 ;靜音
;----------------------------------
F_Auto EQU [6FH].2 ;允許自動設防標記
INT_Auto EQU [6FH].3 ;自動設防中斷體
F_KEY_Auto EQU [6FH].4
;/TurnOn_Lock EQU [6FH].5 ;插上鑰匙標記
SAVE_DATA1 EQU [70H]
SAVE_DATA2 EQU [71H]
SAVE_DATA3 EQU [72H]
BUF_STATUS EQU [73H]
CNT_Auto4s EQU [74H] ;自動設防計時器
CNT_Auto EQU [75H]
CNT_Auto10s EQU [76H]
ORG 000H
JMP START
ORG 008H
JMP SEVER
ORG 0010h;20H
START:
SZ TO
JMP Re_WDT
mov a, 40H;20H;40h
mov [mp], a
mov a,3CH;5CH;3ch
mov COUNT2,A;[count1], a
RegClear:
clr [r0]
inc [mp]
sdz COUNT2 ;[count1]
jmp RegClear
Re_WDT:
CLR TO
MOV A,7D
MOV WDTS,A
MOV A,87D
MOV [TMRC],A
MOV A,01000100B
MOV PAC,A
MOV A,00000100B
MOV PA,A
MOV A,01010000B
MOV PBC,A
;MOV A,00H;00000000B
;MOV PB,A
CLR PB
CLR PCC
CLR PGC
call Readbyte1 ;斷電記憶
call ReadRemote ;恢復保護 Remote code 以免復位清0過后不能正確回傳正在使用的遙控器碼
;======== 轉為輸出口,TX ================
;CLR PBC;SET PBC ;輸出口,TX
;clr pb;SET PB;CLR PB
;CLR PAC.7
;CLR PA
;==========================================
;======= 轉為輸入口,來接收 ==========
;SET PBC.6 ;轉為輸入口,接收Remote信號進來
;CLR PB.7 ; RX提供電源,;停止TX ,且開始RX
;CLR PBC.5 ; TX 輸出
;=====================================
;SET PAC.2 ;學習
;SET PA.2
;SET PAC.6 ;鑰匙輸入
;CLR PA.6
;SET PBC.4 ;振動輸入 CLR Vdd_sta ;恢復引擎
;CLR Flameout
; CLR PB.4
; CLR PCC
MAIN:
SZ F_KEY_Auto ; 自動設防
JMP KEY_Auto
CLR PB.7 ;RX 供電
CLR WDT
CALL RECEIVE
SNZ C
JMP RIGHT
SnZ F_guard
JMP LEARN_ON ;JMP MAIN
SnZ Learn_key;SNZ Free ;緊急解除,備用
JMP CH_LockOn ;jmp key3
;------------------------------------
sz Tx_ComeLock
jmp L_Tx_again
sz Tx_ComeVib ;振動或 LOCKON 再重新發射 3 次
jmp Vib_Tx_again
;------------------------------------
SZ F_START ;在設防狀態下,啟動時,不掃描 LockOn,以免報警
JMP GU
SZ LockOn ;在報警下 LockOff,時,30s后關閉報警,(30s后中斷時間到 clr f_run )
JMP Alarm1 ; LockOn 時,一直不停的叫
;----------------------------------------
;在報警下 LockOff,時關
;/ SZ F_glom ;偷
;/ JMP Alarm1_out
;----------------------------------------
GU:
SZ F_run ;concatenation : n.串聯
JMP MAIN
SZ Vib
JMP Alarm2
JMP MAIN
LEARN_ON:
SNZ LockOn
JMP Automatism ;JMP MAIN 自動設防
SNZ Learn_key
CALL LEARN
snz f_rob ;;防止防搶熄火進入自動設防,同時計時車等不閃爍
SET F_Auto ;在解除下啟動或Lockon時,為關鑰匙或熄火后,允許進入自動設防做好準備
;clr int_auto
;clr f_key_auto
;clr f_Goto_auto
;snz f_start
;clr [tmrc].ton
JMP MAIN
Automatism: ;自動設防
;CLR TurnOn_lock
SNZ F_Auto
JMP MAIN
CLR F_START ;關鑰匙熄火,進入自動設防
CLR CNT_Auto4s;COUNT_4s
CLR CNT_Auto;COUNT_30s
MOV A,3d;1d;3D ;12s
MOV CNT_Auto10s,A;CNT10s_30s,A
CLR F_Auto
SET INT_Auto ;進入自動設防中斷體
MOV A,87H
MOV [TMRC],A
CLR [TMR]
MOV A,05H
MOV [INTC],A
SET [TMRC].TON
JMP MAIN
CH_Lockon:
SNZ Lockon
JMP MAIN
JMP KEY3 ;解除
RIGHT:
;-----------------
SET PB.7;SET PB.4 ; TX提供電源
CALL READBYTE
;MOV A,[DATA3];CALL READBYTE
;AND A,0F0H
;MOV [CHKDATA3],A ;不存按鍵碼
;MOV A,[DATA2]
;MOV [CHKDATA2],A
;MOV A,[DATA1]
;MOV [CHKDATA1],A
;-------------
CALL KEY_BY_KEY
SZ F_KEY1
JMP KEY1
SZ F_KEY2
JMP KEY2
SZ F_KEY3
JMP KEY3
SZ F_KEY4
JMP KEY4
SZ F_KEY5
JMP KEY5
SZ F_KEY6
JMP KEY6
;SZ F_KEY7
;JMP KEY7
;SZ F_KEY8
;JMP KEY8
JMP MAIN
Alarm1: ;LOCK ON
;**************************************************************************
;SNZ Free ;緊急解除
;JMP KEY3 ;備用
;**************************************************************************
SET F_glom ;偷
SZ PB.1 ;防止長發射,且不再進入初始化中斷值,讓燈閃爍
JMP MAIN
SET PB.1 ;打開喇叭 ; 在 MAIN 里,LOCK OFF 時,關喇叭
;SET Light ;;;;;;;;;;;;
CLR Vdd_sta ;關閉引擎
SET Flameout
CLR Relay_Stop ;Relay stop 釋放,延時,防止自身振動連續響應
CLR Un_Light
CLR COUNT_240ms
MOV A,87H
MOV [TMRC],A
CLR [TMR]
MOV A,05H
MOV [INTC],A
CLR COUNT_4s
CLR COUNT_30s
MOV A,7D ;30s
MOV CNT10s_30s,A
CLR INT_Auto ;退出自動設防中斷體
SET [TMRC].TON
;$$$$$$$$$$$$$$$$$$$$$$$$$
CLR Come_vib
SET Come_Lockon ; 來自Lockon 的重新發射
L_TX_again:
clr Tx_ComeLock ;發射后清除,等8s過后中斷再置1,再次發射
;$$$$$$$$$$$$$$$$$$$$$$$$$
;=== 回傳 ============
SET PB.7;SET PB.4 ; TX提供電源
MOV A,60d;120D;13d;3D ;6s
MOV CNT_TX,A
Alarm1_1:
CALL TX
CALL TX0 ;盜竊回傳 07h ;08H
CALL TX1
CALL TX1
CALL TX1
SDZ CNT_TX
JMP Alarm1_1
JMP MAIN
;=======================
;Alarm1_out: ;在報警下 LockOff,時關
; CLR [TMRC].TON
; CLR F_run
; CLR F_glom
; CLR Bugle
; CLR Light
; CLR Flameout
; CALL DELAY240ms ;防止自身繼電器振動
; JMP MAIN
Alarm2:
SET PB.7 ; TX提供電源
CLR Vdd_sta ;關閉引擎
SET Flameout
CLR F_START ;
CLR Relay_Stop ;Relay stop 釋放,延時,防止自身振動連續響應
;-------------- 前發 -----------------
MOV A,13d;120D;13d;3D ;6s
MOV CNT_TX,A
Alarm2_2:
CALL TX
CALL TX0
CALL TX1 ;振動回傳 06H
CALL TX1
CALL TX0
SDZ CNT_TX
JMP Alarm2_2
;------------------------------------
;$$$$$$$$$$$$$$$$$$$$$$$$$
SET Come_vib ;來自振動的 重新發射
CLR Come_Lockon
;;Vib_TX_again:
;$$$$$$$$$$$$$$$$$$$$$$$$$
SZ F_first
JMP Secend_Vib
MOV A,3d;5D ;第一次振動
MOV COUNT_Vib,A
Alarm2_1:
SNZ Un_Bugle
SET PB.1
SET Light
CALL DELAY240ms
CALL DELAY240ms
CLR PB.1
CLR Light
CALL DELAY240ms
CALL DELAY240ms
SDZ COUNT_Vib
JMP Alarm2_1
SET Un_Light
MOV A,87H
MOV [TMRC],A
CLR [TMR]
MOV A,05H
MOV [INTC],A
CLR COUNT_4s
CLR COUNT_30s
MOV A,4D ;10s
MOV CNT10s_30s,A
CLR INT_Auto ;退出自動設防中斷體
SET [TMRC].TON
SET F_first
CLR Vdd_sta ;恢復引擎
CLR Flameout
;/ CALL DELAY240ms ;繼電器關閉后等待,防止自身振動報警
Vib_TX_again:
SET PB.7 ; TX提供電源
clr Tx_ComeVib ;發射后清除,等8s過后中斷再置1,再次發射
;/Quit:
;---------- 后發射 --------------------
MOV A,60d;120D;13d;3D ;6s
MOV CNT_TX,A
Alarm2_2L:
CALL TX
CALL TX0
CALL TX1 ;振動回傳 06H
CALL TX1
CALL TX0
SDZ CNT_TX
JMP Alarm2_2L
;---------------------------------------
JMP MAIN
Secend_Vib: ;第二次振動
MOV A,87H
MOV [TMRC],A
CLR [TMR]
MOV A,05H
MOV [INTC],A
CLR Un_Light
CLR COUNT_240ms
CLR COUNT_4s
CLR COUNT_30s
MOV A,7D ;30s
MOV CNT10s_30s,A
CLR INT_Auto ;退出自動設防中斷體
SET [TMRC].TON
SNZ Un_Bugle
SET Bugle
;SET Light;;;;;;;;;;;;
jmp Vib_TX_again ;quit;JMP MAIN
KEY_Auto: ;自動有聲設防
;--------------------------
;清除所有再次發射
clr come_lockon
clr come_vib
;--------------------------
CLR F_KEY_Auto
SZ F_START
JMP GoAuto
SZ lockon ;f_start;F_guard
jmp main ;插上鑰匙后,也計時但不進入自動設防
GoAuto:
SZ F_guard
JMP MAIN
;SZ TurnOn_Lock;F_Auto ;插上鑰匙后,就不再進入自動設防
;JMP MAIN
;/snz f_start ;啟動時,不掃描 LOCK ON
;/CLR F_START ;設防或防搶后轉為掃描 LOCK ON,以便盜竊報警
;/SZ F_guard
;/JMP KEY1
;/SZ LockOn ;遙控啟動時,LockOn=1
;/JMP ROB ;在解除狀態下,接收到這個鍵時,進入防搶
;SZ F_run
;JMP Unchain ;解除報警
SET F_guard
CLR Relay_Stop ;Relay stop 釋放,延時,防止自身振動連續響應
CLR F_glom ;偷
CLR Un_Bugle ;有聲
SET Bugle
SET Light
CALL DELAY_Auto;DELAY240ms
CLR Bugle
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -