找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 868|回复: 6
收起左侧

请教关于单片机串口程序调试的问题

[复制链接]
ID:963748 发表于 2021-11-12 11:05 | 显示全部楼层 |阅读模式
程序小白请教大佬,串口发送指令只执行一次功能,后面发送的指令串口助手能正常发送接收,但功能没出来,程序怎么修改?
主要是我想发送不同长度的指令,指令长度一样的话程序是没问题的

部分程序

部分程序

部分程序

部分程序
回复

使用道具 举报

ID:624769 发表于 2021-11-12 14:30 | 显示全部楼层
首先需要确认,你的 i 是全局变量,
然后,
你即使 sflag == FALSE 也要 i=0
不然,只要有一个错误指令,后面你的指令位置都不会从0开始,永远指令都是错误的。

通常有两个方案,
1)按照波特率的 105倍计时,超过后,判断超时(表示所有指令都已经接受完毕),开始验证指令,验证完毕后,不管指令对不对,都把 i=0 准备接受下一个指令。

2)利用 dat[j] = dat[j+1]; 进行移位,多次反复比较指令,那么就不在乎 i 有没有归零了。
回复

使用道具 举报

ID:963748 发表于 2021-11-12 14:56 | 显示全部楼层
188610329 发表于 2021-11-12 14:30
首先需要确认,你的 i 是全局变量,
然后,
你即使 sflag == FALSE 也要 i=0

利用 dat[j] = dat[j+1]; 具体怎么实现的呢?
回复

使用道具 举报

ID:624769 发表于 2021-11-12 15:43 | 显示全部楼层
用for 循环 假定你的 dat 长度为64
for(j=0, j<63,j++)    //循环63次
{
    dat[j] = dat[j+1];
}
然后再去对比指令。
回复

使用道具 举报

ID:963748 发表于 2021-11-12 15:52 | 显示全部楼层
188610329 发表于 2021-11-12 15:43
用for 循环 假定你的 dat 长度为64
for(j=0, j

好的谢谢
回复

使用道具 举报

ID:401564 发表于 2021-11-12 16:53 | 显示全部楼层
//串口接收上位机,可以用strstr函数查找,比如,上位机发送  数据:255
//单片机可以先查找"数据:",查找到之后再处理后面的255,这样的代码可以简单明了很多
void Uart2_Isr() interrupt 8                                                                         //串口2中断
{
        char *p,Uart_S[15];
        static unsigned char RX_Count;
        unsigned a;
        if(S2CON&0x02)
                {
                   S2CON&=~0x02;                                                                                //清除中断发送标示位
                   Busy=0;                                                                                                   //
                   return;
                }
        //────────────────────────────────────────────────────────────────────────────       
        if(S2CON&0x01)
                {
                   S2CON&=~0x01;                                                                                //清除中断接收标示位                                                 
                        Uart_S[RX_Count]=S2BUF;
                        RX_Count++;
                        p=strstr(Uart_S,"数据:");                                                                //查找指令结束符"数据:"
                        if(NULL!=p)                                                                                   //如果没有查找到"数据:",指针返回值为空
                                 {  
                                 //指针返回值不为空,就表示串口接收到"数据:",处理.........
                                }               
                }
        //──────────────────────────────────────────────────────────────────────────────
}
回复

使用道具 举报

ID:963748 发表于 2021-11-13 09:11 | 显示全部楼层
Y_G_G 发表于 2021-11-12 16:53
//串口接收上位机,可以用strstr函数查找,比如,上位机发送  数据:255
//单片机可以先查找"数据:",查找到之 ...

学习了谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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