小弟想实现单片机串口收发功能,程序如下。经keil,Proteus,虚拟串口,串口调试助手联合仿真,发现接收部分工作正常,发送部分程序运行后串口助手只接受到“pas npu sd 1 2 ”(本应为"please intput selected No. 01 02 or 03?")求高人指教,不胜感激~
#include"reg51.h"
#include"string.h"
sbit p=PSW^0;
char s[15];
char show[]="please intput selected No. 01 02 or 03?";
void main(void)
{
char t,i;
char a,b=0;
a=strlen(show);
SCON=0xD0; //串口工作方式3
TMOD=0x20; //波特率2400
TL1=0xF4;
TH1=0xF4;
PCON=0x80;
TR1=1;//开定时器
for(;b<a;b++)
{
ACC=show[b];
TB8=p;
SBUF=show[b];
while(!TI);
TI=0;
}
for(i=0;i<16;i++)
{
while(RI==0);
RI=0;
t=SBUF;
ACC=t;
if(p!=RB8)
break;
else
s[i]=ACC;
}
}
------解决方案--------------------
有可能串口助手来不及接收;
试下在每次发送前,延时一会儿,再发送。
------解决方案--------------------
试试串口中断里面接收吧,每接收完一个,会产生串口中断,判断中断标识,再接收下一个字节,直到接收完毕为止!这样看会不会有漏掉的数据!
------解决方案--------------------
你发送字符的同时,发送了奇偶校验位P,凡是ASCII码值为奇的都显示了,ASCII码值为偶的都没显示。