找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2325|回复: 7
打印 上一主题 下一主题
收起左侧

求助大神,单片机接收不到sim800a的消息。

[复制链接]
跳转到指定楼层
楼主
单片机是stc89c52rc的最小系统,代码在下面:
  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;    //标记Buffer_Uart0接收数组
  7. unsigned char idata Buffer_Uart0_Rec[25]={0};                 //Uart0中断接收数组
  8. uint flag=0;
  9.    
  10. void SerialInti()//初始化程序(必须使用,否则无法收发)
  11. {
  12.         TMOD=0x20;//定时器1操作模式2:8位自动重载定时器

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

  16.         TR1=1;//打开定时器
  17.         SM0=0;//设置串行通讯工作模式,(10为一部发送,波特率可变,由定时器1的溢出率控制)
  18.         SM1=1;//(同上)在此模式下,定时器溢出一次就发送一个位的数据
  19.         REN=1;//串行接收允许位(要先设置sm0sm1再开串行允许)
  20.         EA=1;//开总中断
  21.         ES=1;//开串行口中断       
  22. }

  23. /*串行通讯中断,收发完成将进入该中断*/
  24. void Serial_interrupt() interrupt 4
  25. {
  26.         if(RI)
  27.         {
  28.                 unsigned char temp_rec_data_uart0;       
  29.                 temp_rec_data_uart0 = SBUF;//读取接收数据               
  30.                 RI=0;//接收中断信号清零,表示将继续接收                       
  31.                 Buffer_Uart0_Rec[rec_data_len_uart]=temp_rec_data_uart0;        //接收数据
  32.                 rec_data_len_uart++;
  33.                 if(rec_data_len_uart>24)
  34.                 {
  35.                         rec_data_len_uart=0;         //从头开始接收数据
  36.                 }       
  37.   }
  38. }
  39. void Uart1Send(uchar c)
  40. {
  41.         SBUF=c;
  42.         while(!TI);//等待发送完成信号(TI=1)出现
  43.         TI=0;       
  44. }
  45. //串行口连续发送char型数组,遇到终止号/0将停止
  46. void Uart1Sends(uchar *str)
  47. {
  48.         while(*str!='\0')
  49.         {
  50.                 SBUF=*str;
  51.                 while(!TI);//等待发送完成信号(TI=1)出现
  52.                 TI=0;
  53.                 str++;
  54.         }
  55. }
  56. //延时函数大概是1s钟,不过延时大的话不准...
  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);//延时大约3秒
  98.         Uart1Sends("AT+CMGF=1\r\n\0");
  99.         DelaySec(1);//延时3秒
  100.         Uart1Sends("AT+CSCA?\r\n\0");
  101.         DelaySec(1);//延时3秒
  102.         Uart1Sends("AT+CSMP=17,167,0,241\r\n\0");
  103.         DelaySec(1);//延时3秒
  104.         Uart1Sends("AT+CMGS=\"+86153xxxxxxxx\"\r\n\0");//电话号
  105.         DelaySec(1);//延时3秒
  106.         Uart1Sends("HELLO 123\0");//修改短信内容,短信内容可为英文和数字
  107.         DelaySec(1);//延时3秒
  108.         Uart1Send(0x1a);

  109. }
复制代码
出现的问题是单片机发送AT指令但是读取不到sim800a模块返回的ok消息,但是在串口调试助手里面输入OK是可以进入下面的步骤的。
sim800a的电源是由一根5v转12v的现供给的,单片机通过microusb连接电脑,sim800a的串口和接地还有vmcu连接到单片机上面。



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:865103 发表于 2020-12-22 08:25 | 只看该作者
单片接在普中单片机开发板上面拔掉vmcu线可以使用,但是接在我的贴片最小系统上面拔掉哪根线都没用。
回复

使用道具 举报

板凳
ID:865103 发表于 2020-12-22 09:06 | 只看该作者
可能是电源问题,还在查找
回复

使用道具 举报

地板
ID:865103 发表于 2020-12-22 10:05 | 只看该作者
sim800换5v的电源也还是不行
回复

使用道具 举报

5#
ID:369312 发表于 2020-12-22 10:46 | 只看该作者
先用串口工具试试是不是SIM800的问题
回复

使用道具 举报

6#
ID:865103 发表于 2020-12-22 10:50 | 只看该作者
君莫笑1 发表于 2020-12-22 10:46
先用串口工具试试是不是SIM800的问题

可以用单片机控制发短信,但是就是接收数据不正常,使用直插的单片机,拔一拔线再插线可以正常收sim800的消息,单独用电脑连sim800可以正常收发at指令
回复

使用道具 举报

7#
ID:865103 发表于 2020-12-22 10:52 | 只看该作者
君莫笑1 发表于 2020-12-22 10:46
先用串口工具试试是不是SIM800的问题

拔线是先拔掉下面两根vmcu和接地的线,再把最下面的232的接线的接地插到单片机上就可以正常使用了
回复

使用道具 举报

8#
ID:865103 发表于 2020-12-22 12:22 | 只看该作者
在贴片的stc89c52rc上面怎么搞都成功不了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表