?? 學習型電話網絡遠程控制器源程序.asm.txt
字號:
SENT1:
SETB SDA
NOP
SENT:
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
DJNZ BITCNT,SENTB
NOP
NOP
SETB SDA
NOP
NOP
SETB SCL
NOP
NOP
CLR F0
JNB SDA,ACKEND
SETB F0
ACKEND:
NOP
CLR SCL
RET
;3.4---------------------------------------------------
;接收1個字節數據
RCVBYTE:
SETB SDA ;設置總線為讀
MOV BITCNT,#08H
RCV:
NOP
CLR SCL ;清總線,準備讀數據
NOP
NOP
NOP
NOP
NOP
SETB SCL
NOP
NOP
CLR C
JNB SDA,RCV0
SETB C
RCV0:
RLC A
NOP
NOP
DJNZ BITCNT,RCV
CLR SCL
NOP
NOP
NOP
CLR SDA
JNB ACK,SENTACKB
SETB SDA
SENTACKB:
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
CLR ACK
RET
;**************************************************************************
;延時20MS子程序
DEL_20MS: SETB RS0
MOV R0,#100
DEL_20MS1: MOV R1,#100
DJNZ R1,$
DJNZ R0,DEL_20MS1
CLR RS0
RET
;-------------------------------------------------------------------------
;蜂鳴器發生子程序,0.5s
BZ_800: SETB RS0
MOV R0,#80
BZ_800_1: SETB BZ_AUD
SETB BZ_AUD1
MOV R1,#200
DJNZ R1,$
MOV R1,#200
DJNZ R1,$
CLR BZ_AUD
CLR BZ_AUD
MOV R1,#200
DJNZ R1,$
MOV R1,#200
DJNZ R1,$
DJNZ R0,BZ_800_1
SETB BZ_AUD
SETB BZ_AUD1
CLR RS0
RET
;-------------------------------------------------------------------------
;蜂鳴器發生子程序,0.5s
BZ_MU: SETB RS0
MOV R4,#4
MOV R5,#250
MOV R6,#250
BZ_MU0: MOV R0,#200
BZ_MU1: SETB BZ_AUD
SETB BZ_AUD1
MOV R1,#200
DJNZ R1,$
MOV A,R5
MOV R2,A
DJNZ R2,$
CLR BZ_AUD
CLR BZ_AUD1
MOV R3,#200
DJNZ R3,$
MOV A,R6
MOV R2,A
DJNZ R2,$
DJNZ R0,BZ_MU1
MOV A,R5
CLR C
SUBB A,#40
MOV R5,A
MOV A,R6
CLR C
SUBB A,#40
MOV R6,A
DJNZ R4,BZ_MU0
CLR BZ_AUD
CLR BZ_AUD1
CLR RS0
RET
;**************************************************************************
;電話控制子程序
PH_CON: CLR EX0
CLR LED1
LCALL PH_IN
MOV A,RING_CON
JNZ PH_CON1
LCALL DTMF
PH_CON1: SETB LED1
SETB EX0
RET
;**************************************************************************
;模擬摘機子程序
PH_IN: JB PH_RING,PH_INBC ;無低電平信號退出
JNB JP1,PH_IN0
MOV RING_CON,#3
JMP PH_IN01
PH_IN0: MOV RING_CON,#5
PH_IN01: SETB GV_XSFLAG
MOV GV_XS,#10
PH_IN1: JNB PH_RING,PH_IN2
MOV C,GV_XSFLAG ;5S無信號退出
JNC PH_INBC
JMP PH_IN1 ;等待低電平
PH_IN2: LCALL DEL_20MS
JB PH_RING,PH_IN21 ;冗余
DEC RING_CON
MOV GV_XS,#10 ;RESET TIMER
PH_IN21: MOV A,RING_CON ;達到設定值退出
JZ PH_IN3
JNB PH_RING,$ ;等待高電平
JMP PH_IN1
PH_IN3: SETB PIK_HANG
MOV R3,#50 ;延時1S
PH_IN4: LCALL DEL_20MS
DJNZ R3,PH_IN4
LCALL BZ_MU ;摘機5聲短低音
CLR GV_XSFLAG
PH_INBC: CLR GV_XSFLAG
RET
;**************************************************************************
;雙音多頻控制
DTMF: MOV OPER_CON,#00H
DTMF1: LCALL DTMF_DE
DTMF2: MOV A,R1
JNZ DTMF_BC ;超過10S不夠位退出返回,需重撥
MOV A,DTMF_CON
CJNE A,#3,DTMF5
JB PW_FLAG,DTMF3
LCALL CONTROL ;3位數并且無密碼進行開關機
INC OPER_CON
MOV A,OPER_CON
CJNE A,#4,DTMF1 ;超過4次操作退出
JMP DTMF_BC
DTMF3: LCALL CH_PW ;3位數并且有密碼進行密碼檢測
JB PW_OK,DTMF31
INC OPER_CON
MOV A,OPER_CON
CJNE A,#3,DTMF1 ;超過3次操作退出
JMP DTMF_BC
DTMF31: LCALL DTMF_DE
MOV A,R1
JNZ DTMF_BC ;超過10S不夠位退出返回,需重撥
MOV A,D_DATA1
CJNE A,#0CH,DTMF4 ;為*號進行密碼設定!!!!!!!!!!!!1
MOV A,DTMF_CON
CJNE A,#05,DTMF_BC
LCALL SET_PW
JMP DTMF_BC
DTMF4: LCALL CONTROL ;第1位不為*號進行開關機
INC OPER_CON
MOV A,OPER_CON
CJNE A,#4,DTMF31 ;超過10次操作退出
JMP DTMF_BC
DTMF5: MOV A,DTMF_CON
CJNE A,#05,DTMF_BC
JB PW_FLAG,DTMF_BC ;密碼存在,錯誤退出
LCALL SET_PW ;5位數進行密碼設定
JMP DTMF_BC
DTMF_BC: CLR PIK_HANG
RET
;-------------------------------------------------------------------------
;雙音多頻解碼
DTMF_DE: MOV GV_XS,#10 ;10S內無按鍵操作退出
SETB GV_XSFLAG
MOV DTMF_CON,#00H
MOV R0,#15H
DTMF_DE01: JB DTMF_REQ,DTMF_DE02 ;高電平讀數據
JB GV_XSFLAG,DTMF_DE01
JMP DTMF_DE4 ;超過10S退出
DTMF_DE02: LCALL DEL_20MS
MOV A,P2
ANL A,#0FH
MOV @R0,A
INC R0
MOV P0,A
INC DTMF_CON
MOV R2,#100
DTMF_DE03: LCALL DEL_20MS
DJNZ R2,DTMF_DE03
JB DTMF_REQ,$ ;等待低電平重新讀取數據
MOV A,15H
CJNE A,#0CH,DTMF_DE00
MOV R1,#4
JMP DTMF_DE0
DTMF_DE00: MOV R1,#2 ;第1位不為*號則計數3位
DTMF_DE0: JB DTMF_REQ,DTMF_DE1 ;高電平讀數據
JB GV_XSFLAG,DTMF_DE0
JMP DTMF_DE4 ;超過10S退出
DTMF_DE1: LCALL DEL_20MS
MOV A,P2
ANL A,#0FH ;屏蔽高4位
MOV @R0,A
MOV P0,A
INC R0
INC DTMF_CON
DEC R1
MOV R2,#100
DTMF_DE11: LCALL DEL_20MS
DJNZ R2,DTMF_DE11
MOV A,R1 ;超過位退出
JZ DTMF_DE3
DTMF_DE2: JB DTMF_REQ,$ ;等待低電平重新讀取數據
JMP DTMF_DE0
DTMF_DE3: CLR GV_XSFLAG
CLR LED1
LCALL DEL_20MS
SETB LED1
LCALL DEL_20MS
DTMF_DE4: RET
;-------------------------------------------------------------------------
;控制開關機
CONTROL: MOV A,D_DATA1
CJNE A,#1,CON_OFF ;第1位不為1,轉關機控制
MOV A,D_DATA2
CJNE A,#1,CON_BC ;第1位為1,第2位不為1,退出
MOV A,D_DATA3
CJNE A,#1,CON_BC
LCALL KEY_1
JMP CON_BC
CON_OFF: MOV A,D_DATA1
CJNE A,#0AH,CON_BC ;不為0退出
MOV A,D_DATA2
CJNE A,#0AH,CON_BC
MOV A,D_DATA3
CJNE A,#0AH,CON_BC
CLR LED1
LCALL KEY_2
LCALL BZ_800
LCALL BZ_800
LCALL BZ_800
LCALL BZ_800
CON_BC: LCALL BZ_800
RET
;-------------------------------------------------------------------------
;密碼檢測
CH_PW: CLR PW_OK
MOV A,D_DATA1
CJNE A,PW1,CH_PW2
MOV A,D_DATA2
CJNE A,PW2,CH_PW2
MOV A,D_DATA3
CJNE A,PW3,CH_PW2
SETB PW_OK
LCALL BZ_MU ;密碼正確5聲短低音
JMP CH_PWBC
CH_PW2: MOV R3,#2 ;密碼不正確2聲短低音
CH_PW3: LCALL BZ_800
MOV R4,#40
LCALL DEL_20MS
DJNZ R3,CH_PW3
CH_PWBC: RET
;-------------------------------------------------------------------------
;密碼設定
SET_PW: MOV A,D_DATA1
CJNE A,#0CH,SET_PWBC ;第1位不為#號則退出
MOV A,D_DATA5
CJNE A,#0CH,SET_PWBC ;第5位不為#號則退出
MOV PW1,D_DATA2
MOV PW2,D_DATA3
MOV PW3,D_DATA4
MOV A,PW1
CJNE A,#0AH,SET_PW0
MOV A,PW2
CJNE A,#0AH,SET_PW0
MOV A,PW3
CJNE A,#0AH,SET_PW0
CLR PW_FLAG ;取消密碼
LCALL BZ_MU
JMP SET_PWBC
SET_PW0: SETB PW_FLAG
SET_PW1: LCALL BZ_MU ;密碼設定或取消密碼正確5聲短低音
SET_PWBC: RET
;**************************************************************************
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -