• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

在单片机串口通讯中,字符类发送0,返回B0?为什么不是30.

zhczlzhang 2017-11-08 浏览量:1395
按照老师提供的串口通讯程序,字符类发送0,返回应该是30,但是却返回了B0?为什么会这样?B0转换为十进制是176,减去128是48,对应的ASCLL是0。但是为什么跟老师说的不太一样。
QQ截图20171108092057.pngQQ截图20171108092111.png
#include <reg52.h>

void ConfigUART(unsigned int baud);

void main()
{
    EA = 1;   //使能总中断
    ConfigUART(9600);  //配置波特率为9600
    while (1);
}
/* 串口配置函数,baud-通信波特率 */
void ConfigUART(unsigned int baud)
{
    SCON  = 0x50;  //配置串口为模式1
    TMOD &= 0x0F;  //清零T1的控制位
    TMOD |= 0x20;  //配置T1为模式2
    TH1 = 256 - (11059200/12/32)/baud;  //计算T1重载值
    TL1 = TH1;     //初值等于重载值
    ET1 = 0;       //禁止T1中断
    ES  = 1;       //使能串口中断
    TR1 = 1;       //启动T1
}
/* UART中断服务函数 */
void InterruptUART() interrupt 4
{
    if (RI)  //接收到字节
    {
        RI = 0;   //手动清零接收中断标志位
        SBUF = SBUF ;  //接收的数据原路返回,左边是发送SBUF,右边是接收SBUF
    }
    if (TI)  //字节发送完毕
    {
        TI = 0;   //手动清零发送中断标志位
    }
}
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 由于手上没有这款单片机,用另外的单片机降为12T模式测试了一下,代码没问题,如果楼主是仿真的话,看下楼主仿真软件配置部分是不是有问题,如果是用硬件实测的话,那么有可能硬件上是不是有问题?或者串口软件配置有问题?


    01.png


    02.png

    • 发布于 2017-11-08
    • 举报
    • 评论 2
    • 0
    • 0
zhczlzhang 回复了 SingleYork:感谢2位的提醒,@靳飞 @邹跃玲,我的串口设置跟晶振时钟设置没有问题,主要是单片机内部还有一个时钟忘记设置了,所以出现了这个问题,感谢提醒。 回复
电子老工程师 回复了 :https://atta.szlcsc.com/upload/public/pdf/source/20190917/C428882_E9D115246A44D34C1F53E36B282D7EAF.pdf 回复

其他答案 数量:4
  • 你这个程序的功能是发什么数据,接收的也是什么数据,就是个数据回传功能。

    再发一下其他的数据,如果也不正确,那么应该是你的串口配置有问题,再计算一下波特率看看对不以地。

    • 发布于2017-11-08
    • 举报
    • 评论 0
    • 1
    • 0

zhczlzhang 回复了 我是爆米花啊 :有规律,需要在减去128才能找到对应的ASCLL码值,但是老师演示给我看得不太一样。 回复
电子老工程师 回复了  :没有规格书,附件是这个型号的官网链接, 回复

  • 这种情况如果不是速度问题,那么就是配置问题了。
    • 发布于2017-11-10
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :就包装区别,其他都一样,就是一颗料 回复

  • 波特率的计算方式是什么样的,这种问题应该是串口配置的问题。
    • 发布于2017-11-12
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

在单片机串口通讯中,字符类发送0,返回B0?为什么不是30.