久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7936|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

[求助]串口發(fā)送問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:25357 發(fā)表于 2010-8-15 11:34 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式

寫了個(gè)TC35的程序,但是,不知道為什么,每次重啟的時(shí)候,第一次發(fā)送的數(shù)據(jù)會不完整
的?請問這是什么原因啊???


#include<reg52.h> 
#define uint unsigned int
#define uchar unsigned char
//sfr WDT_CONTR=0xe1; //看門狗寄存器
uchar i_TC35_RECE;

uchar i_receive,

  TC35_RE[90],   //???  為什么90不能設(shè)定得100呢??????
   //查過有關(guān)資料后終于明白了,原來是變量類型沒有設(shè)置,data idata pdata code
//xdata這些可不能忽略,因?yàn)橘Y源是有限的,超出了就不能編譯了。

  TC35_MAX,
   i_TC35;


uchar code CMGR[]="AT+CMGR=1"; //讀第一條短信
uchar code CMGD[]="AT+CMGD=1";  //刪除第一條短信
uchar code ORDER[]="ARMERS";   //六位用戶身份

void delay(uint i)
{uint i_delay,j_delay;
for(i_delay=0;i_delay<i;i_delay++)
{for(j_delay=0;j_delay<100;j_delay++)
{;}}
} 

void init_serialcom() 
   { 
       SCON = 0x50 ;  //SCON: serail mode 1, 8-bit UART, enable ucvr   
                         //UART為模式1,8位數(shù)據(jù),允許接收
          TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload             
                         //定時(shí)器1為模式2,8位自動重裝
          PCON |= 0x80 ; //SMOD=1; 
          TH1 = 0xFF ;
    TL1=0xFF;   //Baud:115200 fosc="22.1184MHz 
          IE |= 0x90 ;     //Enable Serial Interrupt 
          TR1 = 1 ;       // timer 1 run 
          TI=1; 
          
       } 
          
 

//向串口發(fā)送-個(gè)ASCII
void SendASC(uchar ASC)
{
  SBUF=ASC;
  while (TI== 0); 
 TI= 0 ; 
}

//發(fā)送命令到TC35
void SendToTc35(uchar*p,uchar Len)
{
while(Len--)
{
    SendASC(*p++);
  }
}


//串口接收中斷函數(shù) 
void serial () interrupt 4 using 3
{  
    if (RI) 
          {  
        RI = 0 ; 
        i_receive=SBUF;
        TC35_RE[i_TC35_RECE++]=i_receive;
          // i_TC35_RECE++;
        if(i_TC35_RECE>89) i_TC35_RECE=89;
             if(i_TC35_RECE>TC35_MAX){TC35_MAX=i_TC35_RECE;}
              }
} 

 
void  CRL_CMGR()   // 讀第一條短信息
{
 SendToTc35(CMGR,9);
 SendASC(0x0D);
 SendASC(0x0D);
 SendASC(0x0A);
 }

void  CRL_CMGD()   // 刪除第一條短信息  
{
 SendToTc35(CMGD,9);
 SendASC(0x0D);
 SendASC(0x0D);
 SendASC(0x0A);
 }

void CLEAR_DAT()    //數(shù)據(jù)清零
{
   for(i_TC35=0;i_TC35<=TC35_MAX;i_TC35++)
    {
    TC35_RE[i_TC35]=0;
 }
    i_TC35_RECE=0;
    TC35_MAX=0;
}
 
void main()
{     
   uchar oders;
   init_serialcom();
   delay(1000); 

    CRL_CMGR() ;//進(jìn)入循環(huán)前,我向串口發(fā)送兩條讀短信的指令,就第一條會缺少一個(gè)‘T’
 CRL_CMGR() ;

 

//  WDT_CONTR=0x37; 
   CLEAR_DAT();  //數(shù)據(jù)清零 

   while(1)
   { 

  if((TC35_RE[2]=='+')&&(TC35_RE[3]=='C')&&(TC35_RE[4]=='M')&&
  (TC35_RE[5]=='T')&&(TC35_RE[6]=='I'))

   {        
     //CLEAR_DAT();  //數(shù)據(jù)清零 
     CRL_CMGR() ;  // 讀第一條短信息
  delay(5000);
 // CLEAR_DAT();  //數(shù)據(jù)清零
  CRL_CMGR() ;  
  delay(5000);
 if((TC35_RE[72]==ORDER[0])&&(TC35_RE[73]==ORDER[1])&&(TC35_RE[74]==ORDER[2])&&(TC35_RE[75]==ORDER[3])&&(TC35_RE[76]==ORDER[4])&&(TC35_RE[77]==ORDER[5]))   { 
      oders=TC35_RE[78];
   CLEAR_DAT();
       
   }else   
    {
      oders=0;
      CLEAR_DAT();
    }   

 switch(oders)
 {
   case 0: P1=0x00; break;
   case 1: P1=0x01; break;
   case 2: P1=0x03; break;
   case 3: P1=0x07; break;
   case 4: P1=0x0f; break;
   case 5: P1=0x1f; break;
   case 6: P1=0x3f; break;
   case 7: P1=0x7f; break;
   case 8: P1=0xff; break;  
 }

     
  CRL_CMGD() ;  // 刪除第一條短信息 
  delay(2000);
  CLEAR_DAT();  //數(shù)據(jù)清零
  delay(2000);
    }else
  {  
  //  WDT_CONTR=0x37; //喂狗
  //  delay(5000);
 
  }
  
  
   }
 }

 

 


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:25357 發(fā)表于 2010-8-15 11:50 | 只看該作者

多多指教!!!

 

[此貼子已經(jīng)被作者于2010-8-15 12:12:58編輯過]
回復(fù)

使用道具 舉報(bào)

板凳
ID:25357 發(fā)表于 2010-8-15 22:33 | 只看該作者

發(fā)送的問題還是接收的問題???

 

回復(fù)

使用道具 舉報(bào)

地板
ID:25357 發(fā)表于 2010-8-16 10:52 | 只看該作者

哈哈,不管它有沒有問題了,終于把程序?qū)懲辏覝y試成功!

第一次發(fā)送數(shù)據(jù)會出現(xiàn)問題,雖然沒有解決,但是可以先發(fā)送測試的。第二次發(fā)送就沒問題了

以下是我測試成功的代碼,有解決方案的話,不妨說說。。。謝謝


1 /*********************************************************************** 
2 |                                                                     | 
3 | TC35 GSM模塊遠(yuǎn)程控制 ver 1.0             | 
4 |                                                                     |     
5 | CopyRight@ GDOU by Edward 2010.08           | 
6 |                                                                     | 
7 | All Rights Reserved                       | 
8 |                                                                     | 
9 | QQ:304467973                             | 
10 |                                                                     | 
11 | E-Mail:magicedward@qq.com                      | 
12 |                                                                 |     
13 /************************************************************************/ 
14 #include<reg52.h> 
15 #define uint unsigned int 
16 #define uchar unsigned char 
17 //sfr WDT_CONTR=0xe1; //看門狗寄存器 
18 uchar i_TC35_RECE; 
19 
20 uchar i_receive, 
21 TC35_RE[90],     //儲存串口返回?cái)?shù)據(jù) 
22      TC35_MAX, 
23      i_TC35; 
24 
25 
26 /*     初始化 用AT&W 寫入EEPROM 一般先在電腦前設(shè)置 
27 uchar code IPR[]="AT+IPR=115200"; //波特率 115200 
28 uchar code CMGF[]="AT+CMGF=1"; //短信格式為 TEXT 模式 
29 uchar code CSCA[]="AT+CSCA=+86";     //設(shè)置中心號碼 
30 uchar code CTNUM[]="13800759500";    //湛江移動中心號碼 +8613800759500 
31 uchar code CNMI[]="AT+CNMI=1,1,0,0,1"; //自動接收短信 
32 */ 
33 uchar code CMGS[]="AT+CMGS=";     //發(fā)短信指令 
34 uchar idata SNUM[]="13659717684"; //接收方號碼 //用戶號碼 
35 uchar code CMGR[]="AT+CMGR=1"; //讀第一條短信 
36 uchar code CMGD[]="AT+CMGD=1"; //刪除第一條短信 
37 //修改用戶號碼及身份 先把它們存于電話本 
38 //指令 AT+CPBW=1,+9952013659717684,145,######ARMERS     
39 // 指令 11位用戶密碼 六位身份 
40 uchar idata ORDER[]="ARMERS"; //默認(rèn)六位用戶身份 
41 uchar code NEW_MSM[]="+CMTI:";     //新信息標(biāo)志 
42 uchar code CPBR[]="AT+CPBR=1"; //讀電話本 把用戶身份/主人號碼儲存于此 
43 uchar code MSM[]="I LOVE MIRACLE. MISSING YOU!"; //要發(fā)送的信息內(nèi)容 
44 uchar code RFLAG1[]="+99520"; //讀電話本 返回信息標(biāo)志 
45 uchar code RFLAG2[]="######"; 
46 uchar code AT[]="AT"; //AT測試指令 
47 //uchar code OK[]="OK"; //成功返回信息 
48 
49 void delay(uint i)             //延時(shí)函數(shù) 
50 {uint i_delay,j_delay; 
51 for(i_delay=0;i_delay<i;i_delay++) 
52 {for(j_delay=0;j_delay<100;j_delay++) 
53 {;}} 
54 } 
55 
56 void init_serialcom()     //本程序采用22.1184M晶振 其他自行更改 
57 { 
58 SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr 
59 //UART為模式1,8位數(shù)據(jù),允許接收 
60 TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload 
61 //定時(shí)器1為模式2,8位自動重裝 
62 PCON |= 0x80 ; //SMOD=1; 
63 TH1 = 0xFF ; 
64          TL1=0xFF; //Baud:115200 fosc="22.1184MHz 
65 IE |= 0x90 ; //Enable Serial Interrupt 
66 TR1 = 1 ; // timer 1 run 
67 TI=1; 
68 
69 } 
70 
71 
72 
73 //向串口發(fā)送-個(gè)ASCII 
74 void SendASC(uchar ASC) 
75 { 
76 SBUF=ASC; 
77 while (TI== 0); 
78     TI= 0 ; 
79 } 
80 
81 //發(fā)送命令到TC35 
82 void SendToTc35(uchar*p,uchar Len) 
83 { 
84 while(Len--) 
85 { 
86 SendASC(*p++); 
87 } 
88 } 
89 //串口接收中斷函數(shù) 
90 void serial () interrupt 4 using 3 
91 {      
92 if (RI) 
93 { 
94 RI = 0 ; 
95 i_receive=SBUF; 
96 TC35_RE[i_TC35_RECE++]=i_receive; 
97 // i_TC35_RECE++; 
98          if(i_TC35_RECE>89) i_TC35_RECE=89; 
99 if(i_TC35_RECE>TC35_MAX){TC35_MAX=i_TC35_RECE;} 
100 } 
101 } 
102 
103 
104 /*     初始化函數(shù) 用AT&W 指令鎖定后 不需再設(shè)置 
105 
106 void CRL_IPR()     //設(shè)定波特率為 115200 
107 { 
108 SendToTc35(IPR,13); 
109 SendASC(0x0D); 
110 SendASC(0x0D); 
111 SendASC(0x0A); 
112 } 
113 
114 void CRL_TEXT() // 設(shè)定短信格式為 TEXT 
115 { 
116 SendToTc35(CMGF,9); 
117 SendASC(0x0D); 
118 SendASC(0x0D); 
119 SendASC(0x0A); 
120 } 
121 
122 void CRL_CSCA() // 設(shè)定中心號碼 
123 { 
124 SendToTc35(CSCA,11); 
125 SendToTc35(CTNUM,11);     //11位中心號碼 
126 SendASC(0x0D); 
127 SendASC(0x0D); 
128 SendASC(0x0A); 
129 } 
130 
131 
132 
133 void CRL_CNMI() // 設(shè)定為自動接收短信息 
134 { 
135 SendToTc35(CNMI,17); 
136 SendASC(0x0D); 
137 SendASC(0x0D); 
138 SendASC(0x0A); 
139 } 
140 */ 
141 
142 void AT_TEST()     //AT 測試 
143 { 
144 SendToTc35(AT,2); 
145 SendASC(0x0D); 
146 SendASC(0x0D); 
147 SendASC(0x0A); 
148 } 
149 
150 void SENT_MSM()             //向主人發(fā)送信息 
151 { 
152 SendToTc35(CMGS,8); 
153 SendToTc35(SNUM,11); 
154 SendASC(0x0D); 
155 SendASC(0x0D); 
156 SendASC(0x0A); 
157 delay(2000); 
158 SendToTc35(MSM,28); 
159 SendASC(0x0D); 
160 SendASC(0x0D); 
161 SendASC(0x0A); 
162 delay(2000); 
163 SendASC(0x1A); 
164 delay(2000); 
165 } 
166 
167 void RE_BOOK()            //讀取電話本 
168 { 
169 SendToTc35(CPBR,9); 
170 SendASC(0x0D); 
171 SendASC(0x0D); 
172 SendASC(0x0A); 
173 } 
174 
175 
176 
177 void CRL_CMGR() // 讀第一條短信息 
178 { 
179 SendToTc35(CMGR,9); 
180 SendASC(0x0D); 
181 SendASC(0x0D); 
182 SendASC(0x0A); 
183 } 
184 
185 void CRL_CMGD() // 刪除第一條短信息 
186 { 
187 SendToTc35(CMGD,9); 
188 SendASC(0x0D); 
189 SendASC(0x0D); 
190 SendASC(0x0A); 
191 } 
192 
193 void CLEAR_DAT()     //數(shù)據(jù)清零 
194 { 
195 for(i_TC35=0;i_TC35<=TC35_MAX;i_TC35++) 
196 { 
197 TC35_RE[i_TC35]=0; 
198     } 
199 i_TC35_RECE=0; 
200 TC35_MAX=0; 
201 } 
202 
203 uchar RE_BF(uchar b,uchar TC35_RE[],uchar ORDER[])         //利用BF算法 匹配用戶身份 
204     { 
205     uchar bf1,bf2 ; 
206      bf1=b; bf2=0; 
207      while(bf1<TC35_MAX && bf2<6) 
208      { 
209      if(TC35_RE[bf1]==ORDER[bf2]) 
210      { 
211      bf1++; 
212          bf2++; 
213      } else 
214      { 
215          bf1=bf1-bf2+1; 
216          bf2=0; 
217         } 
218      }if(bf2>5) return bf1; //返回操作指令位置 
219      else return 0; 
220      } 
221 void main() 
222 { 
223 uchar num,num1,orders; 
224 init_serialcom(); 
225 delay(500); 
226 // WDT_CONTR=0x37; 
227 AT_TEST(); //AT測試 用于消除首次發(fā)送錯(cuò)誤 
228 delay(1000); 
229 CLEAR_DAT(); 
230 RE_BOOK();//獲取用戶號碼及身份 
231 delay(6000);        //確保讀取身份 
232 
233 if(num1=RE_BF(15,TC35_RE,RFLAG1)) 
234      {      
235      for(num=0;num<11;num++) 
236      { 
237          SNUM[num]=TC35_RE[num1++];        //更新用戶號碼 
238      } 
239              
240      if(num1=RE_BF(30,TC35_RE,RFLAG2)) 
241          { 
242         for(num=0;num<6;num++) 
243         { 
244          ORDER[num]=TC35_RE[num1++];              //更新用戶身份 
245         }     
246      }     
247      
248      }         
249 
250 CLEAR_DAT(); //數(shù)據(jù)清零 
251      
252 while(1) 
253 { 
254      
255 while(RE_BF(0,TC35_RE,NEW_MSM)) 
256 
257 {      
258 CLEAR_DAT(); //數(shù)據(jù)清零     
259      CRL_CMGR() ; // 讀第一條短信息 
260      delay(1000); 
261 CLEAR_DAT(); //數(shù)據(jù)清零 
262      CRL_CMGR() ; 
263      delay(1000); 
264           
265      orders=TC35_RE[RE_BF(60,TC35_RE,ORDER)]; 
266 // SendASC(orders); 
267      if(orders=='8') 
268      { 
269      SENT_MSM(); 
270      delay(10000);     //確保發(fā)送成功且返回 
271      } 
272 
273     switch(orders)                 //遠(yuǎn)程控制 自行更改 
274     { 
275      case '1': P1=0x01; break; 
276      case '2': P1=0x03; break; 
277      case '3': P1=0x07; break; 
278      case '4': P1=0x0f; break; 
279      case '5': P1=0x1f; break; 
280      case '6': P1=0x3f; break; 
281      case '7': P1=0x7f; break; 
282      case '8': P1=0xff; break;         
283      default: P1=0x00;break;     
284     } 
285      
286 orders=0; 
287      CRL_CMGD() ; // 刪除第一條短信息 
288      delay(1000); 
289      CLEAR_DAT(); //數(shù)據(jù)清零 
290      
291 }      
292 } 
293 } 
294 
295 [/code]
回復(fù)

使用道具 舉報(bào)

5#
ID:1 發(fā)表于 2010-8-16 12:58 | 只看該作者

只有第一次發(fā)送有問題蠻奇怪的,可惜我沒tc35i,要不可幫你試試了

回復(fù)

使用道具 舉報(bào)

6#
ID:25357 發(fā)表于 2010-8-16 14:09 | 只看該作者
以下是引用admin在2010-8-16 12:58:31的發(fā)言:

只有第一次發(fā)送有問題蠻奇怪的,可惜我沒tc35i,要不可幫你試試了

問題并不是只存在TC35中。。。。

在51hei里,用你們的串口與單片機(jī)通訊那個(gè)程序測試也一樣有這樣的問題。

回復(fù)

使用道具 舉報(bào)

7#
ID:1 發(fā)表于 2010-8-16 15:14 | 只看該作者

那我晚上仔細(xì)研究下這個(gè)問題

回復(fù)

使用道具 舉報(bào)

8#
ID:1 發(fā)表于 2010-8-18 00:06 | 只看該作者

樓主乃強(qiáng)人,果然是這個(gè)問題,繼續(xù)共享些有用的程序給大家啊

回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 免费国产精品久久久久久 | 免费三级网站 | 欧美激情久久久 | 精品久久香蕉国产线看观看亚洲 | 国产免费观看一级国产 | 一级毛片在线视频 | 日本不卡免费新一二三区 | 亚洲成人福利 | 国产一区电影 | 午夜精 | 免费在线黄色av | 色秀网站 | 中文字幕乱码一区二区三区 | 97超碰在线免费 | 成人国产在线视频 | 每日更新av | 青青久草 | 亚洲天堂影院 | 九九九久久国产免费 | 91精品国产91久久久久久不卞 | 手机日韩 | 久久精品99国产精品日本 | 日本一区二区高清视频 | 亚洲一区二区三区四区视频 | 欧美舔穴 | www久久av| 成人黄色av| 国产91久久精品一区二区 | 中文字幕亚洲一区二区三区 | 婷婷福利视频导航 | 国产精品色 | 欧洲成人免费视频 | 久久久久久免费观看 | a在线视频 | 国产成人综合一区二区三区 | 91久久久久 | 操久久久 | 美女亚洲一区 | 成人欧美一区二区 | 国产资源在线观看 | 国产在线播 |