按照老师提供的串口通讯程序,字符类发送0,返回应该是30,但是却返回了B0?为什么会这样?B0转换为十进制是176,减去128是48,对应的ASCLL是0。但是为什么跟老师说的不太一样。
#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; //手动清零发送中断标志位 } }
由于手上没有这款单片机,用另外的单片机降为12T模式测试了一下,代码没问题,如果楼主是仿真的话,看下楼主仿真软件配置部分是不是有问题,如果是用硬件实测的话,那么有可能硬件上是不是有问题?或者串口软件配置有问题?
你这个程序的功能是发什么数据,接收的也是什么数据,就是个数据回传功能。
再发一下其他的数据,如果也不正确,那么应该是你的串口配置有问题,再计算一下波特率看看对不以地。