程序的目的是接收一个10位以下的字符串,存储在数组中然后发回上位机。第一位为长度。EG:PCsend:5asdfg。51MPUsend:asdfg。
以下程序能实现1次接收和回复上位机,但是第二次接收的时候就没有返回了。真的想不出是哪里问题,请大神帮看看。
#include<reg52.h>
#include<stdio.h>
#include<string.h>
#define uchar unsigned char
#define uint unsigned int
uint count=0,read_flag=0,string_len=0;
uchar inbuf[20]={0};
sbit led=P0^1;
char a,c[30];
void init() //中断初始化
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
// REN=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
}
void send_char(uchar a) //发送一个字符
{
TI=0;
SBUF=a;
while(!TI);
TI=0;
}
void send_string( uchar *str, uint strlen) //发送字符串
{
unsigned int k= 1 ;
do
{
send_char(*(str + k));
k++;
} while (k <=strlen);
}
void main()
{
init();
ES=0;
TI=1;
printf("I am the best!>.<\n");
while(!TI);
TI=0;
ES=1;
led=1;
while(1)
{
if(read_flag==1)
{
ES=0;
send_string(inbuf,inbuf[0]-'0');
inbuf[0]='0';
read_flag=0;
ES=1;
}
}
}
void serial () interrupt 4
{
unsigned char ch;
if(RI==1)
{
RI = 0 ;
ch=SBUF;
if (ch==0xff )
{
count= 0 ;
}
else
{
inbuf[count]=ch;
if (count==(inbuf[0]-'0'))
{
read_flag= 1 ; //如果串口接收的数据达到string_len个,
count=0;
//就置位取数标志
}
count++;
}
}
}
|