;LIST P=SM311, CLOCK=4MHZ, WDT=DISBALE,INT=ENABLE
;-----------------------------------------------------------
; LOUDOUT RA0 1 14 RA1 WHITE_BULB
; SIGNAL_IN RB7 2 13 RA2 BLUE_BULB
; READ RB6 3 12 RA3 BROWN_BULB
; VDD 4 11 VSS
; K1 RB5 5 10 RB0 YELLOW_BULB
; K2 RB4 6 9 RB1 BUZ
; RESET RB3 7 8 RB2 POWER_CUT
;-----------------------------------------------------------
INDF EQU 00H
TMR0 EQU 01H
PCL EQU 02H
STATUS EQU 03H
FSR EQU 04H
RA EQU 05H
;-----------------------------------------------------------
LOUDOUT EQU 0
WHITE_BULB EQU 1
BLUE_BULB EQU 2
BROWN_BULB EQU 3
;-----------------------------------------------------------
RB EQU 06H
;-----------------------------------------------------------
YELLOW_BULB EQU 0
BUZ EQU 1
POWER_CUT EQU 2
K2 EQU 4
K1 EQU 5
READ EQU 6
SIGNAL_IN EQU 7
;-----------------------------------------------------------
IRQM EQU 09H
;-----------------------------------------------------------
TM0M EQU 0
PBM EQU 1
INTM EQU 7
;-----------------------------------------------------------
IRQF EQU 0AH
;-----------------------------------------------------------
TM0F EQU 0
PBF EQU 1
;-----------------------------------------------------------
PA_PDM EQU 0BH
PB_PUP EQU 0CH
PB_PDM EQU 0DH
PB_POD EQU 0EH
WAKEUP EQU 0FH
;-----------------------------------------------------------
A EQU 0
M EQU 1
;---STATUS REG----------------------------------------------
C EQU 0
DC EQU 1
Z EQU 2
PD EQU 3
TO EQU 4
GP0 EQU 5
GP1 EQU 6
GP2 EQU 7
;---OPTION REG----------------------------------------------
PS0 EQU 0
PS1 EQU 1
PS2 EQU 2
PSA EQU 3
T0SE EQU 4
T0CS EQU 5
INTEDG EQU 6
;---PA_PDM REG----------------------------------------------
DB0 EQU 0
DB1 EQU 1
DB2 EQU 2
EXTEN EQU 6
RTCEN EQU 7
;---PB_POD REG----------------------------------------------
OB0 EQU 0
OB1 EQU 1
OB2 EQU 2
OB4 EQU 4
OB5 EQU 5
OB6 EQU 6
OB7 EQU 7
;---WAKEUP REG----------------------------------------------
EN0 EQU 0
EN1 EQU 1
EN2 EQU 2
EN4 EQU 4
EN5 EQU 5
EN6 EQU 6
EN7 EQU 7
;-----------------------------------------------------------
;CONSUMER REGISTER
;-----------------------------------------------------------
MAXDATA EQU .250 ; 高低電平寬度最大值
;-----------------------------------------------------------
CODE_TOTAL EQU 20H
LCODE EQU 21H ; 記錄一幀碼的低8位數(shù)據(jù)
MCODE EQU 22H ; 記錄一幀碼的中8位數(shù)據(jù)
HCODE EQU 23H ; 記錄一幀碼的高8位數(shù)據(jù)
;-----------------------------------------------------------
LBIT EQU 25H ; 記錄'0'和'1'碼的低電平寬度
HBIT EQU 26H ; 記錄'0'和'1'碼的高電平寬度
LCODE_EE EQU 27H ; 記錄EEPROM低8位數(shù)據(jù)
MCODE_EE EQU 28H ; 記錄EEPROM中8位數(shù)據(jù)
HCODE_EE EQU 29H ; 記錄EEPROM高4位數(shù)據(jù)
MODEREG EQU 2AH ; 按鍵定時(shí)器
SHIFT EQU 2BH
KEYREG EQU 2CH
CNT_LW EQU 2DH ; 定時(shí)寄存器
CNT_HI EQU 2EH
;-----------------------------------------------------------
FRAME EQU 2FH ;
;-----------------------------------------------------------
CNT EQU 30H
CNT2 EQU 31H
DEL1 EQU 32H
CNT_32MS EQU 33H
CNT_4S EQU 34H
CNT_1M EQU 35H
W_REG EQU 36H
S_REG EQU 37H
R_BUZ EQU 38H
;-----------------------------------------------------------
LREG EQU 3DH ; 手動(dòng)開關(guān)瞬間按燈閃爍順序
; LREG值為"1":白燈亮
; LREG值為"2":白燈+藍(lán)燈亮
; LREG值為"3":白燈+藍(lán)燈+棕?zé)袅?
; LREG值為"4":白燈+藍(lán)燈+棕?zé)?黃燈亮
;-----------------------------------------------------------
FREG_1 EQU 3EH
UP_FLAG EQU 7 ; FREG_1.7 上電標(biāo)志位。
DELAY_FLAG EQU 6 ; FREG_1.6 按鍵延時(shí)1分鐘標(biāo)志
DELAY200MS_FLAG EQU 5 ; FREG_1.5 延時(shí)10秒標(biāo)志位。
REMOTE_FLAG EQU 4 ; FREG_1.4 遙控按鍵成功標(biāo)志位。
OUT4_FLAG EQU 3 ; FREG_1.3 4路輸出狀態(tài)標(biāo)志位。
OUT3_FLAG EQU 2 ; FREG_1.2 3路輸出狀態(tài)標(biāo)志位。
OUT2_FLAG EQU 1 ; FREG_1.1 2路輸出狀態(tài)標(biāo)志位。
OUT1_FLAG EQU 0 ; FREG_1.0 1路輸出狀態(tài)標(biāo)志位。
;-----------------------------------------------------------
FREG_2 EQU 3FH
R_K1 EQU 0 ;'0'->延時(shí)1路輸出不閃動(dòng),'1'->延時(shí)1路輸出閃動(dòng)
R_K2 EQU 1 ;'0'->四路遙控輸出,'1'->三路輸出
R_LOADOUT EQU 2 ;'0'->無負(fù)載輸出,'1'->有負(fù)載輸出
R_80M EQU 3 ;80分鐘定時(shí)器,'0'->
R_AGAINST EQU 4 ;'0'->防盜功能未開啟,'1'->防盜功能已開啟
R_AGAINST_L1 EQU 5 ;'0'->L1燈閃兩次,'1'->L1燈閃一次
OUT_ONOFF EQU 6 ;ON/OFF松鍵標(biāo)志
OUT_DLEY EQU 7 ;DLEAY松鍵標(biāo)志
;=======================================================
;=======================================================
ORG 3FFH
LGOTO 0X00
ORG 0X00
LGOTO BOOT
ORG 3FEH
LGOTO INTERRUPT_TMR0
;=======================================================
;2262,8位地址碼
;=======================================================
ORG 001H
LOW_ADDRESS:
RETLA 0X30
HIGH_ADDRESS:
RETLA 0XEF
;========================================================
;中斷子程序
;========================================================
ORG 004H
INTERRUPT_TMR0:
MOVAM W_REG
SWAP STATUS,A
MOVAM S_REG
INT_TMR0_START:
BTSC IRQF,TM0F
LGOTO INT_TMR0_DEAL
INT_TMR0_END:
BC IRQF,TM0F
SWAP S_REG,A
MOVAM STATUS
SWAP W_REG,M
RETI
INT_TMR0_DEAL:
MOVLA .250
MOVAM TMR0
INC CNT_32MS,M
BTSC FREG_1,REMOTE_FLAG
INC MODEREG,M ;按鍵松鍵時(shí)間寄存器
; BTSC FREG_1,DELAY200MS_FLAG
; INC R_BUZ,M
MOVLA .125
SUB CNT_32MS,A
BTSS STATUS,Z
LGOTO INT_TMR0_END
CLR CNT_32MS
INC CNT_4S,M
; MOVLA .1
MOVLA .15
SUB CNT_4S,A
BTSS STATUS,Z
LGOTO INT_TMR0_END
CLR CNT_4S
INC CNT_1M,M
MOVLA .100 ;80分鐘定時(shí)器
SUB CNT_1M,A
BTSS STATUS,Z
LGOTO INT_TMR0_END
CLR CNT_32MS
CLR CNT_4S
CLR CNT_1M
LGOTO INT_TMR0_END
;=======================================================
;延時(shí)子程序
;=======================================================
DELAY:
MOVLA 0XFF
MOVAM DEL1
LOOP_DELAY:
CLRWDT
LGOTO $+1
LGOTO $+1
LGOTO $+1
LGOTO $+1
LGOTO $+1
DECSZ DEL1,M
LGOTO LOOP_DELAY
RETLA 0X00
;----------------------------------
DELAY1:
LGOTO $+1 ;2
LGOTO $+1 ;2
DELAY2: NOP ;1
DELAY3: NOP ;1
DELAY4: NOP ;1
DELAY5: NOP ;1
DELAY6: NOP ;1
DEALY7: LGOTO $+1 ;2
DELAY8: NOP ;1
DELAY9: NOP ;1
DEALYA: NOP ;1
DELAYB: NOP ;1
RETLA 0X00
;=======================================================
;重新計(jì)時(shí)子程序
;=======================================================
RESTART_TIME:
MOVLA .250
MOVAM TMR0
CLR CNT_32MS
CLR CNT_4S
CLR CNT_1M
RETLA 0X00
;=======================================================
;L1燈即:WHITE_BULB,閃爍一次子程序
;=======================================================
WHITE_BULB_FLISH:
MOVLA 0X02 ;按鍵取反讓其閃爍
XOR RA,M
MOVLA .168
MOVAM SHIFT
MOVLA .255
MOVAM CNT
NOP
NOP
NOP
NOP
DECSZ CNT,M
LGOTO $-3
DECSZ SHIFT,M
LGOTO $-7
RETLA 0X00
;=======================================================
;按鍵延時(shí)1與延時(shí)80分鐘定時(shí)關(guān)閉子程序
;=======================================================
TST_KEYDELAY:
MOVLA .3 ;去遙控器按鍵抖動(dòng)
SUB MODEREG,A ;松開鍵
BTSS STATUS,C
LGOTO TST_KEYDELAY_END
MOVLA 0X07
BTSS FREG_2,R_K2 ;判斷是三路或者是四路遙控
MOVLA 0X0F
AND FREG_1,A
BTSC STATUS,Z
LGOTO OPEN_LOAD
BC RA,LOUDOUT
LGOTO LOAD_JUDGE_END
OPEN_LOAD:
BS RA,LOUDOUT ;如果沒有燈亮,打開負(fù)載
LOAD_JUDGE_END:
; BTSS FREG_1,DELAY200MS_FLAG
; LGOTO BUZ100MS_END
; MOVLA .7
; SUB R_BUZ,A
; BTSS STATUS,C
; LGOTO OPEN_BUZPRO
; LGOTO OFF_BUZPRO
;OPEN_BUZPRO:
; BS RB,BUZ
; LGOTO BUZ100MS_END
;OFF_BUZPRO:
; BC RB,BUZ
; CLR R_BUZ
; BC FREG_1,DELAY200MS_FLAG
;BUZ100MS_END:
BTSS FREG_1,REMOTE_FLAG ;遙控成功標(biāo)志檢測(cè),
LGOTO DLEAY_START
; BTSS FREG_1,DELAY_FLAG
; LGOTO STATE_BEGIN
;
; BTSS FREG_2,R_K1 ;檢測(cè)延時(shí)L1燈,是否閃爍
; LGOTO STATE_BEGIN ;FREG_2.R_K1=0不閃爍
;
; BTSC FREG_2,R_AGAINST
; LGOTO STATE_BEGIN ;當(dāng)防盜功能開啟后燈不用再閃爍
;
; BTSC FREG_1,DELAY200MS_FLAG
; LGOTO STATE_BEGIN
;
; LCALL WHITE_BULB_FLISH
; MOVLA 0X02 ;按鍵取反讓其閃爍停止
; XOR RA,M
STATE_BEGIN:
LCALL RESTART_TIME
BC FREG_1,REMOTE_FLAG ;設(shè)置按鍵松開標(biāo)志
DLEAY_START:
BTSC FREG_1,DELAY_FLAG ;延時(shí)按鍵標(biāo)志=0
LGOTO DELAY_1M_PRO
BTSS FREG_2,R_AGAINST ;檢測(cè)防盜是否開啟
LGOTO TST_KEYDELAY_END ;防盜沒有開啟,直接返回
LGOTO AGAINST_80M_PRO ;進(jìn)入防盜功能子程序
DELAY_1M_PRO:
MOV CNT_1M,A
BTSC STATUS,Z
LGOTO TST_KEYDELAY_END ;CNT_1M=0,未到1分鐘返回
MOVLA 0X1
MOVAM RA
CLR RB
MOVLA 0XB0
AND FREG_1,M ;清除四盞燈的點(diǎn)亮標(biāo)志,和延時(shí)按鍵標(biāo)志
LCALL RESTART_TIME
LGOTO TST_KEYDELAY_END
AGAINST_80M_PRO:
BTSC FREG_2,R_80M ;0->應(yīng)進(jìn)入關(guān)閉的80分鐘,1->應(yīng)輸出全部負(fù)載4分鐘
LGOTO AGAINST_L1_SHINE4M
MOVLA .80 ;80分鐘定時(shí)
; MOVLA .4
SUB CNT_1M,A
BTSS STATUS,Z
LGOTO TST_KEYDELAY_END
BS FREG_2,R_80M ;80分鐘,將R_80標(biāo)志置1,
MOVLA 0X0E
MOVAM RA ;點(diǎn)亮L1/L2/L3
MOVLA 0X0F
IOR FREG_1,A
MOVAM FREG_1
LGOTO AGAINST_L1_SHINE_CHANGE
AGAINST_L1_SHINE4M:
MOVLA .4
; MOVLA .1
SUB CNT_1M,A ;4分鐘定時(shí)
BTSS STATUS,Z
LGOTO TST_KEYDELAY_END
BC FREG_2,R_80M
MOVLA 0X00
MOVAM RA
MOVLA 0XF8
AND FREG_1,A ;清除燈的標(biāo)志
MOVAM FREG_1
AGAINST_L1_SHINE_CHANGE:
BC FREG_1,REMOTE_FLAG
LCALL RESTART_TIME
LGOTO TST_KEYDELAY_END
;=======================================================
;掉電子程序
;=======================================================
POWER_CUT_PRO:
MOVLA 00H ;關(guān)閉中斷
MOVAM IRQM
MOVLA 0X00
MOVAM RA ;熄滅白/藍(lán)/棕三盞燈
MOVAM RB ;熄滅黃燈
MOVLA .8
MOVAM CNT
LCALL DELAY
LCALL DELAY
DECSZ CNT,M
LGOTO $-3
BTSC RB,POWER_CUT
LGOTO HAND_SWITCH_PRO_END
POWER_CUT_PRO_LOOP:
BTSS RB,POWER_CUT
LGOTO POWER_CUT_PRO_LOOP
BTSS FREG_1,UP_FLAG ;檢測(cè)掉電標(biāo)志,
LGOTO POWER_CUT_PRO_END ;"0"表示未掉電,"1"表示掉電
INC LREG,M ;手動(dòng)開關(guān)的4個(gè)狀態(tài)
MOVLA .5 ;四路遙控
BTSC FREG_2,R_K2 ;判斷是三路和四路遙控
MOVLA .4 ;三路遙控
SUB LREG,A
BTSS STATUS,C
LGOTO HAND_SWITCH_PRO
MOVLA .1
MOVAM LREG
LGOTO HAND_SWITCH_PRO
POWER_CUT_PRO_END
BS FREG_1,UP_FLAG ;將掉電標(biāo)志設(shè)為"1"
; MOVLA 0X00
; MOVAM RA ;熄滅白/藍(lán)/棕三盞燈
; MOVAM RB ;熄滅黃燈
LGOTO POWER_CUT_PRO_LOOP
;=======================================================
;掉電上電后燈狀態(tài)
;=======================================================
HAND_SWITCH_PRO:
BC FREG_1,UP_FLAG ;將掉電標(biāo)志值為"0"
BC FREG_1,DELAY_FLAG ;清除按鍵延時(shí)標(biāo)志
BC FREG_2,R_AGAINST
MOVLA .1
MOVAM CNT
LCALL DELAY
LCALL DELAY
DECSZ CNT,M
LGOTO $-3
MOVLA .1
SUB LREG,A
BTSC STATUS,Z
LGOTO SWITCH_1_PRO
MOVLA .2
SUB LREG,A
BTSC STATUS,Z
LGOTO SWITCH_2_PRO
MOVLA .3
SUB LREG,A
BTSC STATUS,Z
LGOTO SWITCH_3_PRO
; MOVLA 0X0E ;點(diǎn)亮白/藍(lán)/棕三盞燈
; MOVAM RA
; MOVLA 0X01 ;點(diǎn)亮黃燈
; MOVAM RB
BS RA,WHITE_BULB
BS RA,BLUE_BULB
BS RA,BROWN_BULB
BS RB,YELLOW_BULB
MOVLA 0X0F
IOR FREG_1,A
MOVAM FREG_1
LGOTO HAND_SWITCH_PRO_END
SWITCH_1_PRO:
; MOVLA 0X00
; MOVAM RB
; MOVLA 0X02
; MOVAM RA ;點(diǎn)亮白燈
BS RA,WHITE_BULB ;點(diǎn)亮白燈
MOVLA 0XF1
AND FREG_1,A
MOVAM FREG_1
BS FREG_1,OUT1_FLAG
LGOTO HAND_SWITCH_PRO_END
SWITCH_2_PRO:
; MOVLA 0X00
; MOVAM RB
; MOVLA 0X06 ;點(diǎn)亮白/藍(lán)兩盞燈
; MOVAM RA
BS RA,WHITE_BULB ;點(diǎn)亮白/藍(lán)兩盞燈
BS RA,BLUE_BULB
MOVLA 0XF3
AND FREG_1,A
MOVAM FREG_1
MOVLA 0X03
IOR FREG_1,A
MOVAM FREG_1
LGOTO HAND_SWITCH_PRO_END
SWITCH_3_PRO:
; MOVLA 0X00
; MOVAM RB
; MOVLA 0X0E ;點(diǎn)亮白/藍(lán)/棕三盞燈
; MOVAM RA
BS RA,WHITE_BULB
BS RA,BLUE_BULB
BS RA,BROWN_BULB
BC FREG_1,OUT4_FLAG
MOVLA 0X07
IOR FREG_1,A
MOVAM FREG_1
LGOTO HAND_SWITCH_PRO_END
HAND_SWITCH_PRO_END:
BTSC FREG_1,OUT1_FLAG
BS RA,WHITE_BULB
BTSC FREG_1,OUT2_FLAG
BS RA,BLUE_BULB
BTSC FREG_1,OUT3_FLAG
BS RA,BROWN_BULB
BTSC FREG_1,OUT4_FLAG
BS RB,YELLOW_BULB
LCALL RESTART_TIME
MOVLA 81H
MOVAM IRQM
LGOTO MAIN
;=======================================================
;接收讀碼器發(fā)送的碼型
;=======================================================
RX:
CLR LBIT
REC_LOW_LEVEL: ;接收電平信號(hào),并記錄其寬度
BTSC RB,READ
LGOTO RX_TOTAL
DECSZ LBIT,M ;所接收到的為,2262,A0低電平寬度
LGOTO REC_LOW_LEVEL
RX_ERROR: ; STATUS.C=1,返回錯(cuò)誤信息。
BS STATUS,C
RETLA 0X00
;----------------------------------
RX_TOTAL:
MOVLA 0X08
MOVAM CNT
RX_LOOP:
CLR HBIT
RX_HIGH_LEVEL:
BTSS RB,READ
LGOTO RX_JUDGE
DECSZ HBIT,M ;記錄高電平的寬度
LGOTO RX_HIGH_LEVEL
LGOTO RX_ERROR
RX_JUDGE:
MOV LBIT,A
SUB HBIT,A ;HBIT>LBIT,則:A=1
RR MCODE,M
RR LCODE,M
CLR HBIT
RX_LOW_LEVEL: ;低電平持續(xù)時(shí)間檢測(cè)
BTSC RB,READ
LGOTO RX_JUDGE_1 ;高電平,跳轉(zhuǎn)RX_JUDGE_1
DECSZ HBIT,M
LGOTO RX_LOW_LEVEL
LGOTO RX_ERROR ;低電平時(shí)間過長(zhǎng),錯(cuò)誤返回。
RX_JUDGE_1:
MOV LBIT,A
SUB HBIT,A
RR MCODE,M
RR LCODE,M
DECSZ CNT,M
LGOTO RX_LOOP
RX_OK:
BC STATUS,C
RETLA 0X00
;=======================================================
;發(fā)送碼型給外在讀碼器
;=======================================================
TX:
BS RB,READ
MOVLA 0X84
IODIR RB
MOVLA 0X07
MOVAM CNT
BC RB,READ
LCALL DELAY9
DECSZ CNT,M
LGOTO $-2
BS RB,READ
MOVLA 0X10
MOVAM CNT
BIT_OUT:
MOVLA 0X03
BTSC LCODE,0
MOVLA 0X09
MOVAM CNT2
RR MCODE,M
RR LCODE,M
LCALL DELAY9
DECSZ CNT2,M
LGOTO $-2
CLRWDT
MOVLA 0X40
XOR RB,M
DECSZ CNT,M
LGOTO BIT_OUT
LCALL DELAY1
RETLA 0X00
;=======================================================
;程序開始
;=======================================================
BOOT:
MOVLA 0X80
MOVAM FREG_1 ;上電時(shí),將上電標(biāo)志置"1"
CLR CNT_32MS
CLR CNT_4S
CLR CNT_1M
CLR LREG
CLR RA
MOVLA 0X00 ;RA0上電檢測(cè)/RA1白燈/RA2藍(lán)燈/RA3棕?zé)?
IODIR RA
CLR RB
MOVLA 0XF4 ;RB6讀碼輸入/R7信號(hào)輸入/R2電源檢測(cè)
IODIR RB
; MOVLA 0X04 B2 掉電檢測(cè)下拉
; MOVAM PB_PDM
; MOVLA 0X70 ;RB6 讀碼上拉
; MOVAM PB_PUP
MOVLA 0X74 ;RB6 讀碼上拉
MOVAM PB_PUP
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
BTSS RB,READ
LGOTO SEND_CODE_PRO
BOOT_CONTR:
CLR RB
MOVLA 0XF4 ;RB6讀碼輸入/R7信號(hào)輸入/R2電源檢測(cè)
IODIR RB
CLR FREG_2
MOVLA 0X02 ;三路
BTSS RB,K2 ;三路遙控或四路遙控選擇
MOVLA 0X00 ;四路
MOVAM FREG_2
MOVLA 0X01 ;L1閃爍
BTSS RB,K1 ;延時(shí),L1燈是否閃爍
MOVLA 0X00 ;L1不閃爍
IOR FREG_2,A
MOVAM FREG_2
MOVLA .250
MOVAM TMR0
MOVLA 0XC6 ;1:128分頻
SELECT
MOVLA 81H
MOVAM IRQM
BS RA,WHITE_BULB
INC LREG,M ;手動(dòng)開關(guān)的4個(gè)狀態(tài)
BS FREG_1,OUT1_FLAG
;=======================================================
MAIN:
LGOTO TST_KEYDELAY
TST_KEYDELAY_END:
LCALL RECEIVE_2262
BTSS STATUS,C
LGOTO M_COMPARE
BTSS RB,POWER_CUT ;如上電狀態(tài)斷電狀態(tài)則,
LGOTO POWER_CUT_PRO ;進(jìn)入斷電狀態(tài)子程序
LGOTO MAIN
;=======================================================
;HS2262, 接收,用兩個(gè)位標(biāo)識(shí)2262中的一個(gè)位,因有"F"碼存在
;=======================================================
RECEIVE_2262:
BTSS RB,SIGNAL_IN
LGOTO RECEIVE_2262_ERROR_END
CLR CODE_TOTAL
CLR HBIT
RECEIVE_2262_HIGH:
INC HBIT,M
MOVLA MAXDATA
SUB HBIT,A
BTSC STATUS,C
LGOTO RECEIVE_2262_ERROR_END
BTSC RB,SIGNAL_IN
LGOTO RECEIVE_2262_HIGH
CLR LBIT
RECEIVE_2262_JUDGE:
INC CODE_TOTAL,M
MOVLA .25
SUB CODE_TOTAL,A
BTSC STATUS,Z
LGOTO RECEIVE_2262_END
RECEIVE_2262_LOW:
INC LBIT,M
MOVLA MAXDATA
SUB LBIT,A
BTSC STATUS,C
LGOTO RECEIVE_2262_ERROR_END
BTSS RB,SIGNAL_IN
LGOTO RECEIVE_2262_LOW
MOV LBIT,A
SUB HBIT,A
RR HCODE,M
RR MCODE,M
RR LCODE,M
CLR HBIT
LGOTO RECEIVE_2262_HIGH
RECEIVE_2262_ERROR_END:
BS STATUS,C ;通過STATUS.C位置,來判斷是否有遙控,或解碼是否真確
RETLA 0X00 ;"1",表示不正確
RECEIVE_2262_END:
BC STATUS,C ;STATUS.C=0,解碼成功
RETLA 0X00
;=======================================================
;接收到的2262碼型進(jìn)行比較
;=======================================================
M_COMPARE:
MOV HCODE,A
MOVAM KEYREG
LCALL LOW_ADDRESS
XOR LCODE,A
BTSS STATUS,Z
LGOTO MAIN
LCALL HIGH_ADDRESS
XOR MCODE,A
BTSS STATUS,Z
LGOTO MAIN
REMOTE_KEY_JUDGE:
CLR MODEREG
; CLR R_BUZ
BTSC FREG_1,REMOTE_FLAG
LGOTO MAIN
BS FREG_1,REMOTE_FLAG
; BS FREG_1,DELAY200MS_FLAG
MOVLA 0XC0 ;按鍵"A",鍵值"1",兩位標(biāo)識(shí)即="0XC0"
XOR KEYREG,A
BTSC STATUS,Z
LGOTO KEY1_PRO
MOVLA 0X03 ;按鍵"B",鍵值"8",兩位標(biāo)識(shí)即="0X03"
XOR KEYREG,A
BTSC STATUS,Z
LGOTO KEY2_PRO
MOVLA 0X0C ;按鍵"C",鍵值"4",兩位標(biāo)識(shí)即="0X0C"
XOR KEYREG,A
BTSC STATUS,Z
LGOTO KEY3_PRO
MOVLA 0XCC ;按鍵"D",鍵值"5",兩位標(biāo)識(shí)即="0XCC"
XOR KEYREG,A
BTSC STATUS,Z
LGOTO KEY4_PRO
MOVLA 0X30 ;按鍵"ON/OFF",鍵值"2",兩位標(biāo)識(shí)即="0X30"
XOR KEYREG,A
BTSC STATUS,Z
LGOTO KEY5_ON0FF_PRO
MOVLA 0X0F ;按鍵"延時(shí)"或者"按鍵(B+C)",鍵值"5",兩位標(biāo)識(shí)即="0X0F"
XOR KEYREG,A
BTSC STATUS,Z
LGOTO KEY6_DELAY_PRO
LGOTO MAIN
;=======================================================
;遙控按鍵, 遙控功能處理
;=======================================================
KEY1_PRO:
; LCALL BUZZ_200MS
; BS FREG_1,DELAY200MS_FLAG
BC FREG_1,DELAY_FLAG ;清除按鍵延時(shí)標(biāo)志
BC FREG_2,R_AGAINST
BTSS FREG_1,OUT1_FLAG
LGOTO WHITE_BULB_ON
BC RA,WHITE_BULB
BC FREG_1,OUT1_FLAG
LGOTO MAIN
WHITE_BULB_ON:
BS RA,WHITE_BULB
BS FREG_1,OUT1_FLAG
LGOTO MAIN
;----------------------------------
KEY2_PRO:
; LCALL BUZZ_200MS
; BS FREG_1,DELAY200MS_FLAG
BC FREG_1,DELAY_FLAG ;清除按鍵延時(shí)標(biāo)志
BC FREG_2,R_AGAINST
BTSS FREG_1,OUT2_FLAG
LGOTO BLUE_BULB_ON
BC RA,BLUE_BULB
BC FREG_1,OUT2_FLAG
LGOTO MAIN
BLUE_BULB_ON:
BS RA,BLUE_BULB
BS FREG_1,OUT2_FLAG
LGOTO MAIN
;----------------------------------
KEY3_PRO:
; LCALL BUZZ_200MS
; BS FREG_1,DELAY200MS_FLAG
BC FREG_1,DELAY_FLAG ;清除按鍵延時(shí)標(biāo)志
BC FREG_2,R_AGAINST
BTSS FREG_1,OUT3_FLAG
LGOTO BROWN_BULB_ON
BC RA,BROWN_BULB
BC FREG_1,OUT3_FLAG
LGOTO MAIN
BROWN_BULB_ON:
BS RA,BROWN_BULB
BS FREG_1,OUT3_FLAG
LGOTO MAIN
;----------------------------------
KEY4_PRO:
; LCALL BUZZ_200MS
BC FREG_1,DELAY_FLAG ;清除按鍵延時(shí)標(biāo)志
BTSC FREG_2,R_K2 ;"三路"或"四路"電路判斷
LGOTO AGAINST_THEFT_PR0 ;進(jìn)入"三路電路"防盜鍵程序
BC FREG_2,R_AGAINST
BTSS FREG_1,OUT4_FLAG
LGOTO YELLOW_BULB_ON
BC RB,YELLOW_BULB
BC FREG_1,OUT4_FLAG
; BS FREG_1,DELAY200MS_FLAG
LGOTO MAIN
YELLOW_BULB_ON:
BS RB,YELLOW_BULB
BS FREG_1,OUT4_FLAG
; BS FREG_1,DELAY200MS_FLAG
LGOTO MAIN
AGAINST_THEFT_PR0:
BTSC FREG_2,R_AGAINST
LGOTO AGAINST_THEFT_OFF
LCALL WHITE_BULB_FLISH
LCALL WHITE_BULB_FLISH
LCALL WHITE_BULB_FLISH
MOVLA 0X02 ;按鍵取反讓其閃爍停止
XOR RA,M
MOVLA 0X07 ;FREG_1,OUT1_FLAG/2/3/4
AND FREG_1,A ;判斷是否有負(fù)載輸出
BTSS STATUS,Z
BS FREG_1,DELAY_FLAG ;表有負(fù)載輸出,延時(shí)1分鐘后關(guān)閉
BS FREG_2,R_AGAINST
LGOTO AGAINST_THEFT_PR0_END
AGAINST_THEFT_OFF:
LCALL WHITE_BULB_FLISH
MOVLA 0X02 ;按鍵取反讓其閃爍停止
XOR RA,M
BC FREG_2,R_AGAINST
LGOTO AGAINST_THEFT_PR0_END
AGAINST_THEFT_PR0_END:
; LCALL RESTART_TIME
CLR MODEREG
; CLR R_BUZ
; BS FREG_1,DELAY200MS_FLAG
LGOTO MAIN
;----------------------------------
KEY5_ON0FF_PRO:
; LCALL BUZZ_200MS
; BS FREG_1,DELAY200MS_FLAG
BC FREG_1,DELAY_FLAG ;清除按鍵延時(shí)標(biāo)志
BC FREG_2,R_AGAINST
MOVLA 0X0F ;FREG_1,OUT1_FLAG/2/3/4
AND FREG_1,A
BTSS STATUS,Z
LGOTO WHOLE_BULB_OFF ;只要有一盞燈亮,則跳,全熄滅
MOVLA 0X0E ;點(diǎn)亮白/藍(lán)/棕三盞燈,關(guān)閉負(fù)載
MOVAM RA
MOVLA 0X00
BTSS FREG_2,R_K2
MOVLA 0X01 ;點(diǎn)亮黃燈
MOVAM RB
MOVLA 0X0F
IOR FREG_1,M ;打開四盞燈的點(diǎn)亮標(biāo)志
LGOTO MAIN
WHOLE_BULB_OFF:
MOVLA 0X01
MOVAM RA ;熄滅白/藍(lán)/棕三盞燈
CLR RB ;熄滅黃燈
MOVLA 0XF0
AND FREG_1,M ;清除四盞燈的點(diǎn)亮標(biāo)志
LGOTO MAIN
;----------------------------------
KEY6_DELAY_PRO:
; LCALL BUZZ_200MS
BC FREG_2,R_AGAINST
; BS FREG_1,DELAY200MS_FLAG
BS FREG_1,DELAY_FLAG ;按鍵延時(shí)標(biāo)志
BTSS FREG_2,R_K1 ;檢測(cè)延時(shí)L1燈,是否閃爍
LGOTO STATE_BEGIN ;FREG_2.R_K1=0不閃爍
LCALL WHITE_BULB_FLISH
MOVLA 0X02 ;按鍵取反讓其閃爍停止
XOR RA,M
CLR MODEREG
LGOTO MAIN
;=======================================================
;讀碼子程序
;=======================================================
SEND_CODE_PRO:
MOVLA 0XC4 ;0010,0011,READ腳設(shè)置輸入
IODIR RB
LGOTO $+1
BTSC RB,READ ;檢測(cè)低電平,高電平跳出
LGOTO $-1
BTSS RB,READ ;檢測(cè)高電平,低電平跳出
LGOTO $-1
MOVLA 0X84 ;0010,0001,READ腳設(shè)置輸輸出
IODIR RB
BC RB,READ ;輸出電平信號(hào),給讀碼器件
MOVLA 0X21 ;低電平延時(shí)33(21H)*3指令周期
MOVAM CNT
DECSZ CNT,M
LGOTO $-1
MOVLA 0XC4 ;1000,1100,READ腳設(shè)置輸入
IODIR RB
MOVLA 0X14 ;20(14H)*5個(gè)指令周期是否接收
MOVAM CNT ;到讀碼器發(fā)送出的高電平
BTSS RB,READ
LGOTO READ_CODE_SEND
DECSZ CNT,M
LGOTO $-3
LGOTO SEND_CODE_PRO ;20*5指令周期未能收到高電平,返回重讀
READ_CODE_SEND:
BTSS RB,READ ;檢測(cè)低電平,高電平逃過
LGOTO $-1 ;其高電平為2262,A0
BTSC RB,READ ;檢測(cè)高電平,低電平跳過
LGOTO $-1 ;其低電平為2262,A0
LCALL RX
BTSC STATUS,C
LGOTO SEND_CODE_PRO
BTSS RB,READ ;檢測(cè)高電平,低電平跳出
LGOTO $-1
MOVLA 0X00
MOVAM RB
MOVLA 0X84
IODIR RB
MOVLA 0XA3
XOR LCODE,C
BTSS STATUS,Z
LGOTO SEND_CODE_PRO
LCALL DELAY1
LCALL LOW_ADDRESS
MOVAM LCODE
LCALL HIGH_ADDRESS
MOVAM MCODE
LCALL TX
LGOTO BOOT_CONTR
;=======================================================
END
;======================================================= |