[求助]
小弟最近编写了一个PC与单片机串口通信协议的程序,使用KEIL的串口调试工具可以接收到字符,但是使用其他的串口调
试工具就没有反映,没有接收到发送过来的字符程序如下,请大虾指正!
#include <string.h>
#include <reg51.h>
#define CONNECT 0x34 //协议
#define SUC 0x31
#define FALSE 0x32
#define ERORR 0x33
#define FRE1 0x21
#define FRE2 0x22
#define FRE3 0x23
#define FRE4 0x24
#define FRE5 0x25
#define FRE6 0x26
#define FRE7 0x27
#define FRE8 0x28
#define FRE9 0x29
#define RECFRMMAXLEN 10
//sbit RE=P1^7;
//sbit DE=P1^7;
sbit JS=P1^7;
sbit P12=P1^2;
int n;
// bit Recv_Data(unsigned char *type);
//void Send_Connect(unsigned char type);
//void Send(unsigned char m);
/*接收函数*/
void Send(unsigned char m);
char Recv_Data(unsigned char *type)
{
unsigned char tmp,rCount;
unsigned char R_buf[RECFRMMAXLEN];
unsigned char Flag_RecvOver;
unsigned char Flag_StartRec;
//DE = 0;
//RE = 0;
JS=1;
rCount = 0;
Flag_StartRec=0;
Flag_RecvOver=0;
while(!Flag_RecvOver)
{
RI=0;
while(!RI);
tmp=SBUF;
RI=0;
if ((!Flag_StartRec) && (tmp == 0x7B))
{
Flag_StartRec = 1;
}
if (Flag_StartRec)
{
R_buf[rCount] = tmp;
rCount ++;
if (tmp == 0x7D)
Flag_RecvOver = 1;
}
}
if(rCount== RECFRMMAXLEN)
return 0;
if(rCount <4)
return 0;
if(R_buf[1]!=R_buf[2])
return 0;
*type = R_buf[1];
return 1;
}
/*发送函数*/
void Send(unsigned char m)
{
TI=0;
SBUF=m;
while(!TI);
TI=0;
}
void Send_Connect(unsigned char type)
{ unsigned char tmp;
// DE=1;
JS=0;
//RE=1;
tmp=0x7B;
Send(tmp);
Send(type);
Send(type);
tmp=0x7D;
Send(tmp);
P12=0;
for (n=0;n <20000;n++);
P12=1;
for (n=0;n <20000;n++);
}
/*主函数*/
void main(void)
{
unsigned char type;
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
PCON = 0x00;
EA = 0;
P12=0;
for (n=0;n <20000;n++);
P12=1;
for (n=0;n <20000;n++);
while(1)
{
if(Recv_Data(&type)==0)
continue;
switch(type)
{
case CONNECT:
Send_Connect(CONNECT);
break;
case SUC:
Send_Connect(SUC);
break;
default:
break;
}
}
}
有什么问题可以直接发送到zb198211@163.com,请大虾指正!
发表时间:2007年4月23日16:24:08