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

📄 modemzj.lst

📁 c51使用modem模块的操作示范代码.
💻 LST
字号:
C51 COMPILER V7.09   MODEMZJ                                                               10/28/2004 16:09:18 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE MODEMZJ
OBJECT MODULE PLACED IN modemzj.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE modemzj.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg52.h>
   2          #include <stdio.h>
   3          #include <intrins.h>
   4          #define uchar unsigned char
   5          uchar tel[5];
   6          uchar trbuf[9];
   7          uchar recbuf[2];
   8          sbit P1_0=P1^0;
   9          sbit P1_1=P1^1;
  10          sbit P1_2=P1^2;
  11          /****************************************************************************************
  12          **AT命令发送子函数void atsend(unchar *commbuf)                                         **
  13          **commbuf[]={n,data1,data2,...}                                                        **
  14          **n--命令字节数,data--AT命令的ASCII码                                                 **
  15          ****************************************************************************************/
  16          void atsend(uchar *commbuf)
  17          {
  18   1       uchar i,j,a,buf[8];
  19   1       i=*(commbuf);                  //首地址内容为报文长度
  20   1       for (j=1;j<(i+1);j++)  //循环到报文结束
  21   1       {
  22   2        TI=0;
  23   2        a=*(commbuf+j);       //commbuf保存地址+j的偏移量,*读取计算结果所在地址内容
  24   2        SBUF=*(commbuf+j);
  25   2        while (TI==0);                //等待发送完毕硬件自动把TI=1
  26   2       }
  27   1       TI=0;
  28   1      }
*** WARNING C280 IN LINE 18 OF MODEMZJ.C: 'buf': unreferenced local variable
  29          /****************************************************************************************
  30          **数据接收子函数void datarec(unchar *recbuf)                                           **
  31          **commbuf[]={n,data1,data2,...}                                                        **
  32          **n--命令字节数,data--AT命令的ASCII码                                                 **
  33          ****************************************************************************************/
  34          void datarec(uchar *recbuf)
  35          {
  36   1       uchar i,j;
  37   1       i=*(recbuf);
  38   1       for (j=1;j<(i+1);j++)
  39   1       {
  40   2        RI=0;
  41   2        while (RI==0);                //等待接收完毕时系统自动把RI=1
  42   2        *(recbuf+j)=SBUF;             //recebuf第一格始终无内容?SBUF内容是送到recebuf+j开始的????
  43   2       }
  44   1       RI=0;
  45   1      }
  46          
  47          /****************************************************************************************
  48          **MODEM链接子函数void conn()                                                           **
  49          **数据接受数组recbuf[16];数据发送数组trbuf[16];呼叫号码tel[]                           **
  50          ****************************************************************************************/
  51          void conn()
  52          {
  53   1       uchar buf[30];
  54   1       uchar connbuf[18];
C51 COMPILER V7.09   MODEMZJ                                                               10/28/2004 16:09:18 PAGE 2   

  55   1       uchar i;
  56   1       unsigned int j;
  57   1       bit flag;
  58   1       SCON=0x50;             //0101 0000 (SM1=1, 8位UART,可变波特率, REN=1 UART接收允许)
  59   1       SP=0x60;               //堆栈指针地址
  60   1       TMOD=0x20;             //0010 0000 (T1M1=1,T1M0=0, 方式2:自动重装载的8位计数器/定时器)
  61   1       TL1=0xf4;
  62   1       TH1=0xf4;
  63   1       ES=1;                  //UART/UART0中断允许位(1,允许RI/TI标志为)
  64   1       EA=0;                  //中断总允许位(0,禁止所有中断)
  65   1       TR1=1;                 //定时器1的计数脉冲
  66   1       RI=0;
  67   1       TI=0;
  68   1      
  69   1       
  70   1       /*********把ATF发送, 并关掉回显**************/
  71   1       L1:
  72   1       connbuf[0]=6;          //命令串字节数
  73   1       connbuf[1]='A';
  74   1       connbuf[2]='T';
  75   1       connbuf[3]='F';        //设定初始值
  76   1       connbuf[4]='E';        //默认参数=0 不回显
  77   1       connbuf[5]=0x0a;       //10换行
  78   1       connbuf[6]=0x0d;       //13回车 (表示结束)
  79   1       atsend(&connbuf[0]);
  80   1       /*******接收发送完后的返回码**************************/
  81   1       for (i=0;i<8;i++)
  82   1       {
  83   2       while(RI==0);
  84   2       buf[i]=SBUF;
  85   2       RI=0;
  86   2       }
  87   1      /***************判断返回码是否为OK,为OK时拨电话号码,否则继续发送以上的AT命令********/
  88   1       flag=0x00;
  89   1        for (i=0;i<0x08;i++)
  90   1       {
  91   2        if(buf[i]==0x4f)//"o"
  92   2        {
  93   3         if(buf[i+1]==0x4b)//"k"
  94   3         {flag=1;}
  95   3        }
  96   2       }
  97   1       for (j=0;j<0xffff;j++);        //循环65535 --> 2ms?
  98   1       if (!flag)
  99   1       {
 100   2        goto L1;
 101   2       }
 102   1      /*****************拨电话***********/
 103   1      L2:
 104   1       connbuf[0]=tel[0]+0x08;
 105   1       connbuf[1]='A';
 106   1       connbuf[2]='T';
 107   1       connbuf[3]='X';                //呼叫进程
 108   1       connbuf[4]='4';                //检测忙信号和拨号音,当进行话线连接时,回码显示话线数据速率。
 109   1       connbuf[5]='D';                //拨号
 110   1       connbuf[6]='T';                //音频拨号
 111   1       for(i=0;i<tel[0];i++)
 112   1       {
 113   2       connbuf[i+7]=tel[i+1];
 114   2       }
 115   1       connbuf[i+7]=0x0a;     //10换行
 116   1       connbuf[i+8]=0x0d;     //13回车 (表示结束)
C51 COMPILER V7.09   MODEMZJ                                                               10/28/2004 16:09:18 PAGE 3   

 117   1       atsend(&connbuf[0]);
 118   1       /************接收拨完号后的返回 码************/
 119   1       flag=0;
 120   1       for (i=0;i<17;i++)
 121   1       {
 122   2       while(RI==0);
 123   2       buf[i]=SBUF;
 124   2       RI=0;
 125   2       }
 126   1       /*********** 接收拨完号后的返回 码是否为CONNECT 2400 ,是,发送数据,否则再拨号 ************/
 127   1       for (i=0;i<17;i++)
 128   1       {
 129   2        if(buf[i]==0x43)//"c"
 130   2        {
 131   3         if(buf[i+1]==0x4f)//"o"
 132   3         {flag=1;}
 133   3        }
 134   2       }
 135   1       for (i=0;i<0x21;i++)       /*delay 30ms*/
 136   1       {
 137   2       for (j=0;j<0xffff;j++);        //循环65535 --> 2ms?
 138   2       }
 139   1       if (!flag)
 140   1       {
 141   2        goto L2;
 142   2       }
 143   1       atsend(&trbuf[0]);
 144   1       /*datarec(&recbuf[0]);*/
 145   1      
 146   1       connbuf[0]=0x03;
 147   1       connbuf[1]='+';
 148   1       connbuf[2]='+';
 149   1       connbuf[3]='+';
 150   1       atsend(&connbuf[0]);
 151   1       connbuf[0]=0x06;
 152   1       connbuf[1]='A';
 153   1       connbuf[2]='T';
 154   1       connbuf[3]='H';
 155   1       connbuf[4]='0';
 156   1       connbuf[5]=0X0a;
 157   1       connbuf[6]=0x0d;
 158   1       atsend(&connbuf[0]);
 159   1       P1_2=0;
 160   1       P1_1=1;
 161   1       _nop_();
 162   1      }
 163          
 164          /****************************************************************************************
 165          **实验主程序, 被叫号码“2083”,发送Yuefame字符串

⌨️ 快捷键说明

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