导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→[求助]

* 104109: [求助]

   广顺小张 
广顺小张发表的帖子 

 [求助]
小弟最近编写了一个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

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:单片机的模糊控制程序 /P P [size=4] /P P [face=新宋体] /P P
[下一篇帖子]:[求助]请问有达人有LCD短信显示的程序吗用c51单片机的。谢谢了:)