chenyonken 2016-08-30 09:17 采纳率: 0%
浏览 1720
已结题

串口通信返回数据出错问题

我想从调试助手里发送一个多位数到单片机上,然后单片机处理加1返回到电脑,结果我发1,返回1;发123,返回24;发12,返回2,这是什么问题啊,我发一段代码,大家能帮我看一下吗

 #include<reg52.h>
#include"bstv51.h"
unsigned char num=0;    

void Uart_Init();

void main()
{
    Uart_Init();
    while(1);
}

void Uart_Init()
{
    TMOD=0X20;//设置定时器1工作方式为2,8位重装定时器
    TH1=0XFD;
    TL1=0XFD; //设置波特率为9600
    SCON=0X50;//设置串口工作方式为1,8位元uart,开启接受允许
    PCON=0X00;//波特率不加倍
    EA=1;
    ES=1;
    TR1=1;
}

void Uart_Isr() interrupt 4
{
    if(TI)
    {
        TI=0;
        REN=1;
    }
    if(RI)
    {
        RI=0;
        num=SBUF;
        num++;
        SBUF=num;
        REN=0;
    }   
}

  • 写回答

2条回答

  • 许三少 2016-08-30 13:17
    关注

    从你的程序看,SBUF应为单片机串口的读写寄存器。然而,由于串口寄存器是外设,在单片机CPU内可能有读写CACHE,导致你既未真正读到SBUF,也未真正写到SBUF,所以上位机获取的只能是些不可预知的数据。
    解决方法:在读、写SBUF之前,调用相关函数t同步D-CACHE。

    评论

报告相同问题?

悬赏问题

  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接