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

📄 发射.asm

📁 这是一个用于单工无线呼叫系统中完成语音和数据发送的程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
            MOV     A,#11                   ;*
            LCALL   SEND8880
            MOV     A,#3                    ;3
            LCALL   SEND8880
            MOV     A,#12                   ;#
            LCALL   SEND8880
            MOV     A,ADDR                  ;分机号码
            LCALL   SEND8880
            MOV     A,ADDR                  ;分机号码
            LCALL   SEND8880
            MOV     A,ADDR                  ;分机号码
            LCALL   SEND8880
            CLR     MODEM
            CLR     SOUND
            RET

;****************************************
;初始化数据缓存单元
BEG3040H:
            PUSH    07H
            PUSH    00H
            MOV     R7,#32
            MOV     R0,#CZRDATA
            MOV     A,#99H
BEG30401H:  MOV     @R0,A
            INC     R0
            DJNZ    R7,BEG30401H
            POP     00H
            POP     07H
            RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  ;串口收
  CKS:      PUSH     ACC
            PUSH     PSW
            JNB      RI,CKEND      ;判断是否由接收引起的中断
            MOV      A,SBUF

            MOV       17H,16H
            MOV       16H,15H
            MOV       15H,14H
            MOV       14H,13H
            MOV       13H,12H
            MOV       12H,11H
            MOV       11H,A

            MOV       A,17H
            CJNE      A,#'A',CKEND
            MOV       A,16H
            CJNE      A,#'T',CKEND
            MOV       A,15H
            CJNE      A,#'&',CKEND
            MOV       A,14H
            CJNE      A,#'T',CKEND
            MOV       A,13H
            CJNE      A,#'0',CKEND
            MOV       A,11H
            ANL       A,#0FH
            MOV       11H,A
            MOV       A,12H
            CJNE      A,#'1',CKEND1
            MOV       ADDR,11H
            CLR       ES                ;收到准备发数据信号,关串口
            CLR       SOUND             ;发双音到收关闭接收的声音输出
            LCALL     SENDSJ            ;通知对方准备接收数据
            SETB      MODEM
            SETB      ES
  CKEND:    CLR       RI
            POP        PSW
            POP        ACC
            RETI

  CKEND1:   CJNE      A,#'2',CKEND2     ;数据发完信号

            MOV       ADDR,11H
            CLR       ES                ;收到数据发完信号
            CLR       SOUND             ;关闭声音,数据
            CLR       MODEM
            LCALL     SENDSJ_END
            SETB      ES
            AJMP      CKEND

  CKEND2:   CJNE      A,#'3',CKEND3    ;收到准备发声音信号

            MOV       ADDR,11H
            CLR       ES               ;收到发语音信号
            CLR       SOUND            ;发双音到收打开接收的声音输出
            CLR       MODEM
            LCALL     SENDYY
            SETB      SOUND
            CLR       MODEM
            SETB      ES
            AJMP      CKEND

  CKEND3:   CJNE      A,#'4',CKEND
            MOV       ADDR,11H
            CLR       SOUND              ;收到声音发完信号
            CLR       MODEM
            LCALL     SENDYY_END         ;  关闭声音,数据
            AJMP      CKEND

  CRAB:	    MOV       P0,#01011000B      ;写CRA
            SETB      P0.7
            CLR       P0.7
            MOV       P0,#01010001B      ;写CRB   双音模式
            SETB      P0.7
            CLR       P0.7
            RET

 ;写TDR为“7”输出
           MOV       P0,#00010111B
           SETB      P0.7
	   CLR       P0.7

;***********************************
;将A中内容通过8880发送出去

SEND8880:   ADD       A,#10H
            MOV       P0,A              ;发
            SETB      P0.7
            CLR       P0.7
            ACALL     FSY               ;发双音
            ACALL     TFSY              ;停发双音
            ACALL     D20MS
            RET
;*************************************
  FSY:     MOV       P0,#01010001B     ;发双音50MS
           SETB      P0.7
           CLR       P0.7
           ACALL     D50MS
           RET

;*************************************
  TFSY:    MOV       P0,#01010000B          ;双音停发
           SETB      P0.7
           CLR       P0.7
           RET
;************************************
 D100MS: MOV    TIMER2,#200      ;1MS
 D100MS1:MOV    TIMER1,#228      ;0.5MS
         DJNZ   TIMER1,$
         DJNZ   TIMER2,D100MS1
         RET
;************************************
 D50MS:  MOV    TIMER2,#82       ;1MS
 D50MS1: MOV    TIMER1,#228      ;0.5MS
         DJNZ   TIMER1,$
         DJNZ   TIMER2,D50MS1
         RET
;************************************
 D20MS:  MOV    TIMER2,#40       ;1MS
 D20MS1: MOV    TIMER1,#228      ;0.5MS
         DJNZ   TIMER1,$
         DJNZ   TIMER2,D20MS1
         RET
;************************************
 D1MS:   MOV    TIMER2,#2      ;1MS
 D1MS1:  MOV    TIMER1,#228    ;0.5MS
         DJNZ   TIMER1,$
         DJNZ   TIMER2,D1MS1
         RET
;************************************
   D1S:   MOV    TIMER3,#100    ;1S
   D1S1:  MOV    TIMER2,#20     ;10MS
   D1S2:  MOV    TIMER1,#229    ;0.5MS
          DJNZ   TIMER1,$
          DJNZ   TIMER2,D1S2
          DJNZ   TIMER3,D1S1
          RET
;***********************************************
;高7位显示子程序,将缓冲区5BH-5FH中的内容显示出来

LCDXSH:   PUSH      ACC

          MOV       A,#0C2H       ;写第11个字符
          MOV       P1,A
          LCALL     WAIT
          MOV       A,#20H        ;写空格
          MOV       P1,A
          LCALL     DISP

                                  ;写第12个字符
          MOV       A,5BH
          MOV       P1,A
          LCALL     DISP

                                  ;写第13个字符
          MOV       A,5CH
          MOV       P1,A
          LCALL     DISP

                                  ;写第14个字符
          MOV       A,5DH
          MOV       P1,A
          LCALL     DISP

                                  ;写第15个字符
          MOV       A,5EH
          MOV       P1,A
          LCALL     DISP

                                 ;写第16个字符
          MOV       A,5FH
          MOV       P1,A
          LCALL     DISP

          POP       ACC
          RET
;***********************************************
;低10位显示子程序,将缓冲区50H-59H中的内容显示出来

LCDXSL:   PUSH      ACC
          LCALL     CLEARL       ;清显示屏低10位
          MOV       A,#80H       ;写1-8字符
          MOV       P1,A
          LCALL     WAIT
          MOV       R0,#50H
          MOV       R7,#8
LCDXSL1:
          MOV       A,@R0
          CJNE      A,#99H,LCDXSL2
          AJMP      LCDXSL3
LCDXSL2:  MOV       P1,A
          LCALL     DISP
          INC       R0
          DJNZ      R7,LCDXSL1
          MOV       A,#0C0H       ;写第9个字符
          MOV       P1,A
          LCALL     WAIT
          MOV       A,58H
          CJNE      A,#99H,LCDXSL21
          AJMP      LCDXSL3
LCDXSL21: MOV       P1,A
          LCALL     DISP

          MOV       A,59H
          CJNE      A,#99H,LCDXSL22
          AJMP      LCDXSL3
LCDXSL22: MOV       P1,A
          LCALL     DISP
LCDXSL3:  POP       ACC
          RET

;***********************************************
;清显示屏高7位子程序

CLEARH:   PUSH      ACC

          MOV       A,#0C2H       ;写第11个字符
          MOV       P1,A
          LCALL     WAIT
          MOV       A,#20H        ;写空格
          MOV       P1,A
          LCALL     DISP
          LCALL     DISP
          LCALL     DISP
          LCALL     DISP
          LCALL     DISP
          LCALL     DISP
          POP       ACC
          RET
;***********************************************
;清显示屏低10位子程序
CLEARL:
          MOV       A,#80H       ;
          MOV       P1,A
          LCALL     WAIT
          MOV       A,#20H
          MOV       R7,#8
CLEAR1:   MOV       P1,A
          LCALL     DISP
          DJNZ      R7,CLEAR1

          MOV       A,#0C0H       ;
          MOV       P1,A
          LCALL     WAIT
          MOV       A,#20H
          MOV       P1,A
          LCALL     DISP
          LCALL     DISP
          RET
;LCD初始化**********************************************************
 LCDREST: LCALL  D100MS
          MOV    P1,#38H
          CLR    RS
          CLR    RW
          MOV    R2,#3
LCDREST1: SETB   E
          CLR    E
          LCALL  D1MS
          DJNZ   R2,LCDREST1
          MOV    A,#38H    ;功能设置:8位数据,2行
          ACALL  WAIT
          MOV    A,#06H    ;输入增量设置:AC自动加1
          ACALL  WAIT
          MOV    A,#0EH    ;显示方式:显示光标,开显示,不闪烁
          ACALL  WAIT
          RET
;*************************************


WAIT:   LCALL  BF      ;判忙
        CLR    RS
        CLR    RW
        SETB   E
        MOV    P1,A    ;将指令传至P1口
        LCALL  DELAY2MS
        CLR    E
        NOP
        RET

DISP:   LCALL  BF
        SETB   RS
        CLR    RW
        SETB   E
        MOV    P1,A   ;将数据传至P1
        LCALL  DELAY2MS
        CLR    E
        RET

BF:     PUSH   ACC
BF1:    CLR    RS       ;读P1口上的忙/闲状态
        SETB   RW
        SETB   E
        NOP
        MOV    A,P1
        NOP
        NOP
        CLR    E
        JB     ACC.7,BF1
        POP    ACC
        RET
;***************************
DELAY2MS:   Push    07h
            Mov     07h,#7fh
Delay2ms1:  Nop
            Djnz    07h,Delay2ms1
            Pop     07h
            Ret

        END

⌨️ 快捷键说明

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