📄 modemzj.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 + -