找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求助大神,單片機(jī)接收不到sim800a的消息。

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:865103 發(fā)表于 2020-12-21 22:19 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
單片機(jī)是stc89c52rc的最小系統(tǒng),代碼在下面:
  1. #include <reg51.h>
  2. #include <string.H>
  3. #include <intrins.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int       
  6. unsigned int  rec_data_len_uart=0;    //標(biāo)記Buffer_Uart0接收數(shù)組
  7. unsigned char idata Buffer_Uart0_Rec[25]={0};                 //Uart0中斷接收數(shù)組
  8. uint flag=0;
  9.    
  10. void SerialInti()//初始化程序(必須使用,否則無法收發(fā))
  11. {
  12.         TMOD=0x20;//定時(shí)器1操作模式2:8位自動(dòng)重載定時(shí)器

  13.        
  14.         TH1=0xfd;//裝入初值,波特率9600
  15.         TL1=0xfd;

  16.         TR1=1;//打開定時(shí)器
  17.         SM0=0;//設(shè)置串行通訊工作模式,(10為一部發(fā)送,波特率可變,由定時(shí)器1的溢出率控制)
  18.         SM1=1;//(同上)在此模式下,定時(shí)器溢出一次就發(fā)送一個(gè)位的數(shù)據(jù)
  19.         REN=1;//串行接收允許位(要先設(shè)置sm0sm1再開串行允許)
  20.         EA=1;//開總中斷
  21.         ES=1;//開串行口中斷       
  22. }

  23. /*串行通訊中斷,收發(fā)完成將進(jìn)入該中斷*/
  24. void Serial_interrupt() interrupt 4
  25. {
  26.         if(RI)
  27.         {
  28.                 unsigned char temp_rec_data_uart0;       
  29.                 temp_rec_data_uart0 = SBUF;//讀取接收數(shù)據(jù)               
  30.                 RI=0;//接收中斷信號(hào)清零,表示將繼續(xù)接收                       
  31.                 Buffer_Uart0_Rec[rec_data_len_uart]=temp_rec_data_uart0;        //接收數(shù)據(jù)
  32.                 rec_data_len_uart++;
  33.                 if(rec_data_len_uart>24)
  34.                 {
  35.                         rec_data_len_uart=0;         //從頭開始接收數(shù)據(jù)
  36.                 }       
  37.   }
  38. }
  39. void Uart1Send(uchar c)
  40. {
  41.         SBUF=c;
  42.         while(!TI);//等待發(fā)送完成信號(hào)(TI=1)出現(xiàn)
  43.         TI=0;       
  44. }
  45. //串行口連續(xù)發(fā)送char型數(shù)組,遇到終止號(hào)/0將停止
  46. void Uart1Sends(uchar *str)
  47. {
  48.         while(*str!='\0')
  49.         {
  50.                 SBUF=*str;
  51.                 while(!TI);//等待發(fā)送完成信號(hào)(TI=1)出現(xiàn)
  52.                 TI=0;
  53.                 str++;
  54.         }
  55. }
  56. //延時(shí)函數(shù)大概是1s鐘,不過延時(shí)大的話不準(zhǔn)...
  57. void DelaySec(int sec)
  58. {
  59.         uint i , j= 0;
  60.         for(i=0; i<sec; i++)
  61.         {
  62.                 for(j=0; j<65535; j++)
  63.                 {       
  64.                 }
  65.         }
  66. }
  67. void clear_rec_data()
  68. {
  69.         uchar i;
  70.         for(i=0;i<strlen(Buffer_Uart0_Rec);i++)
  71.         {
  72.                 Buffer_Uart0_Rec[i]='\0';
  73.        
  74.         }
  75.         rec_data_len_uart=0;
  76. }

  77. uchar hand(uchar *ptr)
  78. {
  79.         if(strstr(Buffer_Uart0_Rec,ptr)!=NULL)
  80.                 return 1;
  81.         else
  82.                 return 0;
  83. }

  84. void main()
  85. {
  86.         uchar i = 0;
  87.         SerialInti();
  88.         DelaySec(1);
  89.         Uart1Sends("AT\r\n\0");
  90.         while(!hand("OK"))
  91.         {
  92.                 clear_rec_data();
  93.                 Uart1Sends("AT\r\n\0");
  94.                 DelaySec(1);
  95.         }
  96.         Uart1Sends("AT+CSCS=\"GSM\"\r\n\0");
  97.         DelaySec(1);//延時(shí)大約3秒
  98.         Uart1Sends("AT+CMGF=1\r\n\0");
  99.         DelaySec(1);//延時(shí)3秒
  100.         Uart1Sends("AT+CSCA?\r\n\0");
  101.         DelaySec(1);//延時(shí)3秒
  102.         Uart1Sends("AT+CSMP=17,167,0,241\r\n\0");
  103.         DelaySec(1);//延時(shí)3秒
  104.         Uart1Sends("AT+CMGS=\"+86153xxxxxxxx\"\r\n\0");//電話號(hào)
  105.         DelaySec(1);//延時(shí)3秒
  106.         Uart1Sends("HELLO 123\0");//修改短信內(nèi)容,短信內(nèi)容可為英文和數(shù)字
  107.         DelaySec(1);//延時(shí)3秒
  108.         Uart1Send(0x1a);

  109. }
復(fù)制代碼
出現(xiàn)的問題是單片機(jī)發(fā)送AT指令但是讀取不到sim800a模塊返回的ok消息,但是在串口調(diào)試助手里面輸入OK是可以進(jìn)入下面的步驟的。
sim800a的電源是由一根5v轉(zhuǎn)12v的現(xiàn)供給的,單片機(jī)通過microusb連接電腦,sim800a的串口和接地還有vmcu連接到單片機(jī)上面。



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

使用道具 舉報(bào)

沙發(fā)
ID:865103 發(fā)表于 2020-12-22 08:25 | 只看該作者
單片接在普中單片機(jī)開發(fā)板上面拔掉vmcu線可以使用,但是接在我的貼片最小系統(tǒng)上面拔掉哪根線都沒用。
回復(fù)

使用道具 舉報(bào)

板凳
ID:865103 發(fā)表于 2020-12-22 09:06 | 只看該作者
可能是電源問題,還在查找
回復(fù)

使用道具 舉報(bào)

地板
ID:865103 發(fā)表于 2020-12-22 10:05 | 只看該作者
sim800換5v的電源也還是不行
回復(fù)

使用道具 舉報(bào)

5#
ID:369312 發(fā)表于 2020-12-22 10:46 | 只看該作者
先用串口工具試試是不是SIM800的問題
回復(fù)

使用道具 舉報(bào)

6#
ID:865103 發(fā)表于 2020-12-22 10:50 | 只看該作者
君莫笑1 發(fā)表于 2020-12-22 10:46
先用串口工具試試是不是SIM800的問題

可以用單片機(jī)控制發(fā)短信,但是就是接收數(shù)據(jù)不正常,使用直插的單片機(jī),拔一拔線再插線可以正常收sim800的消息,單獨(dú)用電腦連sim800可以正常收發(fā)at指令
回復(fù)

使用道具 舉報(bào)

7#
ID:865103 發(fā)表于 2020-12-22 10:52 | 只看該作者
君莫笑1 發(fā)表于 2020-12-22 10:46
先用串口工具試試是不是SIM800的問題

拔線是先拔掉下面兩根vmcu和接地的線,再把最下面的232的接線的接地插到單片機(jī)上就可以正常使用了
回復(fù)

使用道具 舉報(bào)

8#
ID:865103 發(fā)表于 2020-12-22 12:22 | 只看該作者
在貼片的stc89c52rc上面怎么搞都成功不了
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表