串口通信发送与接收信息不一致的疑问
时间:10-02
整理:3721RD
点击:
大神,请教一下51单片机串口发送的问题:当我用以下代码一 以hex模式发送和接收时,信息不一致。
#include <reg52.h>
void ConfigUART(unsigned int baud);
void main()
{
EA = 1; //使能总中断
ConfigUART(9600); //配置波特率为9600
while(1);
}
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
}
void InterruptUART() interrupt 4
{
if(RI)
{
RI = 0;
SBUF = SBUF + 1;
}
if(TI)
{
TI = 0;
}
}
当我用以下代码二 以hex模式发送和接收时,信息一致。
/*******************************************************************************
* 实验名 : 串口实验
* 使用的IO : P2
* 实验效果 : 将接收到发送回电脑上面。
* 注意 :
*******************************************************************************/
#include<reg51.h>
void UsartConfiguration();
/*******************************************************************************
* 函数名 : main
* 函数功能 : 主函数
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void main()
{
UsartConfiguration();
while(1)
{
}
}
/*******************************************************************************
* 函数名 :UsartConfiguration()
* 函数功能 :设置串口
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void UsartConfiguration()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
/*******************************************************************************
* 函数名 :Delay(unsigned int i)
* 函数功能 : 延时函数
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void Usart() interrupt 4
{
unsigned char receiveData;
receiveData=SBUF;//出去接收到的数据
RI = 0;//清除接收中断标志位
SBUF=receiveData+1;//将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
}
请教原因,谢谢。
#include <reg52.h>
void ConfigUART(unsigned int baud);
void main()
{
EA = 1; //使能总中断
ConfigUART(9600); //配置波特率为9600
while(1);
}
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
}
void InterruptUART() interrupt 4
{
if(RI)
{
RI = 0;
SBUF = SBUF + 1;
}
if(TI)
{
TI = 0;
}
}
当我用以下代码二 以hex模式发送和接收时,信息一致。
/*******************************************************************************
* 实验名 : 串口实验
* 使用的IO : P2
* 实验效果 : 将接收到发送回电脑上面。
* 注意 :
*******************************************************************************/
#include<reg51.h>
void UsartConfiguration();
/*******************************************************************************
* 函数名 : main
* 函数功能 : 主函数
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void main()
{
UsartConfiguration();
while(1)
{
}
}
/*******************************************************************************
* 函数名 :UsartConfiguration()
* 函数功能 :设置串口
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void UsartConfiguration()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
/*******************************************************************************
* 函数名 :Delay(unsigned int i)
* 函数功能 : 延时函数
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void Usart() interrupt 4
{
unsigned char receiveData;
receiveData=SBUF;//出去接收到的数据
RI = 0;//清除接收中断标志位
SBUF=receiveData+1;//将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
}
请教原因,谢谢。
这个就要看看你自己了
应该是波特率没有设置好。两种方法计算出来的波特率不一致吧
谢谢
