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

📄 modemzj.asm

📁 c51使用modem模块的操作示范代码.
💻 ASM
字号:
;以下是mcu所接modem呼叫pc机所接modem的程序
   CHARNUM0   EQU    6H             ;要发送字符串0的数量
   CHARNUM1   EQU    7H             ;要发送字符串1的数量
   CHARNUM2   EQU   11H             ;要发送字符串2的数量
   CHARNUM3   EQU    3H             ;要发送字符串3的数量
   CHARNUM4   EQU    5H             ;要发送字符串4的数量
   CHARNUM5   EQU    7H             ;发送缓冲区的长度()
   CHARNUM6   EQU   10H             ;接收缓冲区的长度()
   CHARNUM7   EQU   30H             ;接收结果码缓冲区的长度
   SENDBUF    EQU   20H             ;发送数据区首址()
   RECBUF     EQU   20H             ;接收数据区首址()
   COMMBUF    EQU   30H             ;接收AT命令执行后返回的结果码的区域首址
   TIME1      EQU  0FAH             ;延时程序中用到的两个变量
   TIME2      EQU  0F9H
   DDLJ       EQU   5AH             ;建立连接时用到的变量
   DDJS       EQU  06FH             ;接收数据时用到的变量

;******************主程序

             ORG   0000H
             LJMP  MAIN
             ORG   0023H
             LJMP  SER              ;转至中断服务程序
             ORG   0030H
MAIN:        MOV   SCON,#50H        ;将串行口设置为方式1,REN=1
             MOV   SP,#60H
             MOV   TMOD,#20H        ;定时器1设为模式2
             MOV   TL1,#0F4H        ;定时器初值,晶振为11.0592Mhz,波特率为2400bps
             MOV   TH1,#0F4H        ;8位重装值
             SETB  TR1              ;启动定时器1
             CLR   PSW.5            ;
             MOV   R7,#00H
           ;  CLR   P0.0
             SETB  P1.1
             SETB  P1.2

;***************发送AT 命令
 	     MOV   R2,#CHARNUM0	    ;要发送字符的数量
	     MOV   R0,#0H
             MOV   DPTR,#CODE0      ;CODE0为发送字符的地址
             MOV   R1,#COMMBUF
             MOV   R4,#0H
             SETB  ES
             CLR   EA
AT0:         ACALL LOOP             ;transmiter for at command0
             ACALL DELAY            ;延时数秒,等待at命令的返回码,进入中断
             ACALL DELAY
              MOV   R0,#COMMBUF          ;结果码的校验
JIAOYAN0:    MOV   A,@R0
             CJNE  A,#4FH,JXJIAOYAN0  //转向校验
             DEC   R4
             INC   R0
             MOV   A,@R0
             CJNE  A,#4BH,JXJIAOYAN0
             AJMP  JXZX0  //
JXJIAOYAN0:  DJNZ  R4,JUMPER0          ;*要标志第一行命令发送不成功
             AJMP  ZHONGJI0
  JUMPER0:   INC   R0
             AJMP  JIAOYAN0
ZHONGJI0:    SETB  PSW.5
             LJMP  GUAXIAN
;           LJMP  GUAXIAN

JXZX1:       MOV   R2,#CHARNUM2	    ;要发送字符的数量
	         MOV   R0,#0H
             MOV   DPTR,#CODE2      ;CODE1为发送字符的地址
             MOV   R1,#COMMBUF
             MOV   R4,#0H
             CLR   EA
             MOV   R6,#DDLJ
AT2:         ACALL LOOP
DENGDAILJ:   ACALL DELAY            ;延时数秒,等待at命令的返回码,进入中断
             DJNZ  R6,DENGDAILJ
             MOV   R0,#COMMBUF          ;结果码的校验
JIAOYAN2:    MOV   A,@R0
             CJNE  A,#43H,JXJIAOYAN2
             DEC   R4
             INC   R0
             MOV   A,@R0
             CJNE  A,#4FH,JXJIAOYAN2
             AJMP  SOUT
JXJIAOYAN2:  DJNZ  R4,JUMPER2
             AJMP  ZHONGJI2
JUMPER2:     INC   R0
             AJMP  JIAOYAN2
ZHONGJI2:    SETB  PSW.5
             LJMP  GUAXIAN        ;*

SOUT:        MOV   R1,#SENDBUF   ;发送数据区的首址20H
             MOV   DPTR,#STRING
             MOV   R3,#00H
             MOV   R4,#CHARNUM5   ;发送缓冲区的长度7H
 SOUTSUN:    MOV   A,R3
             MOVC  A,@A+DPTR
             MOV   @R1,A
             INC   R1
             INC   R3
             DJNZ  R4,SOUTSUN
             MOV   R1,#SENDBUF
             MOV   R4,CHARNUM5
             ACALL SEND
             ACALL DELAY
             ACALL DELAY
             ;MOV   R6,#DDJS     ;DDJS接收数据时用到的变量06FH???????
             ;MOV   R1,#RECBUF   ;接收数区的首址20H
             ;MOV   R4,#0H
;DENGDAIJS:   LCALL DELAY
             ;DJNZ  R6,DENGDAIJS

GUAXIAN:     MOV   R2,#CHARNUM3                      ;;transmiter for at command3
             MOV   R0,#0H
             MOV   DPTR,#CODE3                        ;!!
             ACALL LOOP
             ACALL DELAY
             ACALL DELAY

             MOV   R2,#CHARNUM4
             MOV   R0,#0H
             MOV   DPTR,#CODE4
             MOV   R1,#COMMBUF
             MOV   R4,#0H
             CLR   EA
             ACALL LOOP
             ACALL DELAY
             ACALL DELAY
             MOV   R0,#COMMBUF          ;结果码的校验
JIAOYAN3:    MOV   A,@R0
             CJNE  A,#4FH,JXJIAOYAN3
             DEC   R4
             INC   R0
             MOV   A,@R0
             CJNE  A,#4BH,JXJIAOYAN3
             AJMP  JIESHU
JXJIAOYAN3:  DJNZ  R4,JUMPER3
             AJMP   JIESHU
JUMPER3:     INC   R0
             AJMP  JIAOYAN3
       ;*
JIESHU:      JNB   PSW.5 ,JIESHU1
             CLR   P1.1
             AJMP  JIESHU2
   JIESHU1:  CJNE  R7,#0FFH,JIESHU2
             CLR   P1.2
    JIESHU2: SJMP  JIESHU2      ;*


LOOP:        CLR   TI
             MOV   A,R0
             MOVC  A,@A+DPTR
	     MOV   SBUF,A
             JNB   TI,$
;-----------------------------------这还应该有一个判断SBUF是否为空的子程序
	     INC   R0
             DJNZ  R2,LOOP
             CLR   TI
             SETB  EA
             RET


;****************中断服务程序

 SER:        CLR   EA
             JB    RI,JUST          ;RI=1,为接收中断
             SJMP  OVER
 JUST:       MOV   A,SBUF
             MOV   @R1,A
             INC   R1
             INC   R4               ;记录接收到字符的数量
             CLR   RI
 OVER:       SETB  EA
             RETI                   ;中断返回
;****************发送子程序
SEND:        CLR   TI
             CLR   EA
             MOV   A,@R1            ;取发送数据到A
             MOV   SBUF,A           ;发送ASCII码
             INC   R1               ;修改发送数据指针
             JNB   TI,$
;-----------------------------------再这还应该有一个判断SBUF是否为空的子程序
             DJNZ  R4,C2

             JMP   CLOSE1
 C2:         AJMP  SEND
 CLOSE1:     CLR  EA
             CLR   TI;=====================
             MOV   R7,#0FFH
             RET

;*****************延时子程序
DELAY:       MOV  R3,#TIME1
LOOP2:       MOV  R5,#TIME2
             NOP
             NOP
LOOP1:       NOP
             NOP
             NOP
             NOP
             NOP
             NOP
             DJNZ R5,LOOP1
             DJNZ R3,LOOP2         ;延时时间等于(4+10*TIME2+20*TIME1)*机器周期
             RET

CODE0:  DB      'A','T','F','E',0AH,0DH                 ;恢复出厂设置

CODE2:  DB   	'A','T','X','4','D','T','9','W','4','7','8','7','4','9','5',0AH,0DH ;先进行dialtone信号和busy信号的探测,
                                                        ;然后拨号.
CODE3:  DB      '+','+','+'                             ;由on-line状态返回到command状态
CODE4:  DB      'A','T','H',0AH,0DH                     ;挂机,结束通话
STRING: DB    59H,75H,65H,46H,61H,6dH,65H

            END

⌨️ 快捷键说明

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