查看: 6380|回复: 12

[其他] MCU串口AT操作GPRS模块状态机的划分

[复制链接]
  • TA的每日心情
    开心
    2018-2-12 15:48
  • 签到天数: 47 天

    连续签到: 1 天

    [LV.5]常住居民I

    12

    主题

    425

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1084
    最后登录
    2018-2-12
    发表于 2016-11-22 09:21:38 | 显示全部楼层 |阅读模式
    本帖最后由 lulugl 于 2016-11-25 10:43 编辑

    最近在做串口操作GPRS模块的使用,为了实现多任务,初学状态机。各位大神指点一下AT一条命令的几种状态的划分。
    void GET_CSQ(void)
    {
            static  u32 time;
            static u8 F=0;
            u8 xhqd;
            s8 k,j;
            xhqd=0;
            j=0;

           switch (F)
           {
                  case 0:
                    {
                          CLR_Buf1();//清串口接收
                           SendStr(1,"AT+CSQ\r\n");
                            time=TIM1count;//记录时间 TIM1count为定时器1的记数器                       F=1;
                    }break;
                  case 1:
                    {
                          if((TIM1count-time)>100)//
                          {
                                   //如果到达等待时间
                                F=2;
                           }
                    }break;

                  case 1:
                    {
                           if(strstr(A6BZ.RX_buf,"OK")!=NULL)//判断串口接收里面是不是有OK
                           {
                                    for(k=0;k<ULenth;k++)                              
                                      {
                                    if(A6BZ.RX_buf[k] == ':')
                                    {
                                            if(A6BZ.RX_buf[k+2] >47 && A6BZ.RX_buf[k+2]<58 ) //值为数据
                                            {
                                                    j=A6BZ.RX_buf[k+2]-48;
                                                    if(A6BZ.RX_buf[k+3] >47 && A6BZ.RX_buf[k+3]<58 ) //值为数据
                                            {
                                                    j=j*10;
                                                    j+=(A6BZ.RX_buf[k+2]-48);
                                            }
                                            }
                                            break;
                                       }
                            }
                               if(j==0 ||j==99)
                                {
                                              xhqd=0;
                               }
                                  else if(j>=12) {xhqd=4;}
                                  else if(j>=8 ) {xhqd=3;}
                                 else if(j>=5) {xhqd=2;}
                                 else {xhqd=1;}
                                  A6BZ.A6_XH=xhqd;
                               CLR_Buf1();                       }
                          F=0;
                        }break;

          }
    这个是我后面修改的程序
         
    我知道答案 目前已有12人回答
    不知道大家放假了吗
    回复

    使用道具 举报

  • TA的每日心情
    难过
    2016-11-23 17:49
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    7

    主题

    35

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    205
    最后登录
    1970-1-1
    发表于 2016-11-22 11:37:11 | 显示全部楼层
    不同的命令,根本不同的状态,没统一的。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2017-1-4 08:05
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    85

    主题

    1629

    帖子

    1

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2569

    优秀版主

    最后登录
    2019-3-28
    发表于 2016-11-22 12:06:39 | 显示全部楼层
    我写了一个ESP8266的你可以找找帖子看看,GPRS的正在写,基于SIM800A
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-2-12 15:48
  • 签到天数: 47 天

    连续签到: 1 天

    [LV.5]常住居民I

    12

    主题

    425

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1084
    最后登录
    2018-2-12
     楼主| 发表于 2016-11-23 08:12:00 | 显示全部楼层
    本帖最后由 lulugl 于 2016-11-23 08:13 编辑
    技术范儿 发表于 2016-11-22 12:06
    我写了一个ESP8266的你可以找找帖子看看,GPRS的正在写,基于SIM800A

    谢谢你的指点,没找到,有木有链接给我看下,其实基础功能已经实现,但是多任务处理起来就麻烦,特别是处理AT命令后延时调置的问题如何处理。
    不知道大家放假了吗
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-2-12 15:48
  • 签到天数: 47 天

    连续签到: 1 天

    [LV.5]常住居民I

    12

    主题

    425

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1084
    最后登录
    2018-2-12
     楼主| 发表于 2016-11-23 08:14:54 | 显示全部楼层

    /*******************************************************************************
    * 函数名 : GET_CSQ
    * 描述   : 获取信号强度
    * 输入   :
    * 输出   :
    * 返回   : 信号强度0:RSSI 0或99信号异常 1:RSSI<5 2:5-8 3:8-12 4:>=12
    * 注意   : 20160807
    *******************************************************************************/

    void GET_CSQ(void)
    {
            u32 time;
            u8 xhqd;
            s8 k,j;
            xhqd=0;
            j=0;
            CLR_Buf1();//清串口接收
            SendStr(1,"AT+CSQ\r\n");
            time=TIM1count;
            while(strstr(A6BZ.RX_buf,"OK")==NULL && (TIM1count-time)<10);
            if(strstr(A6BZ.RX_buf,"OK")!=NULL)
            {
                    for(k=0;k<ULenth;k++)                             
                {
                                    if(A6BZ.RX_buf[k] == ':')
                                    {
                                            if(A6BZ.RX_buf[k+2] >47 && A6BZ.RX_buf[k+2]<58 ) //值为数据
                                            {
                                                    j=A6BZ.RX_buf[k+2]-48;
                                                    if(A6BZ.RX_buf[k+3] >47 && A6BZ.RX_buf[k+3]<58 ) //值为数据
                                            {
                                                    j=j*10;
                                                    j+=(A6BZ.RX_buf[k+2]-48);
                                            }
                                            }
                                            break;
                                    }
                            }
            }
            if(j==0 ||j==99)
            {
                    xhqd=0;
            }
            else if(j>=12) {xhqd=4;}
            else if(j>=8 ) {xhqd=3;}
            else if(j>=5) {xhqd=2;}
            else {xhqd=1;}
            A6BZ.A6_XH=xhqd;
            CLR_Buf1();
    }


    不知道大家放假了吗
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2017-1-4 08:05
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    85

    主题

    1629

    帖子

    1

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2569

    优秀版主

    最后登录
    2019-3-28
    发表于 2016-11-23 08:20:11 | 显示全部楼层
    lulugl 发表于 2016-11-23 08:14
    /*******************************************************************************
    * 函数名 : GET_CS ...

    https://www.nxpic.org.cn/module/forum/thread-607107-1-1.html
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-2-12 15:48
  • 签到天数: 47 天

    连续签到: 1 天

    [LV.5]常住居民I

    12

    主题

    425

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1084
    最后登录
    2018-2-12
     楼主| 发表于 2016-11-23 15:14:05 | 显示全部楼层
    技术范儿 发表于 2016-11-23 08:20
    https://www.nxpic.org.cn/module/forum/thread-607107-1-1.html

    谢谢,我学习了
    不知道大家放假了吗
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-12-2 08:40
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    103

    主题

    869

    帖子

    7

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    4353
    最后登录
    2025-8-21
    发表于 2016-11-23 18:24:05 | 显示全部楼层
    while感觉会卡死啊,用状态机吧
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-11-30 16:16
  • 签到天数: 206 天

    连续签到: 1 天

    [LV.7]常住居民III

    74

    主题

    2793

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    7909
    最后登录
    2025-4-11
    发表于 2016-11-24 00:20:59 来自手机 | 显示全部楼层
    咸鱼我想问一下,啥叫状态机
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-7 09:36
  • 签到天数: 23 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    0

    主题

    340

    帖子

    0

    高级会员

    Rank: 4

    积分
    778
    最后登录
    2018-5-25
    发表于 2016-11-24 02:07:06 | 显示全部楼层
    现也在用SIM800A,谢谢上面的楼主指点了,谢谢!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-11 08:12 , Processed in 0.105701 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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