求助,有关串口向单片机发送字符串的问题
这是我写的串口向单片机发送字符串的程序
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar ser_receive; //串口接收到的数据
uchar ser_flag=0;
uchar n,m,a,b;
sbit RXD_ = P3^0;
uchar xdata receive_number[256];//接收串口发送来的数据的数组
uchar TX_BUF[32];
uchar i=0;
uchar j;
uint l=0;
uchar come=0;
void init_ser()
{
TMOD=0X20;//定时器1工作在方式2
TH1=0XFD;
TL1=0XFD; //波特率9600
TR1=1;
EA=1;
SM0=0;
SM1=1;
REN=1;//允许串口接收
ES=1;//开串口 中断
}
/**************************************************
串口中断
/**************************************************/
void ser() interrupt 4
{
if(RI==1)
{
RI=0;
ser_receive=SBUF;
if(ser_receive!='\0')
{
receive_number[i]=ser_receive;
i++;
n=0;
while(n++>1500)
{
n++;
}
if((RXD_)&&(i<33))
{
l=i;
while(l<256)
{
receive_number[l]='\0';
l++;
}
a=i/32;
b=i%32;
l=0;
i=0;
ser_flag=1;
}
if((RXD_)&&(i>32)&&(i<65))
{
l=i;
while(l<256)
{
receive_number[l]='\0';
l++;
}
a=i/32;
b=i%32;
l=0;
i=0;
ser_flag=2;
}
if((RXD_)&&(i>64)&&(i<97))
{
l=i;
while(l<256)
{
receive_number[l]='\0';
l++;
}
a=i/32;
b=i%32;
l=0;
i=0;
ser_flag=3;
}
if((RXD_)&&(i>96)&&(i<129))
{
l=i;
while(l<256)
{
receive_number[l]='\0';
l++;
}
a=i/32;
b=i%32;
l=0;
i=0;
ser_flag=4;
}
if((RXD_)&&(i>128)&&(i<161))
{
l=i;
while(l<256)
{
receive_number[l]='\0';
l++;
}
a=i/32;
b=i%32;
l=0;
i=0;
ser_flag=5;
}
if((RXD_)&&(i>160)&&(i<193))
{
l=i;
while(l<256)
{
receive_number[l]='\0';
l++;
}
a=i/32;
b=i%32;
l=0;
i=0;
ser_flag=6;
}
if((RXD_)&&(i>192)&&(i<225))
{
l=i;
while(l<256)
{
receive_number[l]='\0';
l++;
}
a=i/32;
b=i%32;
l=0;
i=0;
ser_flag=7;
}
if((RXD_)&&(i>224)&&(i<257))
{
l=i;
while(l<256)
{
receive_number[l]='\0';
l++;
}
a=i/32;
b=i%32;
l=0;
i=0;
ser_flag=8;
}
}
}
}
void main()
{
init_ser();
while(1)
{
if(ser_flag==1)
{
ES=0;
ser_flag=0;
for(l=0;l<b;l++)
{
TX_BUF[l]=receive_number[l];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
}
if(ser_flag==2)
{
ES=0;
ser_flag=0;
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+32];
}
for(j=0;j<b;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
}
if(ser_flag==3)
{
ES=0;
ser_flag=0;
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+32];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+64];
}
for(j=0;j<b;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
}
if(ser_flag==4)
{
ES=0;
ser_flag=0;
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+32];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+64];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+96];
}
for(j=0;j<b;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
}
if(ser_flag==5)
{
ES=0;
ser_flag=0;
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+32];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+64];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+96];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+128];
}
for(j=0;j<b;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
}
if(ser_flag==6)
{
ES=0;
ser_flag=0;
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+32];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+64];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+96];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+128];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+160];
}
for(j=0;j<b;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
}
if(ser_flag==7)
{
ES=0;
ser_flag=0;
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+32];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+64];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+96];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+128];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+160];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+192];
}
for(j=0;j<b;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
}
if(ser_flag==8)
{
ES=0;
ser_flag=0;
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+32];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+64];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+96];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+128];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+160];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+192];
}
for(j=0;j<32;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
for(l=0;l<32;l++)
{
TX_BUF[l]=receive_number[l+224];
}
for(j=0;j<b;j++)
{
SBUF=TX_BUF[j];
while(!TI);
TI=0;
}
}
ES=1;
}
}
因为还要用到其他元件,每次只能发送32位,问题是发前面的255位都是正常的的,发第256位的时候,就出现问题了,只能发送最后的31位了,求大侠们帮小弟看看