新人求教51串口收发数据
时间:10-02
整理:3721RD
点击:
51接收16字节数据,首位为FF,再发送FF为首的7字节,为什么我写的这个程序发在仿真的不对
#include <reg51.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
bit Rec_Flag =0; //数据接收标志位
bit UART_Flag =0; //串口接收完成标志位
uchar Rec_Num=0;
//uint rd[16];
uchar f,a,b0,c,hh,hm,hl,xh,xm,xl,yh,ym,yl,zh,zm,zl;
uchar dt[7];
void delay71us(void);
void read(void);
void delay(char x);
void rdtodt(void);
void txde(void);
void main(void)//初始化串口
{
SCON=0x50;
TMOD=0x20;
PCON=0x00;
TL1=0xFD;
TH1=0xFD;
ES=1;
TR1=1;
while(1)
{
delay(1);
read();
rdtodt();
txde();
}
}
void read()
{
loop:while(RI!=0);
f=SBUF;
RI=0;
if(SBUF==0xff)
{ //收到起始位
Rec_Flag=1;
Rec_Num=0;
if(SBUF!=0XFF)
{goto loop;
}
}
//delay71us();
while(RI!=0);
a=SBUF;
RI=0;
//delay71us();
while(RI!=0);
b0=SBUF;
RI=0;
//delay71us();
while(RI!=0);
c=SBUF;
RI=0;
//delay71us();
while(RI!=0);
hh=SBUF;
RI=0;
//delay71us();
while(RI!=0);
hm=SBUF;
RI=0;
//delay71us();
while(RI!=0);
hl=SBUF;
RI=0;
// delay71us();
while(RI!=0);
xh=SBUF;
RI=0;
//delay71us();
while(RI!=0);
xm=SBUF;
RI=0;
//delay71us();
while(RI!=0);
xl=SBUF;
RI=0;
//delay71us();
while(RI!=0);
yh=SBUF;
RI=0;
//delay71us();
while(RI!=0);
ym=SBUF;
RI=0;
//delay71us();
while(!RI);
yl=SBUF;
RI=0 ;
//delay71us();
while(RI!=0);
zh=SBUF;
RI=0;
//delay71us();
while(RI!=0);
zm=SBUF;
RI=0;
//delay71us();
while(RI!=0);
zl=SBUF;
RI=0;
if(f==0xff)//判断是否为有效数据
UART_Flag=1; //若是正确的数据,则标志位置1
}
void delay(char x)
{char i,j;
for(i=0;i<x;i++)
for(j=0;j<110;j++);
}
//void delay71us(void) //误差 -0.470486111111us
//{
// unsigned char a;
// for(a=31;a>0;a--);
//}
void rdtodt()
{
if(f==0xff)
{
dt[0]=f;
dt[1]=hh;
dt[2]=hm;
dt[3]=hl;
dt[4]=zh;
dt[5]=zm;
dt[6]=zl;
}
}
void txde()
{
uchar i=0;
if(UART_Flag==1);
{ //ES=0;
for(i=0;i<7;i++)
{
SBUF=dt;
while(!TI); //等待发送完成
TI=0; //发送完成,TI清0
}
}
//ES=1;
//SCON=0x50;
}
SBUF=dt; 数组赋值给SBUF?
没复制到中括号和I,其他地方有问题吗?我的怎么输出的总不对。求教!