?? 學(xué)習(xí)型電話網(wǎng)絡(luò)遠程控制器源程序.asm.txt
字號:
;定時器T1中斷服務(wù)子程序
INT_T1: SETB TOF1
RETI
;**************************************************************************
;按鍵處理子程序
KEY_IN: CLR EX0
MOV C,KEY_ON
JNC KEY_ON1 ;有按鍵按下為低電平
MOV C,KEY_OFF
JNC KEY_OFF1
MOV C,KEY_SEC
JNC KEY_SEC1
JMP KEY_BACK ;無鍵按下返回
KEY_ON1: MOV R1,#5
KEY_ON10: LCALL DEL_20MS
DJNZ R1,KEY_ON10
MOV C,KEY_ON
JC KEY_BACK ;延時100MS去抖動
SETB GV_XSFLAG
MOV GV_XS,#3
KEY_ON2: MOV C,KEY_ON
JC KEY_1 ;<3S為K1
LCALL DEL_20MS
MOV C,GV_XSFLAG
JNC KEY_3 ;>3S為K3
AJMP KEY_ON2
KEY_OFF1: MOV R1,#5
KEY_OFF10: LCALL DEL_20MS
DJNZ R1,KEY_OFF10
MOV C,KEY_OFF
JC KEY_BACK
SETB GV_XSFLAG
MOV GV_XS,#3
KEY_OFF2: MOV C,KEY_OFF
JC KEY_2 ;<3S為K2
LCALL DEL_20MS
MOV C,GV_XSFLAG
JNC KEY_4 ;>3S為K4
AJMP KEY_OFF2
KEY_SEC1: MOV R1,#150
KEY_SEC10: LCALL DEL_20MS
DJNZ R1,KEY_SEC10
MOV C,KEY_SEC
JC KEY_BACK
JNC KEY_5
KEY_BACK: CLR GV_XSFLAG
SETB EX0
RET
;*************************************************************************
;按鍵執(zhí)行子程序
KEY_1: CLR GV_XSFLAG
LCALL KEY_10
RET
KEY_2: CLR GV_XSFLAG
LCALL KEY_20
RET
KEY_3: LCALL KEY_30
RET
KEY_4: LCALL KEY_40
RET
KEY_5: LCALL KEY_50
RET
;-------------------------------------------------------------------------
;發(fā)射開關(guān)信號
KEY_10: CLR LED1
LCALL BZ_800 ;BZ0.5秒
MOV R1,RDATA_PO
CJNE R1,#3,KEY_11
MOV RCVDAT,#30H
MOV SUBADR,#20H ;RCV BUFFER ADR 20H
LCALL RCV_2402 ;從2402接收數(shù)據(jù)
LCALL DEL_20MS
MOV RCVDAT,#40H
MOV SUBADR,#30H ;RCV BUFFER ADR 20H
CALL RCV_2402 ;從2402接收數(shù)據(jù)
LCALL DEL_20MS
MOV A,RDATA_LCON ;數(shù)據(jù)脈沖高電平計數(shù)為0退出
JZ KEY_13
JMP KEY_12
KEY_11: SETB ON_OFF ;取當前開機數(shù)據(jù)
LCALL DM2
KEY_12: LCALL EMIT
KEY_13: SETB LED1
RET
KEY_20: CLR LED1
LCALL BZ_800 ;BZ0.5秒
MOV R1,RDATA_PO
CJNE R1,#3,KEY_21
MOV RCVDAT,#30H
MOV SUBADR,#40H ;RCV BUFFER ADR 20H
LCALL RCV_2402 ;從2402接收數(shù)據(jù)
LCALL DEL_20MS
MOV RCVDAT,#40H
MOV SUBADR,#50H ;RCV BUFFER ADR 20H
CALL RCV_2402 ;從2402接收數(shù)據(jù)
LCALL DEL_20MS
MOV A,RDATA_LCON ;數(shù)據(jù)脈沖高電平計數(shù)為0退出
JZ KEY_23
JMP KEY_22
KEY_21: CLR ON_OFF ;取當前關(guān)機數(shù)據(jù)
LCALL DM2
KEY_22: LCALL EMIT
KEY_23: SETB LED1
RET
;-------------------------------------------------------------------------
;學(xué)習(xí)開關(guān)信號
KEY_30: SETB PIK_HANG
CLR P3.4
CLR LED1
LCALL BZ_800 ;長鳴2S
LCALL BZ_800
LCALL BZ_800
LCALL BZ_800
CLR STUDY_OK
SETB GV_XSFLAG
MOV GV_XS,#5
KEY_31: JNB RED_REC,KEY_32 ;有信號學(xué)習(xí)
MOV C,GV_XSFLAG
JC KEY_31
LCALL BZ_800 ;5S內(nèi)無信號退出
LCALL BZ_800 ;BZ一秒
JMP KEY_3BACK
KEY_32: LCALL STUDY
JNB STUDY_OK,KEY_3BACK
MOV SUBADR,#20H ;2402 BYTE ADR 20H
MOV XMTDAT,#30H
LCALL STR_2402 ;發(fā)送數(shù)據(jù)到2402
LCALL DEL_20MS
MOV SUBADR,#28H
MOV XMTDAT,#38H
LCALL STR_2402 ;發(fā)送數(shù)據(jù)到2402
LCALL DEL_20MS
MOV SUBADR,#30H
MOV XMTDAT,#40H
LCALL STR_2402 ;發(fā)送數(shù)據(jù)到2402
LCALL DEL_20MS
MOV SUBADR,#38H
MOV XMTDAT,#48H
LCALL STR_2402 ;發(fā)送數(shù)據(jù)到2402
LCALL DEL_20MS
KEY_3BACK: CLR PIK_HANG
SETB P3.4
SETB LED1
RET
KEY_40: SETB PIK_HANG
CLR P3.4
CLR LED1
LCALL BZ_800 ;長鳴2S
LCALL BZ_800
LCALL BZ_800
LCALL BZ_800
CLR STUDY_OK
SETB GV_XSFLAG
MOV GV_XS,#5
KEY_41: JNB RED_REC,KEY_42 ;有信號學(xué)習(xí)
MOV C,GV_XSFLAG
JC KEY_41
LCALL BZ_800 ;5S內(nèi)無信號退出
LCALL BZ_800 ;BZ一秒
JMP KEY_4BACK
KEY_42: LCALL STUDY
JNB STUDY_OK,KEY_4BACK
MOV SUBADR,#40H ;2402 BYTE ADR 20H
MOV XMTDAT,#30H
LCALL STR_2402 ;發(fā)送數(shù)據(jù)到2402
LCALL DEL_20MS
MOV SUBADR,#48H
MOV XMTDAT,#38H
LCALL STR_2402 ;發(fā)送數(shù)據(jù)到2402
LCALL DEL_20MS
MOV SUBADR,#50H
MOV XMTDAT,#40H
LCALL STR_2402 ;發(fā)送數(shù)據(jù)到2402
LCALL DEL_20MS
MOV SUBADR,#58H
MOV XMTDAT,#48H
LCALL STR_2402 ;發(fā)送數(shù)據(jù)到2402
LCALL DEL_20MS
KEY_4BACK: CLR PIK_HANG
SETB P3.4
SETB LED1
RET
;-------------------------------------------------------------------------
;自動搜索
KEY_50: MOV R1,#5
KEY_51: LCALL BZ_800 ;一長聲
DJNZ R1,KEY_51
LCALL AUTO_SEARCH
RET
;----------------------------------------------------------------------
;學(xué)習(xí)子程序
STUDY: MOV RDATA_HWH1,#00H
MOV RDATA_HWL1,#00H
MOV RDATA_HWH2,#00H
MOV RDATA_HWL2,#00H
MOV RDATA_HWH3,#00H
MOV RDATA_HWL3,#00H
CLR ET0
CLR STUDY_OK ;清學(xué)習(xí)成功標志
MOV TMOD,#00010001B
MOV TH1,#00H
MOV TL1,#00H
SETB TR1
MOV R2,#30
STUDY1: MOV R1,#250
STUDY2: JB RED_REC,STUDY3 ;高電平轉(zhuǎn)下一步
DJNZ R1,STUDY2
DJNZ R2,STUDY1
JMP STUDY_BACK1 ;超過30MS錯誤退出
STUDY3: CLR TR1
LCALL BC2
MOV RLEAD_LWH,TH1 ;存引導(dǎo)脈沖低電平寬度
MOV RLEAD_LWL,TL1
MOV TH1,#00H
MOV TL1,#00H
SETB TR1
MOV R2,#30
STUDY4: MOV R1,#250
STUDY5: JNB RED_REC,STUDY6 ;低電平轉(zhuǎn)下一步
DJNZ R1,STUDY5
DJNZ R2,STUDY4
JMP STUDY_BACK1 ;超過30MS錯誤退出
STUDY6: CLR TR1
LCALL BC1
MOV RLEAD_HWH,TH1 ;存引導(dǎo)脈沖高電平寬度
MOV RLEAD_HWL,TL1
MOV RDATA_LCON,#00H ;數(shù)據(jù)位計數(shù)
MOV R0,#40H ;8個數(shù)據(jù)位,從2F--36H
STUDY7: MOV R5,#08H ;輸入數(shù)據(jù)
STUDY8: MOV TH1,#00H
MOV TL1,#00H
SETB TR1
MOV R2,#10
STUDY9: MOV R1,#250
STUDY10: JB RED_REC,STUDY11 ;高電平轉(zhuǎn)下一步
DJNZ R1,STUDY10
DJNZ R3,STUDY9
JMP STUDY_BACK1 ;超過10MS錯誤退出
STUDY11: CLR TR1
LCALL BC2
MOV RDATA_LWH,TH1 ;存數(shù)據(jù)脈沖第低電平寬度
MOV RDATA_LWL,TL1
MOV TH1,#00H
MOV TL1,#00H
SETB TR1
MOV R2,#10
STUDY12: MOV R1,#250
STUDY13: JNB RED_REC,STUDY14 ;低電平轉(zhuǎn)下一步
DJNZ R1,STUDY13
DJNZ R2,STUDY12
JMP STUDY_BACK2 ;超10ms過正確退出
STUDY14: CLR TR1
LCALL BC1
MOV A,RDATA_HWL1
JZ STUDY15 ;第1位低位寬度為0,不比較直接存儲寬度
MOV A,TH1
CJNE A,RDATA_HWH1,STUDY16 ;與第一次存儲高位寬度比較,不等則另行存儲
;只比較高字節(jié)
STUDY15: MOV RDATA_HWH1,TH1
MOV RDATA_HWL1,TL1 ;記做1
SETB C
JMP STUDY19
STUDY16: MOV A,RDATA_HWL2 ;第2位低位寬度為0,不比較直接存儲寬度
JZ STUDY17
MOV A,TH1
CJNE A,RDATA_HWH2,STUDY18 ;與第一次存儲高位寬度比較,不等則另行存儲
STUDY17: MOV RDATA_HWH2,TH1
MOV RDATA_HWL2,TL1 ;記做0
CLR C
JMP STUDY19
STUDY18: MOV RDATA_HWH3,TH1
MOV RDATA_HWL3,TL1
CLR C
STUDY19: MOV A,@R0
RLC A ;低位在前
MOV @R0,A
INC RDATA_LCON
DJNZ R5,STUDY8
INC R0
JMP STUDY7
STUDY_BACK1: MOV R3,#3
STUDY_B11: ACALL BZ_800 ;學(xué)習(xí)失敗,3聲短促音
MOV R4,#30
STUDY_B12: LCALL DEL_20MS
DJNZ R4,STUDY_B12
DJNZ R3,STUDY_B11
CLR GV_XSFLAG
SETB ET0
JMP STUDY_B23
STUDY_BACK2: MOV A,R5 ;R5不為0對齊數(shù)據(jù)
JZ STUDY_B22
STUDY_B21: MOV A,R4
MOV R0,A
MOV A,@R0
RLC A
MOV @R0,A
DJNZ R5,STUDY_B21
STUDY_B22: LCALL BZ_MU ;學(xué)習(xí)成功,5聲短低音
CLR GV_XSFLAG
SETB STUDY_OK ;置學(xué)習(xí)成功標志
SETB ET0
STUDY_B23: RET
;----------------------------------------------------------------------
;補償+145US
BC1: MOV A,TL1
CLR C
ADDC A,#140
MOV TL1,A
CLR A
RLC A
ADD A,TH1
MOV TH1,A
RET
;----------------------------------------------------------------------
;補償-75US
BC2: SETB RS0
MOV A,TL1
CLR C
SUBB A,#70
MOV TL1,A
CLR A
RLC A
MOV R0,A
MOV A,TH1
SUBB A,R0
MOV TH1,A
CLR RS0
RET
;----------------------------------------------------------------------
;補償-10US
BC3: SETB RS0
MOV A,TL1
CLR C
SUBB A,#120
MOV TL1,A
CLR A
RLC A
MOV R0,A
MOV A,TH1
SUBB A,R0
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -