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

📄 infoprocess-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行列地址:REST8816\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
         d1czl    BIT     20H.6      ;第1次振铃后标志=1

        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                    ;开电源灯
       acall  ftsy                   ;自检完成发2个100ms提示音
       lcall  d100ms
       acall  tftsy
       lcall  d100ms
       acall  ftsy
       lcall  d100ms
       acall  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

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

AJ0:    MOV     DATA_OUT,#15H       ;有键按下,发送读键盘指令
        ACALL   SEND
        ACALL   RECEIVE
        MOV     A,DATA_IN
        ACALL   FTSY                ;发提示音:BELL脚输出作为提示音
        JNB     KEY,$
        acall   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的输入端:收数据用
        acall   DK                  ;打开开关
        mov     yx,#7fh             ;7512的RX到单片机:无线数据到单片机
        acall   DK                  ;打开开关
        mov     yx,#02h             ;手柄的mic接电台的mic  //00
        acall   DK                  ;打开开关
        mov     yx,#13h             ;手柄的phone接电台的phone  //11
        acall   DK                  ;打开开关
        ajmp    START1
                           ;按有线键
AJ1:    cjne    a,#0BH,AJ2
        SETB    LRC                 ;摘机
        mov     GNJZC,a             ;功能键的值暂存
        lcall   DGB                 ;灯全灭
        lcall   kyx                 ;有线灯亮
        SETB    REST8816            ;复位MT8816
        LCALL   D10MS
        CLR     REST8816
        clr     d1czl               ;第1次振铃标志清0
        mov     yx,#09h             ;手柄的mic到放大器1的输入
        acall   DK                  ;打开开关
        mov     yx,#4ah             ;放大器1的输出到电话的mic
        acall   DK                  ;打开开关
        mov     yx,#51h             ;电话的pnoned到手柄的phone
        acall   DK                  ;打开开关
        mov     yx,#58h             ;电话的phone到7512的I\O:收有线的数据
        acall   DK                  ;打开
        mov     yx,#7fh             ;7512的RX到单片机RX:有线数据到单片机
        acall   DK                  ;打开开关
        ajmp    START1
                            ;按转接键
AJ2:    cjne    a,#0CH,AJ3
        mov     GNJZC,a             ;功能键的值暂存
        lcall   dgb                 ;段关闭:除电源灯外全灭
        lcall   kzj                 ;转接灯亮
        SETB    REST8816            ;复位MT8816
        LCALL   D10MS
        CLR     REST8816
        mov     yx,#51h             ;电话的pnoned到手柄的phone:监听
        acall   DK                  ;打开开关
        mov     yx,#52h             ;电话的pnone到电台的mic:发信号
        acall   DK                  ;打开开关
        mov     yx,#43h             ;电台的phone到电话的mic
        acall   DK                  ;打开开关
        ajmp    START1
                             ;按挂机键
AJ3:    cjne    a,#0DH,AJ4
AJ3a:   mov     yx,#48h            ;7512的输出到电话的mic        ////
        acall   DK                 ;打开开关
        CLR     MOD1               ;7512发
        lcall   d100ms
        MOV     SBUF,#02H          ;通过电台发送数据:02H+"T"+03H
        JNB     TI,$
        CLR     TI
        MOV     SBUF,#"G"          ;挂机指令,使接入控制器挂机///
        JNB     TI,$
        CLR     TI
        MOV     SBUF,#03H
        JNB     TI,$
        CLR     TI
        mov     yx,#48h             ;7512的输出到电话的mic        ////
        acall   GD                  ;关断开关
        SETB    MOD1                ;7512收
        lcall   d100ms
        clr     lrc                 ;挂机
        mov     GNJZC,#0AH          ;功能键默认为无线
        AJMP    AJ0A                ;到无线按键

                             ;按*键:未用
AJ4:    cjne    a,#0EH,AJ5
        ajmp    START1
                             ;按#键:未用
AJ5:    cjne    a,#0FH,AJ6
        ajmp    START1
                             ;按的0~9键
AJ6:    mov     b,a                 ;将键盘的值暂存便于发双音是判断0要发0A
        mov     a,GNJZC
        cjne    a,#0BH,AJ8   ;是否是在有线摘机状态下按的0~9键(拨号)

        mov     yx,#67h             ;tSTART0H880到7512的输入
        acall   DK                  ;打开开关
        mov     yx,#48h             ;7512的输出到电话的mic
        acall   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的输入
        acall   GD
        mov     yx,#48h             ;断开7512的输出到电话的mic
        acall   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开始存
        lcall   sector_erase        ;擦除扇区(只能1个扇区一起擦除,只有要写的字节为空时才能写入)
        lcall   delay
        CLR     GH
        ajmp    START1

AJ10:   cjne    a,#2,AJ11           ;是否是修改本机电话号码?
        mov     dph,#22h            ;第2扇区存本机电话号码
        mov     dpl,#00h
        ajmp    AJ9

AJ11:  cjne     a,#3,AJ12           ;是否是修改本机地址?
        mov     dph,#24h            ;第3扇区存本机地址
        mov     dpl,#00h
        ajmp    AJ9

AJ12:   acall   ftsy                ;按了改号键后第1个键值不是1、2、3告警
        lcall   d100ms
        acall   tftsy
        lcall   d100ms
        acall   ftsy
        lcall   d100ms
        acall   tftsy
        ajmp    START1

AJ13:   MOV     A,B                 ;取回该键值并将该键值保存在相应的扇区储存单元
        mov     dpl,r0              ;dph的值在檫除时未变

⌨️ 快捷键说明

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