小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 6946|回复: 3

关于703路由器和STC89c52通讯的问题

[复制链接]
发表于 2015-10-16 19:03:43 | 显示全部楼层 |阅读模式
1)首先用wireshark能够看到PC端按下前后左右发给路由器的数据了,2)之前用的是703N和STC1132XE,可以实现通讯(直接买来的成品),我也用USB转TTL(CH340G)看到了FF000100FF等数据。
3)现在想用STC89c52,发现路由器和STC89C52没有办法通讯,单片机上的RXD串口接收小灯根本没有反应,我看了论坛的说,把路由器的TXD和RXD接到一起,那


STC89c52代码如下
#include<reg52.h>
#include<math.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar Buffer =0;      //从串口接收的数据
uint i=0,j,URTAReceivedCount=0,n=1;
uchar flag=0;
uchar data Tempdatatable[4],CommandDatatable[4];//数据包
uchar key_stime_counter,hight_votage=15,timeT_counter;   //舵机的变量
bit key_stime_ok;
sbit control_signal=P3^6; //舵机控制信号
sbit StatusLight=P0^0; //状态灯
sbit MainLight=P0^1; //主大灯
sbit Trig  = P3^4; //雷达产生脉冲引脚
sbit Echo  = P3^5; //接收雷达回波引脚
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)//1ms延时
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=115;x++);
}

void TurnOnStatusLight()
{

    StatusLight=0;
}
/********************************************************************
* 名称 : Send_Data()
* 功能 : 向上位机传送字符
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Send_Data(uchar data type,uchar data cmd)
{
  uchar data Buffer[4];
     //构建数据包
      uchar *p;
   uint Send_Count=0;
      p = Buffer;
   Buffer[0]=0XFF;
   Buffer[1]=type;
   Buffer[2]=cmd;
   Buffer[3]=0XFF;

  while(1)
   {
     if(*p==0XFF)
  {
    Send_Count++;  //0XFF标志统计位
  }
  SBUF = *p;  //发送
  while(!TI)  //如果发送完毕,硬件会置位TI,等待发送完毕
  {
   _nop_();
   }
  p++;

  TI = 0;
  if(Send_Count == 2)  //当统计到两次出现0XFF,则认为一个数据包发送完毕,跳出循环
  {
     TI = 0;
        break;

  }  

      }

}
/********************************************************************
协议规定:
包头  类型位  数据位    结束位
0XFF   1  1      0XFF
各命令说明:
类型位   数据位    功能
0X00    0X01    前进
0X00       0X02    后退
0X00       0X03    左转
0X00       0X04    右转
0X00       0X00    停止
0X01       0X01    舵机上
0X01       0X02    舵机下
0X02       0X01     车灯亮
0X02       0X02     车灯灭
0X03      雷达数据   发送雷达数据
***********************************************************************/
/********************************************************************
* 名称 : Com_Int()
* 功能 : 串口中断子函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Int(void) interrupt 4
{
uchar temp;
ES=0; //关串口中断
    RI=0; //软件清除接收中断
temp=SBUF;
   if(temp==0XFF && URTAReceivedCount<2)
  {

  Tempdatatable[0]==0XFF;  //包头
  URTAReceivedCount++;
  }
  else
  {
     Tempdatatable[n]=temp;
   n++;   
  }
  if(URTAReceivedCount==2)//包尾
  {
   Tempdatatable[0]=0XFF;
     Tempdatatable[3]=0XFF;
  n=1;
     URTAReceivedCount=0;  //组包完毕
  temp="";
  //Send_Data(Tempdatatable[1],Tempdatatable[2]);  //发送组成的数据包回去
  }
   CommandDatatable[0]=Tempdatatable[0];
  CommandDatatable[1]=Tempdatatable[1];
  CommandDatatable[2]=Tempdatatable[2];
  CommandDatatable[3]=Tempdatatable[3];
ES=1;//开串口中断
}
/********************************************************************
* 名称 : Com_Init()
* 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中断
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Init(void)
{
     TMOD = 0x21;
     PCON = 0x00;
     SCON = 0x50;   
     TH1 = 0xFd;    //设置波特率 9600
     TL1 = 0xFd;
     TR1 = 1;  //启动定时器1

  ES = 1;  //开串口中断
  EA = 1;  //开总中断
IT0=0;
回复

使用道具 举报

发表于 2015-10-16 22:16:58 | 显示全部楼层
通信协议注意一下,这个代码是4位的,我们标准的是5位的。另外这份代码的串口解析部分有BUG,有垃圾数据过来会跑飞。
回复 支持 反对

使用道具 举报

发表于 2015-10-18 21:26:24 | 显示全部楼层
是电平不匹配的问题吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-19 09:20:53 | 显示全部楼层
本帖最后由 nmjhehe 于 2015-10-19 09:22 编辑

问题解决了,我把703N路由器给拆开了,可以看到TXD,和RXD,二这两根线是接到mini的USB上的,后来我把它给拆下来了,自己单独接了一根线,即路由器的TXD接到单片机RXD,后来就有信号了,至此,也就实现了路由器和单片机的通讯了,
最后我猜测是因为RXD和TXD电压问题引起的,才使得数据没有办法给单片机。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-5-4 06:32 , Processed in 1.073621 second(s), 20 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

快速回复 返回顶部 返回列表