找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

小白求助 关于51单片机串口数据处理

查看数: 1892 | 评论数: 5 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-6-7 17:23

正文摘要:

判断从串口接收到的两个字节,即4位16进制的数据,如果第一个字节对了led1亮然后判断第二个,第二个字节对了led3亮。 但是令我很好奇的是某些数据是对的,另一些却不能正确判断 如fafb, e1d1 ,等,灯可以正常亮起 ...

回复

ID:1082596 发表于 2023-6-7 21:54
刘宇杰找实训 发表于 2023-6-7 21:04
串口中断函数接收第一个字节之后,开启定时器计数。接受下一个字节的时候清空定时器计数。如此,当没有数据 ...

谢谢解答
ID:1082659 发表于 2023-6-7 21:04
串口中断函数接收第一个字节之后,开启定时器计数。接受下一个字节的时候清空定时器计数。如此,当没有数据接收后,计时器无法清零,当计时器计数超过设定的数值之后,触发定时器溢出中断,此时数据即接收完毕
ID:1082596 发表于 2023-6-7 20:06
xuyaqi 发表于 2023-6-7 18:27
在串口中断里应该只处理数据接收,LED处理放在main循环里,不要因为LED处理影响数据接收。

判断和LED处理已放进主循环,并且仅判断一个字节。
仍只有部分数据led1可正常亮起,如ff.fb等
请问这是什么原因呢?我该如何解决嘞。求大佬指点
这是修改后的程序
void main()
{       
        UART_init(); //串口初始化
        while(1)
        {  
                if(num1==0x5A)
                {   led1=0;  //第一个字节对了之后led1亮
                }
                else led1=1;
       
        }       
}

void UART() interrupt 4
{         
        while(!RI);        //检测是否接收完成
                RI = 0;       
                num1 = SBUF;
                       
}
ID:94031 发表于 2023-6-7 18:27
在串口中断里应该只处理数据接收,LED处理放在main循环里,不要因为LED处理影响数据接收。

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

Powered by 单片机教程网

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