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

📄 accesscontrol-51.asm

📁 支持电话拨号
💻 ASM
📖 第 1 页 / 共 3 页
字号:

;*************************************************************
          AR0     BIT     P0.0       ;MT8880
          AR1     BIT     P0.1       ;MT8880
          AR2     BIT     P0.2       ;MT8880
          AR3     BIT     P0.3       ;MT8880
          CL      BIT     P0.4       ;MT8880的CALL
          RW      BIT     P0.5       ;MT8880的RW
          RSI     BIT     P0.6       ;MT8880的RSI
          CP      BIT     P0.7       ;MT8880的CP
        MT8880    EQU     P0         ;MT8880的控制脚

          YX      EQU     P1         ;MT8816行列地址:0\Y2\Y1\Y0_X3\X2\X1\X0
       REST8816   BIT     P1.7       ;MT8816复位
          CLK     BIT     P2.0       ;HD7279的CLK
          DAT     BIT     P2.1       ;HD7279的DATA
          KEY     BIT     P2.2       ;HD7279的KEY
         ; LED2    BIT     P2.3       ;未用
         ; LED1    BIT     P2.4       ;未用
          BELL    BIT     P2.5       ;提示音
          st      BIT     P2.6       ;MT8816锁存线
          DI      BIT     P2.7       ;MT8816开关线 =1开,=0关

          PTT_S   BIT     P3.2       ;手柄的PTT
          PTT_D   BIT     P3.3       ;电台的PTT
          RV      BIT     P3.4       ;振铃检测:0振铃
          LRC     BIT     P3.5       ;摘挂机控制:0挂机\1摘机
          CD      BIT     P3.6       ;MSM7512的载波检测
          MOD1    BIT     P3.7       ;MSM7512的收发控制=0:;发=1:收

        CKQSBZ    BIT     20H.0      ;串口收到第1位后=1
        CKJSBZ    BIT     20H.1      ;串口收到结束位后=1
         SYCX     BIT     20H.2      ;双音出现否?=0未出现;=1出现
         gh       BIT     20H.3      ;改号键按下后=1,收到第1个键后=0
         CLQYD    BIT     20H.4      ;20S内收到信息处理器的应答=1 (02H Y 03H)
         ZLBZ     BIT     20H.5      ;振铃标志:533Hz=1、666Hz=0

        DATA_IN   DATA    21H        ;键盘值
        DATA_OUT  DATA    22H        ;HD7279用

         CKQS     EQU     30H        ;串口收起始地址
         DFHM     EQU     40H        ;对方电话号码起始、最长到4FH
         BJHM     EQU     50H        ;本机电话号码起始、最长到5FH
         BJDZ     EQU     60H        ;本机地址起始、最长到67H

         WSZC     EQU     74H        ;电话位数暂存
         ZQH1     EQU     75H        ;灾情种类暂存
         ZQH2     EQU     76H        ;灾情程度暂存
        T0HZC     EQU     77H        ;T0高位暂存
        T0LZC     EQU     78H        ;T0低位暂存
        T0MS      EQU     79H        ;T0模式:0_1K单音;1_串口收到第1个字节启动定时;2_拨号后等待回答
        GNJZC     EQU     7AH        ;功能键的值暂存
      BIT_COUNT   DATA    7BH        ;HD7279发送、接收控制每BIT的8位
        TIMER4    EQU     7CH
        TIMER5    EQU     7DH
        TIMER6    EQU     7EH
        TIMER7    EQU     7FH

      ;定义与IAP有关的特殊功能寄存器
     isp_data     equ  0e2h
     isp_addrh    equ  0e3h
     isp_addrl    equ  0e4h
     isp_cmd      equ  0e5h
     isp_trig     equ  0e6h
     isp_contr    equ  0e7h
      ;flash操作等待时间
     ;enable_isp  equ  83h      ;<5M
     enable_isp   equ  82h      ;<10M
     ;enable_isp  equ  81h      ;<20M
     ;enable_isp  equ  80h      ;>20M
;*************************************************************
        ORG   0000H
        AJMP  START
        ORG   0003H
        AJMP  BINGKOU
        ORG   000BH
        AJMP  ZDT0
        ORG   0023H
        AJMP  PCTOMCU
        ORG   100H
;**********;初始化************************************************
START: MOV    TMOD,#21H              ;设置定时器1为方式2(做波特率发生器,晶振7.3728M)
                                     ;设置定时器0为方式1(做延时用,晶振7.3728M)
       MOV    TH1,#0F0H              ;T1初始值设置(FC:4800 BIT/S)F0:1200 BIT/S
       MOV    TL1,#0F0H
       MOV    TH0,#0FEH              ;T0初始值设置(0.5ms)
       MOV    TL0,#0CCH
       MOV    T0HZC,TH0              ;T0初始值暂存
       MOV    T0LZC,TL0
       SETB   EA                     ;CPU允许中断
       SETB   ES                     ;允许串口中断
       SETB   ET0                    ;允许T0中断
       MOV    SCON,#50H              ;设置串口为方式1(8个数据位)
       SETB   TR1                    ;启动定时器1
       CLR    ST                     ;MT8816锁存线
;*************************************************************
       MOV    20H,#00H               ;标志位全部清零
       MOV    DATA_OUT,#10100100B    ;HD7279发复位指令
       LCALL  SEND
       SETB   REST8816               ;MT8816复位
       LCALL  D10MS
       CLR    REST8816
       mov    GNJZC,#0Ah             ;功能键默认为无线状态
       CLR    LRC                    ;有线挂机状态
       CLR    PTT_D                  ;电台处于收状态
       lcall  dgb                    ;灯全灭
       LCALL  kgh                    ;开改号灯
       lcall  d100ms
       lcall  dgb                    ;灯全灭
       LCALL  kzj                    ;开转接灯
       lcall  d100ms
       lcall  dgb                    ;灯全灭
       lcall  kyx                    ;开有线灯
       lcall  d100ms
       lcall  dgb                    ;灯全灭
       lcall  kwx                    ;开无线灯
       lcall  d100ms
       lcall  kdy                    ;开电源灯
       lcall  ftsy                   ;自检完成发2个100ms提示音
       lcall  d100ms
       lcall  tftsy
       lcall  d100ms
       lcall  ftsy
       lcall  d100ms
       lcall  tftsy
;*******MT8880初始化******************************************************
        MOV     MT8880,#01111111B
        SETB	CP
	CLR	CP
	MOV	MT8880,#01010000B
        SETB	CP
	CLR	CP
	MOV	MT8880,#01010000B
        SETB	CP
	CLR	CP
	MOV	MT8880,#01011000B
        SETB	CP
	CLR	CP
	MOV	MT8880,#01010000B
        SETB	CP
	CLR	CP
	MOV	MT8880,#01111111B
        SETB	CP
	CLR	CP
        SETB    MOD1                 ;///
        lcall  d100ms
        mov     yx,#38h             ;电台的phone到7512的输入端:收数据用
        lcall   DK                  ;打开开关
        mov     yx,#7fh             ;7512的RX到单片机:无线数据到单片机
        lcall   DK                  ;打开开关
        mov     yx,#02h             ;手柄的mic接电台的mic  //00
        lcall   DK                  ;打开开关
        mov     yx,#13h             ;手柄的phone接电台的phone  //11
        lcall   DK                  ;打开开关
        MOV     SBUF,#"("
        JNB     TI,$
        CLR     TI
        mov     dph,#20h            ;调出第1扇区存的对方电话号码
        mov     r0,#0FFh
START0A:INC     R0
        mov     dpl,r0
        lcall   byte_read
        CJNE    A,#0FFH,START0B
        MOV     SBUF,#")"
        JNB     TI,$
        CLR     TI
        MOV     SBUF,#"("
        JNB     TI,$
        CLR     TI
        AJMP    START0C

START0B:MOV     SBUF,A
        JNB     TI,$
        CLR     TI
        AJMP    START0A

START0C:mov     dph,#22h            ;调出第2扇区存的本机电话号码
        mov     r0,#0FFh
START0D:INC     R0
        mov     dpl,r0
        lcall   byte_read
        CJNE    A,#0FFH,START0E
        MOV     SBUF,#")"
        JNB     TI,$
        CLR     TI
        MOV     SBUF,#"("
        JNB     TI,$
        CLR     TI
        AJMP    START0F

START0E: MOV     SBUF,A
        JNB     TI,$
        CLR     TI
        AJMP    START0D

START0F:mov     dph,#24h            ;调出第3扇区存的本机地址
        mov     r0,#0FFh
START0G:INC     R0
        mov     dpl,r0
        lcall   byte_read
        CJNE    A,#0FFH,START0H
        MOV     SBUF,#")"
        JNB     TI,$
        CLR     TI
        AJMP    START1

START0H:MOV     SBUF,A
        JNB     TI,$
        CLR     TI
        AJMP    START0G

;;;;;;;;主程序循环区域;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
START1: JNB      KEY,AJ0            ;检测是否有键按下
        AJMP     PTT0               ;去手柄PTT是否按下?

AJ0:    MOV     DATA_OUT,#15H       ;有键按下,发送读键盘指令
        lcall   SEND
        lcall   RECEIVE
        MOV     A,DATA_IN
        lcall   FTSY                ;发提示音:BELL脚输出作为提示音
        JNB     KEY,$
        lcall   TFTSY               ;停发提示音
                           ;按无线键
        cjne    a,#0AH,AJ1
        mov     GNJZC,a             ;功能键的值暂存
AJ0A:   lcall   DGB                 ;灯全灭
        lcall   kwx                 ;无线灯亮
        SETB    REST8816            ;复位MT8816
        LCALL   D10MS
        CLR     REST8816
        SETB    MOD1                 ;///
        lcall  d100ms
        mov     yx,#38h             ;电台的phone到7512的输入端:收数据用
        lcall   DK                  ;打开开关
        mov     yx,#7fh             ;7512的RX到单片机:无线数据到单片机
        lcall   DK                  ;打开开关
        mov     yx,#02h             ;手柄的mic接电台的mic  //00
        lcall   DK                  ;打开开关
        mov     yx,#13h             ;手柄的phone接电台的phone  //11
        lcall   DK                  ;打开开关
        ajmp    START1
                           ;按有线键
AJ1:    cjne    a,#0BH,AJ2
        SETB    LRC                 ;摘机
        mov     GNJZC,a             ;功能键的值暂存
        lcall   DGB                 ;灯全灭
        lcall   kyx                 ;有线灯亮
        SETB    REST8816            ;复位MT8816
        LCALL   D10MS
        CLR     REST8816
        mov     yx,#09h             ;手柄的mic到放大器1的输入
        lcall   DK                  ;打开开关
        mov     yx,#4ah             ;放大器1的输出到电话的mic
        lcall   DK                  ;打开开关
        mov     yx,#15h             ;电话的pnoned到手柄的phone
        lcall   DK                  ;打开开关
        ;mov     yx,#58h             ;电话的phone到7512的输入端:收数据用
        ;lcall   DK                  ;打开开关
        ;mov     yx,#7fh             ;7512的RX到单片机:无线数据到单片机
        ;lcall   DK                  ;打开开关
        ajmp    START1
                            ;按转接键
AJ2:    cjne    a,#0CH,AJ3
        mov     GNJZC,a             ;功能键的值暂存
        lcall   dgb                 ;段关闭:除电源灯外全灭
        lcall   kzj                 ;转接灯亮
        SETB    REST8816            ;复位MT8816
        LCALL   D10MS
        CLR     REST8816
        ;clr     LRC


        mov     yx,#51h             ;电话的pnoned到手柄的phone:监听
        lcall   DK                  ;打开开关
        ;mov     yx,#52h             ;电话的pnone到电台的mic:发信号
        ;lcall   DK                  ;打开开关
        ;mov     yx,#43h             ;电台的phone到电话的mic
        ;lcall   DK                  ;打开开关
        mov     yx,#58h             ;电话的phone到7512的输入端:收数据用
        lcall   DK                  ;打开开关
        mov     yx,#7fh             ;7512的RX到单片机:无线数据到单片机
        lcall   DK                  ;打开开关
        setb    mod1
        ;mov     yx,#02h             ;手柄的mic接电台的mic  //00
        ;lcall   dk                  ;关断开关
        ;mov     yx,#13h             ;手柄的phone接电台的phone  //11
        ;lcall   dk                  ;关断开关

        ajmp    START1
                             ;按挂机键
AJ3:    cjne    a,#0DH,AJ4
AJ3a:   clr     lrc                 ;挂机
        mov     GNJZC,#0AH          ;功能键默认为无线
        mov     yx,#02h             ;手柄的mic接电台的mic  //00
        lcall   gd                  ;关断开关
        mov     yx,#13h             ;手柄的phone接电台的phone  //11
        lcall   gd                  ;关断开关
        AJMP    AJ0A                ;到无线按键

                             ;按灾情键(呼叫控制器中键值=0CH)
AJ4:    cjne    a,#0EH,AJ5
        lcall   dgb                 ;段关闭:除电源灯外全灭
        lcall   kzq                 ;灾情灯亮
        mov     GNJZC,a             ;功能键的值暂存
        mov     r6,#2               ;R6存灾情的位数
        ajmp    START1
                             ;按改号键
AJ5:    cjne    a,#0FH,AJ6
        lcall   dgb                 ;段关闭:除电源灯外全灭
        lcall   kgh                 ;改号灯亮
        mov     GNJZC,a             ;功能键的值暂存
        setb    gh                  ;改号键按下后=1,收到第1个键后=0
        ajmp    START1
                             ;按的0~9键
AJ6:    mov     b,a                 ;将键盘的值暂存便于发双音是判断0要发0A
        mov     a,GNJZC
        cjne    a,#0BH,AJ8   ;是否是在有线摘机状态下按的0~9键(拨号)

        mov     yx,#67h             ;tSTART0H880到7512的输入
        lcall   DK                  ;打开开关
        mov     yx,#48h             ;7512的输出到电话的mic
        lcall   DK                  ;打开开关


        LCALL   CRAB                ;发双音
        mov     a,b                 ;取回键盘值
        ANL     A,#0FH
        cjne    a,#00h,AJ7
        MOV     A,#0AH              ;键盘值=0时发0A
AJ7:    ORL     A,#10H              ;发数字低4位决定
        MOV     MT8880,A
        SETB    CP
        CLR     CP
        LCALL   FSY                 ;发双音
        LCALL   TFSY                ;停发双音

        mov     yx,#67h             ;断开tSTART0H880到7512的输入
        lcall   GD
        mov     yx,#48h             ;断开7512的输出到电话的mic
        lcall   GD
        ajmp    START1

AJ8:    cjne    a,#0FH,AJ14    ;是否是在改号状态下按的0~9键(改号)
        jnb     gh,AJ13             ;是否是按了改号键后的第1个键:是则要檫除相应扇区
        MOV     A,B                 ;取回该键值
        cjne    a,#1,AJ10           ;是否是修改对方电话号码?
        mov     dph,#20h            ;第1扇区存对方电话号码
        mov     dpl,#00h
AJ9:    mov     r0,#00h             ;从本扇区的00H开始存

⌨️ 快捷键说明

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