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

 找回密码
 立即注册
查看: 11673|回复: 15

求救 求救 各位大侠都来看看

[复制链接]
发表于 2012-10-14 23:16:01 | 显示全部楼层 |阅读模式
我的小车做到最后的程序调试了 但是写完程序 用上位机怎么也控制不了 小车没一点反应 WIFI模块的TTL是没有问题的 用STC_ISP可以看见上位机发出去的字符 我现在把上位机配置图和下位机程序贴出来 大家帮我看看 小弟先谢谢了
6C56YBMQD]F3OTG8MLNMEDM.jpg
**********************************************************************************************************
这个下位机程序是论坛上的 说明一下 我的小车是四驱的 两个L298N驱动电机的 所以P1口输出的电平我改了 编译有5个警告 老大说没有错误就没事
#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<=148;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;
EX0=1;
}
void TimerInit()
{   
control_signal=0;                        
EA=1;                                   //开总中断
ET0=1;                                   //定时器0中断允许
    TH0 = 0xFF;                        //定时器装初值
    TL0 = 0xA3;
TR0=0;                                      
}
/********************************************************************
* 名称 :Moto_Forward()
* 功能 : 电机1、2启动,都是前进,整车表现为前进。
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Moto_Forward()
{
   
    P1= 0x55;
   Delay_1ms(100);
}
/********************************************************************
* 名称 :Moto_Backward()
* 功能 : 电机1、2启动,都是后退,整车表现为后退。
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Moto_Backward()
{
  
    P1= 0xAA;
  Delay_1ms(100);
}
/********************************************************************
* 名称 :Moto_TurnLeft()
* 功能 : 电机1后退,电机2前进,整车表现为左转。
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Moto_TurnLeft()
{
   P1= 0xA5;
  Delay_1ms(100);
}
/********************************************************************
* 名称 :Moto_TurnRight()
* 功能 : 电机1前进,电机2后退,整车表现为右转。
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Moto_TurnRight()
{
  P1= 0x5A;
  Delay_1ms(100);
}
/********************************************************************
* 名称 :Moto_Stop()
* 功能 : 电机1停止,电机2停止,整车表现为停止。
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Moto_Stop()
{
   P1= 0xFF;
   Delay_1ms(100);
}
/********************************************************************
* 名称 :SteerEngineTurningUp()
* 功能 : 舵机向上转。
* 输入 : 无
* 输出 : 无
***********************************************************************/
  void SteerEngineTurningUp()
{
       ET0=1;
  TR0=1;  
  Delay_1ms(40);
     hight_votage-=1;
     if(hight_votage<5)
     hight_votage=5;
}
/********************************************************************
* 名称 :SteerEngineTurningDown()
* 功能 : 舵机向下转。
* 输入 : 无
* 输出 : 无
***********************************************************************/
  void SteerEngineTurningDown()
{
   
   ET0=1;
   TR0=1;  
   Delay_1ms(40);
      hight_votage+=1;
      if(hight_votage>20)
      hight_votage=20;
}
/********************************************************************
* 名称 : SteerEngine()
* 功能 : 舵机PWM中断
* 输入 : 无
* 输出 : 无
***********************************************************************/
void SteerEngine() interrupt 1
{
    TH0=0xFF;
    TL0=0xA3;
   if (++key_stime_counter>=200)
  {
       key_stime_counter=0;
       control_signal=1;
       key_stime_ok = 1;               // 20ms到
       timeT_counter=0;
  }
  
  if (key_stime_ok&&(++timeT_counter>=hight_votage))
  {
      key_stime_ok=0;
       timeT_counter=0;
       control_signal=0;              // hight_votage*0.1ms到
  }
}
void main()
{   
  
    MainLight=0;
     Delay_1ms(200);
       Com_Init();//串口初始化
           TimerInit();//舵机初始化
   
  while(1)
  {
  
   if(CommandDatatable[0]==0XFF && CommandDatatable[3]==0XFF)
      {
   
           switch (CommandDatatable[1])      //根据键值不同,执行不同的内容
             {
                   case 0X00:  //类型位0X00,表明是控制数据包,进入控制数据case
   
                      switch(CommandDatatable[2])  //根据数据位的值来进行选择执行不同的动作
                           {
                             case 0X00:
                                     Moto_Stop();
                                            break;
                               case 0X01:
                                      Moto_Forward();
                                            break;
                                case 0X02:
                                     Moto_Backward();
                                             break;
                                 case 0X03:
                                       Moto_TurnLeft();
                                              break;
                                            case 0X04:
                                                Moto_TurnRight();
                                                    break;
                                               }
                                         break;
        case 0X01:    //类型位0X01,表明是舵机数据包,进入舵机case  
     switch(CommandDatatable[2])
         {
        case 0X01:
   
                SteerEngineTurningUp();
                    break;
                 case 0X02:
               SteerEngineTurningDown();
               break;
      }
      break;
     case 0X02:  //类型位0X02,表明是大灯数据包,进入大灯case
        switch(CommandDatatable[2])
         {
              case 0X01:
               MainLight=1;
               break;
              case 0X02:
                     MainLight=0;
                  break;
      }
               break;
  default :  TR0=0;TR2=0;
          break;
   }
  }
  }
}
/********************************************************************
* 名称 : extern_int0()
* 功能 : 外部中断0,红外中断函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void extern_int0(void) interrupt 0 using 0
{
    EX0=0;
    Moto_TurnLeft();
Buffer=0;
    EX0=1;
    IE0=0;
   
}

回复

使用道具 举报

发表于 2012-10-15 10:25:04 | 显示全部楼层
调试顺序
1、首先用232发到单片机,看看单片机运行正确与否。不正确,有条件可以用仿真器,没条件照抄代码!
2、单片机运行正确,用网口转串口工具,看看网口发到串口的数据正确与否,不正确,调试703。。。
3、都正确,注意收发线接法,没有接错的话应该是没问题的。还接不到,可以用WSExplorer看看上位机发出去没有。
4、干扰源。靠近器件的地方多并联几个104,电机也并上104.有条件可以做个壳子给PCB板卡上。
我的代码和你的不一样,驱动电路我自己手焊的,不是298.
建议首先让车子动起来,确定好前后左右,在进行相应的控制。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-15 11:09:27 | 显示全部楼层
、懒懒的日子 发表于 2012-10-15 10:25
调试顺序
1、首先用232发到单片机,看看单片机运行正确与否。不正确,有条件可以用仿真器,没条件照抄代码 ...

谢谢 你现在有思路了 真的谢谢你
回复 支持 反对

使用道具 举报

发表于 2012-10-15 15:26:32 | 显示全部楼层
学习了,我正要做一个,也是打算自己设计驱动板
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-19 17:22:29 | 显示全部楼层
thkk7788 发表于 2012-10-15 15:26
学习了,我正要做一个,也是打算自己设计驱动板

嗯 加油                 
回复 支持 反对

使用道具 举报

发表于 2012-10-29 12:07:05 | 显示全部楼层
我也想做个  就是程序比较难弄
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-29 13:06:22 | 显示全部楼层
chenteng5 发表于 2012-10-29 12:07
我也想做个  就是程序比较难弄

我的现在调试好了 有什么我可以帮你的吗
回复 支持 反对

使用道具 举报

发表于 2012-10-29 15:43:00 | 显示全部楼层
~V~shrimp@@@ 发表于 2012-10-29 13:06
我的现在调试好了 有什么我可以帮你的吗

谢谢 楼主  我也有个51单片机 做下位机 上位机就坛里的 不知如何调试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-29 16:05:12 | 显示全部楼层
chenteng5 发表于 2012-10-29 15:43
谢谢 楼主  我也有个51单片机 做下位机 上位机就坛里的 不知如何调试

你把下位机程序写好了没
回复 支持 反对

使用道具 举报

发表于 2012-10-29 16:26:57 | 显示全部楼层
~V~shrimp@@@ 发表于 2012-10-29 16:05
你把下位机程序写好了没

不会写哦 只有按坛里的51程序改了
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2024-4-27 10:01 , Processed in 1.108557 second(s), 23 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

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