⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 accesscontrol-51.asm

📁 支持电话拨号
💻 ASM
📖 第 1 页 / 共 3 页
字号:
PCTOMCU7:cjne   a,#"Y",PCTOMCU8        ;第2个字符是否为Y:信息处理器的应答
         setb   clqyd                  ;处理器应答位=1
         clr    tr0
         SETB   CKJSBZ
         ajmp   NEXTB
PCTOMCU8:cjne   a,#"T",PCTOMCU9        ;第2个字符是否为T     ////
         MOV    A,GNJZC
         CJNE   A,#0CH,NEXTB
         mov     yx,#52h              ;电话的pnone到电台的mic:发信号
         lcall   DK                   ;打开开关
         mov     yx,#43h              ;电台的phone到电话的mic
         lcall   gd                   ;打开开关
         ;SETB   CKJSBZ
         SETB   ptt_d                  ;电台发
         ajmp   NEXTB
PCTOMCU9:cjne   a,#"S",PCTOMCU10        ;第2个字符是否为S    ////
         MOV    A,GNJZC
         CJNE   A,#0CH,NEXTB
         mov     yx,#52h              ;电话的pnone到电台的mic:发信号
         lcall   gd                   ;打开开关
         mov     yx,#43h              ;电台的phone到电话的mic
         lcall   dk                   ;打开开关
         ;SETB   CKJSBZ
         CLR    ptt_d                  ;电台收
         ajmp   NEXTB
PCTOMCU10:cjne   a,#"G",PCTOMCU2        ;第2个字符是否为G    ////
         MOV    A,GNJZC
         CJNE   A,#0CH,NEXTB
         ;SETB   CKJSBZ
         clr    lrc                    ;挂机
         mov    GNJZC,#0AH             ;功能键默认为无线
         ajmp   NEXTB
;******************************************************
ZDT0:    PUSH   PSW
         PUSH   A
         mov    a,t0ms                 ;T0模式:0_1K单音;1_串口收到第1个字节启动定时
         cjne   a,#00h,ZDT0b
         CPL    BELL                   ;输出单音
ZDT0a:   MOV    TH0,T0HZC              ;T0初始值恢复
         MOV    TL0,T0LZC
         POP    A
         POP    PSW                    ;中断返回
         RETI

ZDT0b:   cjne   a,#01h,ZDT0d
         CLR    CKQSBZ                 ;在100MS内串口未收到结束符将CKQSBZ和CKJSBZ清0
         CLR    CKJSBZ
ZDT0c:   clr    tr0
         ajmp   ZDT0a

ZDT0d:   cjne   a,#02h,ZDT0e
         djnz   r4,ZDT0a              ;在r4*100MS内未收到信息处理器的应答则发1遍就挂机
         clr    tr0
         setb   clqyd
         ajmp   ZDT0a

ZDT0e:   cjne   a,#03h,ZDT0a         ;振铃
         CPL    BELL
         jnb    zlbz,ZDT0f           ;振铃标志:533Hz=1、666Hz=0
         djnz   r5,ZDT0a
         clr    zlbz
         MOV    T0HZC,#0feH          ;0.705ms=666.25Hz
         MOV    T0LZC,#32H
         mov    r5,#65               ;62*0.705=46.4ms
         ajmp   ZDT0a

ZDT0f:   djnz   r5,ZDT0a
         setb   zlbz
         MOV    T0HZC,#0fdH          ;0.938ms=533Hz
         MOV    T0LZC,#0bfH
         mov    r5,#49               ;49*0.938ms=46.4ms
         ajmp   ZDT0a
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dk:      SETB   ST                   ;打开MT8816开关
         SETB   DI
         CLR    ST
         ret

gd:      SETB   ST                    ;关断MT8816开关
         clr    DI
         CLR    ST
         ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CRAB:	MOV	MT8880,#01011000B    ;写CRA
        SETB	CP
	CLR	CP
	MOV	MT8880,#01010001B    ;写CRB
        SETB	CP
	CLR	CP
        RET

FSY:    MOV    MT8880,#01010001B     ;发双音100ms
        SETB   CP
	CLR    CP
        LCALL  D100MS
        RET

TFSY:   MOV    MT8880,#01010000B      ;双音停发
        SETB   CP
        CLR    CP
        RET

FDY:    MOV     MT8880,#01011000B     ;写CRA发单音
        SETB	CP
	CLR	CP
	MOV	MT8880,#01010101B     ;写CRB发单音
        SETB	CP
	CLR	CP
        MOV     MT8880,#01011101B      ;写数
        SETB	CP
	CLR	CP
	MOV	MT8880,#01010001B      ;发单音
        SETB	CP
	CLR	CP
        RET

TFDY:   MOV	MT8880,#01010000B      ;停发单音
        SETB	CP
	CLR	CP
        RET

FTSY:   MOV     YX,#1CH               ;发提示音:BEII输出到放大器2的输入
        lcall   DK
        mov     t0ms,#00h             ;T0模式:0_1K单音;1_串口收到第1个字节启动定时
        MOV     T0HZC,#0FEH           ;T0初始值设置(0.5ms)
        MOV     T0LZC,#0CCH
        SETB    TR0
        RET

TFTSY:  MOV     YX,#1CH               ;停发提示音:BELL脚输出作为提示音
        lcall   GD
        CLR     TR0
        RET

SR:     MOV	MT8880,#01111111B         ;读SR
        SETB	CP
	CLR	CP
        RET

DR:     MOV	MT8880,#01011111B         ;读DR
        SETB	CP
	CLR	CP
        RET

DTMF:   CLR    SYCX
        LCALL  CRAB
        LCALL  SR
        JB     AR3,DTMF1
        SETB   SYCX
DTMF1:  RET

;************发送1个字节到HD7279,高位在前**********
SEND:        PUSH     ACC
             MOV      BIT_COUNT,#8
             LCALL    LONG_DELAY
SEND_LOOP:   MOV      C,DATA_OUT.7        ;输出1位
             MOV      DAT,C
             SETB     CLK
             MOV      A,DATA_OUT
             RL       A
             MOV      DATA_OUT,A
             LCALL    SHORT_DELAY
             CLR      CLK
             LCALL    SHORT_DELAY
             DJNZ     BIT_COUNT,SEND_LOOP  ;检测是否8位均发送完毕
             CLR      DAT
             POP      ACC
             RET
;************从HD7279接收1个字节,高位在前*****************
RECEIVE:     PUSH     ACC
             MOV      BIT_COUNT,#8      ;设定计数器=8
             SETB     DAT
             LCALL    LONG_DELAY
RECEIVE_LOOP:SETB     CLK
             LCALL    SHORT_DELAY
             MOV      A,DATA_IN         ;数据左移
             RL       A
             MOV      DATA_IN,A
             MOV      C,DAT             ;读取1位数据
             MOV      DATA_IN.0,C
             CLR      CLK
             LCALL    SHORT_DELAY
             DJNZ     BIT_COUNT,RECEIVE_LOOP  ;是否已接收8位数据
             CLR      DAT
             POP      ACC
             RET
;延时子程序
LONG_DELAY:  MOV      TIMER4,#16       ;设定延时为约50us
             DJNZ     TIMER4,$
             RET

SHORT_DELAY: MOV      TIMER4,#2      ;设定延时为约8us
             DJNZ     TIMER4,$
             RET
;-----------------------------------------------------------------------
;读1字节
;调用前需打开iap功能
;入口:dptr=字节地址
;返回;a=读出字节
byte_read:  mov   isp_contr,#enable_isp   ;打开iap功能,设置flash操作等待时间
            mov   isp_cmd,#01             ;select read AP Mode
            mov   isp_addrh,dph
            mov   isp_addrl,dpl
            clr   ea
            mov   isp_trig,#46h
            mov   isp_trig,#0b9h
            nop
            mov   a,isp_data             ;数据在isp_data
            setb  ea
            lcall iap_disable
            ret
;-------------------------------------------
;字节编程
;调用前需打开iap功能
;入口:dptr=字节地址#,a=需编程字节的数据
byte_program:mov   isp_contr,#enable_isp  ;打开iap功能,设置flash操作等待时间
             mov   isp_cmd,#02            ;select read AP Mode
             mov   isp_addrh,dph
             mov   isp_addrl,dpl
             mov   isp_data,a             ;数据进isp_data
             clr   ea
             mov   isp_trig,#46h
             mov   isp_trig,#0b9h
             nop
             setb  ea
             lcall iap_disable
             ret
;-------------------------------------------
;擦除扇区,入口:dptr=扇区地址
sector_erase:mov   isp_contr,#enable_isp  ;打开iap功能,设置flash操作等待时间
             mov   isp_cmd,#03            ;select read AP Mode
             mov   isp_addrh,dph
             mov   isp_addrl,dpl
             clr   ea
             mov   isp_trig,#46h
             mov   isp_trig,#0b9h
             nop
             setb  ea
             lcall iap_disable
             ret
;-------------------------------------------
iap_disable: mov    isp_contr,#0         ;关闭iap功能,清与isp有关的特殊功能寄存器
             mov    isp_cmd,#0
             mov    isp_trig,#0
             ret
;-------------------------------------------
delay:       clr    a
             mov    TIMER4,a
             mov    TIMER5,a
             mov    TIMER6,#1h
delay_loop:  djnz   TIMER4,delay_loop
             djnz   TIMER5,delay_loop
             djnz   TIMER6,delay_loop
             ret
;***********************************************************
DGB:       LCALL    GWX           ;段关闭:除电源灯外全灭
           LCALL    GYX
           LCALL    GZJ
           LCALL    GZQ
           LCALL    GGH
           RET

GDY:     MOV      DATA_OUT,#0C0H   ;段关闭指令
         LCALL    SEND
         MOV      DATA_OUT,#48     ;电源灯
         LCALL    SEND
         RET
GWX:     MOV      DATA_OUT,#0C0H   ;段关闭指令
         LCALL    SEND
         MOV      DATA_OUT,#49     ;无线灯
         LCALL    SEND
         RET
GYX:     MOV      DATA_OUT,#0C0H   ;段关闭指令
         LCALL    SEND
         MOV      DATA_OUT,#50     ;有线灯
         LCALL    SEND
         RET
GZJ:     MOV      DATA_OUT,#0C0H   ;段关闭指令
         LCALL    SEND
         MOV      DATA_OUT,#51     ;转接灯
         LCALL    SEND
         RET
GZQ:     MOV      DATA_OUT,#0C0H   ;段关闭指令
         LCALL    SEND
         MOV      DATA_OUT,#52     ;灾情灯
         LCALL    SEND
         RET
GGH:     MOV      DATA_OUT,#0C0H   ;段关闭指令
         LCALL    SEND
         MOV      DATA_OUT,#53     ;改号灯
         LCALL    SEND

KDY:     MOV      DATA_OUT,#0E0H   ;段点亮指令
         LCALL    SEND
         MOV      DATA_OUT,#48     ;电源灯
         LCALL    SEND
         RET
KWX:     MOV      DATA_OUT,#0E0H   ;段点亮指令
         LCALL    SEND
         MOV      DATA_OUT,#49     ;无线灯
         LCALL    SEND
         RET
KYX:     MOV      DATA_OUT,#0E0H   ;段点亮指令
         LCALL    SEND
         MOV      DATA_OUT,#50     ;有线灯
         LCALL    SEND
         RET
KZJ:     MOV      DATA_OUT,#0E0H   ;段点亮指令
         LCALL    SEND
         MOV      DATA_OUT,#51     ;转接灯
         LCALL    SEND
         RET
KZQ:     MOV      DATA_OUT,#0E0H   ;段点亮指令
         LCALL    SEND
         MOV      DATA_OUT,#52     ;灾情灯
         LCALL    SEND
         RET
KGH:     MOV      DATA_OUT,#0E0H   ;段点亮指令
         LCALL    SEND
         MOV      DATA_OUT,#53     ;改号灯
         LCALL    SEND
         RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
D10MS:   MOV    TIMER7,#20
D10MS1:  MOV    TIMER6,#153
         DJNZ   TIMER6,$
         DJNZ   TIMER7,D10MS1
         RET

D100MS: MOV   TIMER7,#200
D100MS1:MOV   TIMER6,#153
        DJNZ  TIMER6,$
        DJNZ  TIMER7,D100MS1
        RET

D3MS:    MOV    TIMER7,#6
D3MS1:   MOV    TIMER6,#153
         DJNZ   TIMER6,$
         DJNZ   TIMER7,D3MS1
         RET

D50US:   MOV    TIMER7,#20
         DJNZ   TIMER7,$
         RET

         END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -