RS232串口通信程序用串口调试助手,发送数据与接收数据不符?
#include<reg52.h>unsignedchara;unsignedcharflag;//标志是否收到数据voidmain(){TMOD=0x20;//设置定时...
#include<reg52.h>
unsigned char a;
unsigned char flag;//标志是否收到数据
void main()
{
TMOD=0x20;//设置定时器1为工作方式2,即自动再装入8位数据
//PCON=0x80;
TH1=0xfd;//即开始装入
TL1=0xfd;//即开始装入
//以上三条指令是设置波特率为9600
TR1=1;//启动定时器1
REN=1;
SM0=0;
SM1=1;
//SCON=0x50;//使寄存器工作为方式一,并开启串口
EA=1;//开启总中断
ES=1;//开启串口中断
while(1)
{
if(flag==1)
{
ES=0;
flag=0;
SBUF=a;//a为数据接收方
while(!TI);//当TI=1时表示发送完毕
TI=0;
ES=1;
}
}
}
void seri() interrupt 4
{
//if(RI==1)//判断是否收到数据
//{
RI=0;
P1=SBUF;//SBUF接收缓冲区,同时检验数据是否收到
a=SBUF;//准备发出去a
flag=1;//收到数据
//}
}
如16进制发送aa bb cc dd输出显示是对的但配合发光二极管测试数据接收出现错误,还有发送数字直接显示都为错如11输出为91,麻烦哪位高人帮忙解决一下 展开
unsigned char a;
unsigned char flag;//标志是否收到数据
void main()
{
TMOD=0x20;//设置定时器1为工作方式2,即自动再装入8位数据
//PCON=0x80;
TH1=0xfd;//即开始装入
TL1=0xfd;//即开始装入
//以上三条指令是设置波特率为9600
TR1=1;//启动定时器1
REN=1;
SM0=0;
SM1=1;
//SCON=0x50;//使寄存器工作为方式一,并开启串口
EA=1;//开启总中断
ES=1;//开启串口中断
while(1)
{
if(flag==1)
{
ES=0;
flag=0;
SBUF=a;//a为数据接收方
while(!TI);//当TI=1时表示发送完毕
TI=0;
ES=1;
}
}
}
void seri() interrupt 4
{
//if(RI==1)//判断是否收到数据
//{
RI=0;
P1=SBUF;//SBUF接收缓冲区,同时检验数据是否收到
a=SBUF;//准备发出去a
flag=1;//收到数据
//}
}
如16进制发送aa bb cc dd输出显示是对的但配合发光二极管测试数据接收出现错误,还有发送数字直接显示都为错如11输出为91,麻烦哪位高人帮忙解决一下 展开
若以下回答无法解决问题,邀请你更新回答
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询