?? modemzj.lst
字號(hào):
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命令發(fā)送子函數(shù)void atsend(unchar *commbuf) **
13 **commbuf[]={n,data1,data2,...} **
14 **n--命令字節(jié)數(shù),data--AT命令的ASCII碼 **
15 ****************************************************************************************/
16 void atsend(uchar *commbuf)
17 {
18 1 uchar i,j,a,buf[8];
19 1 i=*(commbuf); //首地址內(nèi)容為報(bào)文長(zhǎng)度
20 1 for (j=1;j<(i+1);j++) //循環(huán)到報(bào)文結(jié)束
21 1 {
22 2 TI=0;
23 2 a=*(commbuf+j); //commbuf保存地址+j的偏移量,*讀取計(jì)算結(jié)果所在地址內(nèi)容
24 2 SBUF=*(commbuf+j);
25 2 while (TI==0); //等待發(fā)送完畢硬件自動(dòng)把TI=1
26 2 }
27 1 TI=0;
28 1 }
*** WARNING C280 IN LINE 18 OF MODEMZJ.C: 'buf': unreferenced local variable
29 /****************************************************************************************
30 **數(shù)據(jù)接收子函數(shù)void datarec(unchar *recbuf) **
31 **commbuf[]={n,data1,data2,...} **
32 **n--命令字節(jié)數(shù),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); //等待接收完畢時(shí)系統(tǒng)自動(dòng)把RI=1
42 2 *(recbuf+j)=SBUF; //recebuf第一格始終無(wú)內(nèi)容?SBUF內(nèi)容是送到recebuf+j開(kāi)始的????
43 2 }
44 1 RI=0;
45 1 }
46
47 /****************************************************************************************
48 **MODEM鏈接子函數(shù)void conn() **
49 **數(shù)據(jù)接受數(shù)組recbuf[16];數(shù)據(jù)發(fā)送數(shù)組trbuf[16];呼叫號(hào)碼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:自動(dòng)重裝載的8位計(jì)數(shù)器/定時(shí)器)
61 1 TL1=0xf4;
62 1 TH1=0xf4;
63 1 ES=1; //UART/UART0中斷允許位(1,允許RI/TI標(biāo)志為)
64 1 EA=0; //中斷總允許位(0,禁止所有中斷)
65 1 TR1=1; //定時(shí)器1的計(jì)數(shù)脈沖
66 1 RI=0;
67 1 TI=0;
68 1
69 1
70 1 /*********把ATF發(fā)送, 并關(guān)掉回顯**************/
71 1 L1:
72 1 connbuf[0]=6; //命令串字節(jié)數(shù)
73 1 connbuf[1]='A';
74 1 connbuf[2]='T';
75 1 connbuf[3]='F'; //設(shè)定初始值
76 1 connbuf[4]='E'; //默認(rèn)參數(shù)=0 不回顯
77 1 connbuf[5]=0x0a; //10換行
78 1 connbuf[6]=0x0d; //13回車(chē) (表示結(jié)束)
79 1 atsend(&connbuf[0]);
80 1 /*******接收發(fā)送完后的返回碼**************************/
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時(shí)撥電話(huà)號(hào)碼,否則繼續(xù)發(fā)送以上的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++); //循環(huán)65535 --> 2ms?
98 1 if (!flag)
99 1 {
100 2 goto L1;
101 2 }
102 1 /*****************撥電話(huà)***********/
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'; //呼叫進(jìn)程
108 1 connbuf[4]='4'; //檢測(cè)忙信號(hào)和撥號(hào)音,當(dāng)進(jìn)行話(huà)線連接時(shí),回碼顯示話(huà)線數(shù)據(jù)速率。
109 1 connbuf[5]='D'; //撥號(hào)
110 1 connbuf[6]='T'; //音頻撥號(hào)
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回車(chē) (表示結(jié)束)
C51 COMPILER V7.09 MODEMZJ 10/28/2004 16:09:18 PAGE 3
117 1 atsend(&connbuf[0]);
118 1 /************接收撥完號(hào)后的返回 碼************/
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 /*********** 接收撥完號(hào)后的返回 碼是否為CONNECT 2400 ,是,發(fā)送數(shù)據(jù),否則再撥號(hào) ************/
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++); //循環(huán)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 **實(shí)驗(yàn)主程序, 被叫號(hào)碼“2083”,發(fā)送Yuefame字符串
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -