接收机程序问题

[复制链接]
1851|12
 楼主| guoyt 发表于 2021-8-14 12:27 | 显示全部楼层 |阅读模式
当接收机确认发射机发送的字符55H后,接收机发送0AAH表示同意接收。但是红色部分 我单步调试时令SBUF=0x55 就是出不来这个循环,执行不了 SBUF=0XAA; 不知道哪里错了,望指点。
#include<reg51.h>
unsigned int pf,i;
unsigned char idata *buf;

void delay()
{ unsigned char i,j;
for(i=200;i>0;i--)
for(j=500;j>0;j--);
}
void init()
{ P2=0x00;
SCON=0XD0;
PCON=0X00;
TMOD=0X20;
TH1=0Xf3;
TL1=0Xf3;
TR1=1;
}
void main()
{ init(); //初始化
do{
while(!RI);
RI=0;
}while(SBUF^0x55);
SBUF=0XAA;
while(!TI);
TI=0;
while(1)
{ pf=0; // 开始接收数据
for(i=0;i<10;i++)
{ buf=SBUF;
while(!RI);
RI=0;
pf+=buf;
}
while(!RI);
if(SBUF^pf)
{SBUF=0XEE;
while(!TI);
TI=0;
}
else
{ SBUF=0XDD;
for(i=0;i<10;i++)
{ P2=buf;
delay();
}
break;
}

}

}
dingy 发表于 2021-8-14 12:30 | 显示全部楼层
SBUF别重复读!它可是一个地址2个寄存器的
dingy 发表于 2021-8-14 12:38 | 显示全部楼层
你无法确定你现在读的是不是刚才读的那个物理寄存器
dengdc 发表于 2021-8-14 12:40 | 显示全部楼层
这个寄存的“读”是破坏性的。
yszong 发表于 2021-8-14 12:42 | 显示全部楼层
改成
uchar i;
for(;;){
      while(!RI);
      i = SBUF;
     RI = 0;
    if(i != 0x55) break;
zhenykun 发表于 2021-8-14 12:44 | 显示全部楼层

RI = 0;
TI = 0;
do {
     while( RI == 0);
     RI = 0;
} while (SBUF == 0x55);
SBUF = 0xAA;
while (TI == 0);
TI = 0;
..........
tian111 发表于 2021-8-14 12:46 | 显示全部楼层
抱歉!應該是   while( SBUF != 0x55);
juventus9554 发表于 2021-8-14 12:48 | 显示全部楼层
这个程序的我先研究下的
wangpe 发表于 2021-8-14 12:52 | 显示全部楼层
这个程序的我先研究下的
zhenykun 发表于 2021-8-14 12:54 | 显示全部楼层
为什么读是破坏性的呢
wyjie 发表于 2021-8-14 12:55 | 显示全部楼层
不太明白这个问题啊
stly 发表于 2021-8-14 12:57 | 显示全部楼层
读取的方式不太对
 楼主| guoyt 发表于 2021-8-14 13:00 | 显示全部楼层
嗯,那我按大家的说法挨个排查一下,谢谢哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1018

主题

9067

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部