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

📄 发射.asm

📁 这是一个用于单工无线呼叫系统中完成语音和数据发送的程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
    ;SCA发射程序,11.0592MHZ

    ; 当收到"AT&T01+地址"时准备发数据     发双音*0#+3位地址 000-888  接收机关声音输出,开MODEM
    ; 当收到"AT&T02+地址"时数据发完       发双音*2#+3位地址 000-888  关声音输出,关MODEM
    ; 当收到"AT&T03+地址"时准备发语音     发双音*1#+3位地址 000-888  接收机打开声音输出,关MODEM
    ; 当收到"AT&T04+地址"时语音发完       发双音*3#+3位地址 000-888   关声音输出,关MODEM
    ;  发双音*1#+3位地址 000-888  接收机打开声音输出,关MODEM
    CZRDATA   EQU     30H   ; 数据缓冲区首址
    CZRCOUNT  EQU     2FH   ; 数据缓冲区长度
    KEYTMP    EQU     2EH   ; 键值缓存
    KEYTMP1   EQU     2DH   ; 键值缓存
    KEYDATA   EQU     2CH   ; 键值
    DISPCOUNT EQU     2BH   ;光标位置
    DISPBEG   EQU     2AH   ;显示数据的起始地址
    TIMER1    EQU     29H
    TIMER2    EQU     28H
    TIMER3    EQU     27H
    KEYMARK   BIT     20H.0  ;按键判别=0,有键
    FUNCMARK  BIT     20H.1  ;数据,语音判别位

    GNBZ      BIT     20H.2  ;按功能键未发双音前=1  ;发完后=0

    ADDR      EQU     26H   ;分机号码
    SOUND     BIT     P2.6  ;声音开关=1,开
    MODEM     BIT     P2.7  ;MODEN开关
    KEY1      BIT     P2.0
    KEY2      BIT     P2.1
    RS        BIT     P2.4    ;LCD
    RW        BIT     P2.3    ;LCD
    E         BIT     P2.2    ;LCD
            ORG      0000H
            AJMP     START
            ORG      000BH
            LJMP     READKEY
            ORG      0023H
            AJMP     CKS

            ORG      60H

START:
            MOV       SP,#60H
            MOV       TMOD,#21H ;设置T1为模式2,T0为模式1
            MOV       KEYTMP,#99H
            MOV       KEYTMP1,#99H
            MOV       KEYDATA,#99H
            MOV       CZRCOUNT,#CZRDATA
            MOV       DISPBEG,#CZRDATA
            MOV       DISPCOUNT,#0
            MOV       20H,#0
            MOV       ADDR,#3
            LCALL     CLEARBUFF        ;清空数据区内容
            LCALL     D100MS
            LCALL     LCDREST          ;LCD初始化
            MOV       20H,#0
            MOV       P0,#01111111B    ;MT8880初始化
            SETB      P0.7
	    CLR       P0.7
	    MOV       P0,#01010000B
            SETB      P0.7
	    CLR       P0.7
	    MOV       P0,#01010000B
            SETB      P0.7
	    CLR       P0.7
            MOV       P0,#01011000B
            SETB      P0.7
	    CLR       P0.7
	    MOV       P0,#01010000B
            SETB      P0.7
	    CLR       P0.7
	    MOV       P0,#01111111B
            SETB      P0.7
	    CLR       P0.7               ;MT8880初始化完成
            LCALL     CRAB


            MOV       TH1,#0FDH
            MOV       TL1,#0FDH     ;9600BPS
            MOV       TL0,#0
            MOV       TH0,#184      ;20MS定时
            SETB      EA
            SETB      ES            ;开串口中断
            SETB      PS            ;串口为高优先级
            SETB      ET0
            MOV       SCON,#50H     ;串口1 、允许接收
            SETB      TR1           ;启动串口发送、 接收
            SETB      TR0
            SETB      SOUND
            CLR       MODEM

            MOV     50H,#20H
            MOV     51H,#" "
            MOV     52H,#"W"
            MOV     53H,#"e"
            MOV     54H,#"l"
            MOV     55H,#"l"
            MOV     56H,#"c"
            MOV     57H,#"o"
            MOV     58H,#"m"
            MOV     59H,#"e"
            MOV     5AH,#" "
            MOV     5BH,#" "
            MOV     5CH,#" "
            MOV     5DH,#" "
            MOV     5EH,#" "
            MOV     5FH,#" "
            LCALL   LCDXSL
            LCALL   LCDXSH
            MOV     A,#0CH ;显示方式:关光标,开显示,不闪烁
            ACALL   WAIT
            AJMP     $


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  ; 键盘处理
  READKEY:
            PUSH    ACC
            PUSH    00H
            PUSH    07H
            MOV     TL0,#0
            MOV     TH0,#184      ;20MS定时
            SETB    KEY1
            SETB    KEY2
            ORL     P1,#0FFH
            CLR     KEY2
            MOV     A,P1
            MOV     R0,A
            SETB    KEY2
            CLR     KEY1
            MOV     A,P1
            SETB    KEY1
            MOV     R1,#0
            MOV     R2,#0
            CJNE    A,#0FFH,READKEY2
            CJNE    R0,#0FFH,READKEY1
            LJMP    READKEY5                ;说明键已抬起
READKEY1:   MOV     R2,#8
            MOV     A,R0
READKEY2:   RRC     A
            INC     R1
            JC      READKEY2
            MOV     A,R1
            ADD     A,R2
            MOV     KEYTMP,A
READKEY3:   CJNE    A,KEYTMP1,READKEY4      ;检测两次按键是否相同
            MOV     KEYDATA,A               ;两次按键相同
            LJMP    READKEY20
READKEY4:   MOV     KEYTMP1,A               ;两次按键不同
            LJMP    READKEY20
READKEY5:   MOV     A,KEYDATA
            CJNE    A,#99H,READKEY6
            MOV     KEYTMP1,#99H
            LJMP    READKEY20
READKEY6:   LCALL   KEYPROCE
            MOV     KEYDATA,#99H
            MOV     KEYTMP1,#99H
READKEY20:  POP     07H
            POP     00H
            POP     ACC
            RETI
;***********************************************
;键盘处理程序
KEYPROCE:
            PUSH    ACC
            PUSH    00H
            PUSH    07H
            MOV     A,KEYDATA
            DEC     A
            CLR     C
            RLC     A                       ;A*2
            MOV     DPTR,#PROCEMAIN
            JMP     @A+DPTR
PROCEMAIN:  AJMP    PROCE01
            AJMP    PROCE02
            AJMP    PROCE03
            AJMP    PROCE04
            AJMP    PROCE05
            AJMP    PROCE06
            AJMP    PROCE07
            AJMP    PROCE08
            AJMP    PROCE09
            AJMP    PROCE10
            AJMP    PROCE11
            AJMP    PROCE12
            AJMP    PROCE13
            AJMP    PROCE14
            AJMP    PROCE15

PROCE01:    jb     GNBZ,PROCE012

            JB      KEYMARK,PROCE011
            SETB    KEYMARK
            MOV     5FH,#";"
            MOV     5EH,#":"
            MOV     5DH,#"."
            MOV     5CH,#","
            MOV     5BH,#"1"
            LCALL   LCDXSH
            LJMP    PROCE_END
PROCE011:   CLR     KEYMARK
            MOV     A,5BH
            MOV     R0,CZRCOUNT
            MOV     @R0,A
            LCALL   TO_BUFF1             ;计算新页首地址,并更新显示区内容
            LCALL   CLEARH
            LCALL   LCDXSL
            MOV    A,#0EH    ;显示方式:开光标,开显示,不闪烁
            ACALL  WAIT
            INC     CZRCOUNT
            LJMP    PROCE_END

 PROCE012:  mov    addr,#1
            MOV    5BH,#"1"

 PROCE012a: MOV     5FH,#" "
            MOV     5EH,#" "
            MOV     5DH,#" "
            MOV     5CH,#" "
            LCALL  LCDXSH
            JB      FUNCMARK,PROCE013
            LCALL   SENDSJ
            clr     gnbz
            LJMP    PROCE_END

 PROCE013:  LCALL   SENDYY
            clr     gnbz
            LJMP    PROCE_END

PROCE022:   mov    addr,#2
            MOV    5BH,#"2"
            ljmp   PROCE012a

PROCE02:    jb     GNBZ,PROCE022

            JB      KEYMARK,PROCE021
            SETB    KEYMARK
            MOV     5FH,#20H
            MOV     5EH,#"C"
            MOV     5DH,#"B"
            MOV     5CH,#"A"
            MOV     5BH,#"2"
            LCALL   LCDXSH
            LJMP    PROCE_END
PROCE021:   CLR     KEYMARK
            MOV     A,5CH
            MOV     R0,CZRCOUNT
            MOV     @R0,A
            LCALL   TO_BUFF1             ;计算新页首地址,并更新显示区内容
            LCALL   CLEARH
            LCALL   LCDXSL
            MOV     A,#0EH    ;显示方式:开光标,开显示,不闪烁
            ACALL   WAIT
            INC     CZRCOUNT
            LJMP    PROCE_END



PROCE032:   mov    addr,#3
            MOV    5BH,#"3"
            ljmp   PROCE012a

PROCE03:    jb     GNBZ,PROCE032
            JB      KEYMARK,PROCE031
            SETB    KEYMARK
            MOV     5FH,#20H
            MOV     5EH,#"F"
            MOV     5DH,#"E"
            MOV     5CH,#"D"
            MOV     5BH,#"3"
            LCALL   LCDXSH
            LJMP    PROCE_END
PROCE031:   CLR     KEYMARK
            MOV     A,5DH
            MOV     R0,CZRCOUNT
            MOV     @R0,A
            LCALL   TO_BUFF1             ;计算新页首地址,并更新显示区内容
            LCALL   CLEARH
            LCALL   LCDXSL
            MOV     A,#0EH       ;显示方式:开光标,开显示,不闪烁
            ACALL   WAIT
            INC     CZRCOUNT
            LJMP    PROCE_END


PROCE042:   mov    addr,#4
            MOV    5BH,#"4"
            ljmp   PROCE012a

PROCE04:    jb     GNBZ,PROCE042
            JB      KEYMARK,PROCE041
            SETB    KEYMARK
            MOV     5FH,#20H
            MOV     5EH,#"I"
            MOV     5DH,#"H"
            MOV     5CH,#"G"
            MOV     5BH,#"4"
            LCALL   LCDXSH
            LJMP    PROCE_END
PROCE041:   CLR     KEYMARK
            MOV     A,5EH
            MOV     R0,CZRCOUNT
            MOV     @R0,A
            LCALL   TO_BUFF1             ;计算新页首地址,并更新显示区内容
            LCALL   CLEARH
            LCALL   LCDXSL
            MOV     A,#0EH    ;显示方式:开光标,开显示,不闪烁
            ACALL   WAIT
            INC     CZRCOUNT
            LJMP    PROCE_END

PROCE052:   mov    addr,#5
            MOV    5BH,#"5"
            ljmp   PROCE012a

PROCE05:    jb     GNBZ,PROCE052
            JB      KEYMARK,PROCE051
            SETB    KEYMARK
            MOV     5FH,#20H
            MOV     5EH,#"L"
            MOV     5DH,#"K"
            MOV     5CH,#"J"
            MOV     5BH,#"5"
            LCALL   LCDXSH
            LJMP    PROCE_END
PROCE051:   CLR     KEYMARK
            MOV     A,5FH
            MOV     R0,CZRCOUNT
            MOV     @R0,A
            LCALL   TO_BUFF1             ;计算新页首地址,并更新显示区内容
            LCALL   CLEARH
            LCALL   LCDXSL
            MOV     A,#0EH    ;显示方式:开光标,开显示,不闪烁
            ACALL   WAIT
            INC     CZRCOUNT
            LJMP    PROCE_END

PROCE062:   mov    addr,#6
            MOV    5BH,#"6"
            ljmp   PROCE012a

PROCE06:    jb     GNBZ,PROCE062
            JB      KEYMARK,PROCE061
            SETB    KEYMARK
            MOV     5FH,#20H

⌨️ 快捷键说明

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