单片机串口通信带奇偶校验的问题

2019-07-16 07:07发布

为什么我用两个单片机做实验,一个很简单的程序,让甲发送信息(0x60)给乙,在没收到乙的反馈信息(0x50)前,甲一直发送数据,而乙接收到数据后就发送个反馈信息给甲。为什么乙每次都能收到甲的信息,但乙的反馈信息却传不回甲处?极少数情况能传回甲处。
单片机串口通信
另外,不知我的奇校验子程序是否有问题呢?能提供个串口通信带奇偶校验例程吗?!

这是我的程序:

甲单片机:

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit start=P0^0;//发光二极管,用来检测数据是否在发送
unsigned char a=0xff,i=100,b,jieshou;

void    delay(unsigned int m)            //延时程序
{
    unsigned int i,j;
    for(i=0; i<m; i++)
        for(j=0; j<110; j++);
}

     


bit jiaoyan(uchar m)//奇校验
{
int i;
bit tmp;
for(i=0;i<8;i++)
{
  tmp=tmp^m&0x01;
  m>>=1;
}
tmp=~tmp;
return tmp;
}
void main()
{
SCON=0xd0;//串口通信方式3
TMOD=0x20;//设置定时器1为工作方式2
TH1=0xfd;
TL1=0xfd;
TR1=1;//开计数器
EA=1;
ES=1;//开串口中断
ti=0;
RI=0;
while(jieshou!=0x50)
{
  TB8=jiaoyan(0x60);
  SBUF=0x60;
  delay(1100);
  start=0;
  delay(1100);
  start=1;

}
start=0;
while(1);




}

void ser0() interrupt 4//串口中断
{
uchar temp;
ES=0;
if(TI==1)
{ TI=0;
  }
if(RI==1)
{
  temp=SBUF;
  if(RB8==jiaoyan(temp))
  {
   jieshou=temp;
  }
//  else
//   {jieshou=0xff;}
  RI=0;
}
ES=1;
}



乙单片机:

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit start=P0^0;//发光二极管,用来检测数据是否在发送
unsigned char a=0xff,i=100,b,jieshou,xh=1;

void    delay(unsigned int m)            //延时程序
{
    unsigned int i,j;
    for(i=0; i<m; i++)
        for(j=0; j<110; j++);
}

     


bit jiaoyan(uchar m)//奇校验
{
int i;
bit tmp;
for(i=0;i<8;i++)
{
  tmp=tmp^m&0x01;
  m>>=1;
}
tmp=~tmp;
return tmp;
}
void main()
{
SCON=0xd0;//串口通信方式3
TMOD=0x20;//设置定时器1为工作方式2
TH1=0xfd;
TL1=0xfd;
TR1=1;//开计数器
EA=1;
ES=1;//开串口中断
TI=0;
RI=0;
while(jieshou!=0x60);
while(jieshou==0x60)(这个语句总是判断不到,当接收到甲的信号后,就直接跳到下一个语句停在while(1);处了,而不是进行循环发送,而我如果改成while(i--);就能进行循环,但要在发送几十次后才能成功让甲单片机收到信号)
{
  TB8=jiaoyan(0x50);
  SBUF=0x50;
  start=0;
  delay(2200);
  start=1;
  delay(1100);

}
start=0;
while(1);



}

void ser0() interrupt 4//串口中断
{
uchar temp;
ES=0;
if(TI==1)
{ TI=0;
  }
if(RI==1)
{
  temp=SBUF;
  if(RB8==jiaoyan(temp))
  {
   jieshou=temp;
  }
//  else
//   {jieshou=0xff;}
  RI=0;
}
ES=1;
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。