OpenVINOTM,给你看得见的未来!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 8051单片机串口调试求助

共6条 1/1 1 跳转至

8051单片机串口调试求助

助工
2020-05-24 22:17:31    评分

 大家好 !

我目前在学习串口收发数据,目的是接收命令,根据命令修改数组内的值并发送出去,主要有下面两个疑问:


  1、串口调试有没有好的方法可以在线仿真,能够看到变量值的每步变化,我尝试用了proteus仿真,串口调试助手发送数据,程序进不了串口中断;


  2、我写了下面一段程序,tmp[]数组接收的是串口调试助手发来的命令ASCII码。红色这句修改数组的值出了问题,接收到的ASCII码0-b转换成16进制的0-11,作为数组的下标赋值给b,接收到的ASCII码1 、2、4、8转换成16进制(tmp[2]-0x30),赋值给数组buzzer_value ''。但是实际每次buzzer_value ''都为0X00;后面发送的b 、(tmp[2]-0x30)的值又是对的,不知道中间有什么问题。 我尝试把b改成数字下标或者把tmp[2]-0x30改成具体的十六进制数,结果都是对的。


以下是相关源码:

                                        if((tmp[1]>='0')&&(tmp[1]<='9'))
                                          b=tmp[1]-0X30;
                                        else
                                          b=tmp[1]-0X51;
                                        buzzer_value  '[   b   ]'=(tmp[2]-0x30);

                                        a=0;
                                        while(a<12)
                                        {
                                                SBUF = buzzer_value[a];                //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)
                                                while(!TI);                                // 等特数据传送        (TI发送中断标志)
                                                TI = 0;                                        // 清除数据传送标志
                                                a++;                                            // 下一个字符         
                                        }
                                SBUF = b;                //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)
                                                while(!TI);                                // 等特数据传送        (TI发送中断标志)
                                                TI = 0;                                        // 清除数据传送标志        
                                SBUF = tmp[2]-0X30;                //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)
                                                while(!TI);                                // 等特数据传送        (TI发送中断标志)
                                                TI = 0;                                        // 清除数据传送标志        
                                int_tmp();
                                b=0;                                


                                        if((tmp[1]>='0')&&(tmp[1]<='9'))
                                          b=tmp[1]-0X30;
                                        else
                                          b=tmp[1]-0X51;
                                        buzzer_value  '[   b   ]'=(tmp[2]-0x30);

                                        a=0;
                                        while(a<12)
                                        {
                                                SBUF = buzzer_value[a];                //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)
                                                while(!TI);                                // 等特数据传送        (TI发送中断标志)
                                                TI = 0;                                        // 清除数据传送标志
                                                a++;                                            // 下一个字符         
                                        }
                                SBUF = b;                //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)
                                                while(!TI);                                // 等特数据传送        (TI发送中断标志)
                                                TI = 0;                                        // 清除数据传送标志        
                                SBUF = tmp[2]-0X30;                //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)
                                                while(!TI);                                // 等特数据传送        (TI发送中断标志)
                                                TI = 0;                                        // 清除数据传送标志        
                                int_tmp();
                                b=0;                                





关键词: 单片机     串口调试     UART    

工程师
2020-05-24 22:31:09    评分
2楼

楼主,你这不是串口通讯问题,是数据解析问题。


助工
2020-05-24 22:34:34    评分
3楼

用第三方的串口调试软件查原始数据看看


助工
2020-05-24 22:40:01    评分
4楼

建议参考网上的状态机程序,对收到的串口数据进行解析。


助工
2020-05-24 23:08:41    评分
5楼

感谢分享


助工
2020-05-24 23:21:23    评分
6楼

明白了


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]