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

 找回密码
 立即注册
查看: 8329|回复: 5

上位机控制wifi小车用这个程序为啥动不了呢??

[复制链接]
发表于 2013-8-1 16:56:55 | 显示全部楼层 |阅读模式
我从论坛上把串口通信的移植过来的程序,电机部分跟这个不太一样,,可是点在论坛上下载的上位机软件就是动不了啊。。。求大神指点

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

void motor_r_z(void);//右边电动机正转
void motor_l_z(void);//左边电动机正转
void motor_r_f(void);//右边电动机反转
void motor_l_f(void);//左边电动机反转
void back(void); //小车后退
void go(uchar,uchar);//小车前进
void stop(void);//小车停止
void left(void);//小车左转
void right(void);//小车右转

sbit PWM1=P2^5;
sbit PWM2=P2^4;
sbit PWM3=P2^1;
sbit PWM4=P2^2;
sbit EN1=P2^0;
sbit EN2=P2^3;
sbit sound=P2^7;
uchar Buffer =0; //从串口接收的数据
uint URTAReceivedCount=0,n=1;
uchar data Tempdatatable[5],CommandDatatable[5];//数据包
uchar data t_0;
uchar data motor_r;
uchar data motor_l;
uchar data Value;
uchar data mid;


void init()//初始化液晶、接收中断方式
{

  TMOD=0x21;
  TH1=0xfd;
  TL1=0xfd;
  TH0=0xff;
  TL0=0xf6;
  SM0=0;
  SM1=1;
  REN=1;

  TR0=1;//开T0中断
  ET0=1;//T0允许中断
  EA=1;
  TR1=1;
  P2=0;
  sound=1;
}
/*void delay(uint z)//延时函数
{
  uint x,y;
  for(x=z;x>0;x--)
    for(y=110;y>0;y--);
}*/

void go(uchar left_motor,uchar right_motor)//直行
{
        Value=right_motor;
        motor_r_z();
        Value=left_motor;
        motor_l_z();
}

void motor_r_z(void)//右边电动机正转
{
  motor_r=0x64+Value;
  EN1=1;
}
void motor_l_z(void)//左边电动机正转
{
  motor_l=0x64-Value;
  EN2=1;
}

void stop(void)
{
        EN2=0;
        EN1=0;
}
void time0(void) interrupt 1 using 2
{
        TR0=0;
        TH0=0xff;
        TL0=0xf6;
        ++t_0;
        ACC=t_0;
        CY=0;
        ACC-=motor_r;
        if(CY==1)
        {
        PWM1=1;
        PWM2=0;
        goto PWM_2;
        }
        PWM1=0;
        PWM2=1;
        PWM_2:
        ACC=t_0;
        CY=0;
        ACC-=motor_l;
        if(CY==1)
        {
        PWM3=1;
        PWM4=0;
        goto HIGHT;
        }
        PWM3=0;
        PWM4=1;
        HIGHT:
        ACC=t_0;
        if(ACC!=0xc9)
        goto EXIT;
        ACC=0;
        t_0=ACC;
        EXIT:
        TR0=1;
}  


void Com_Int(void) interrupt 4
{
        uchar temp;
        ES=0; //关串口中断
        RI=0; //软件清除接收中断
        temp=SBUF;
        if(temp==0XFF && URTAReceivedCount<3)
        {
                Tempdatatable[0]==0XFF; //包头
                URTAReceivedCount++;
        }
        else
        {
                Tempdatatable[n]=temp;
                n++;
                if(URTAReceivedCount==0&&n==2)
                n=1;
        }
       
        if(URTAReceivedCount==2)//包尾
        {
                Tempdatatable[0]=0XFF;
                Tempdatatable[4]=0XFF;
                n=1;
                URTAReceivedCount=0; //组包完毕
                temp="";
                // Send_Data(Tempdatatable[1],Tempdatatable[2],Tempdatatable[3]); //发送组成的数据包回去
        }
       
        CommandDatatable[0]=Tempdatatable[0];
        CommandDatatable[1]=Tempdatatable[1];
        CommandDatatable[2]=Tempdatatable[2];
        CommandDatatable[3]=Tempdatatable[3];
        CommandDatatable[4]=Tempdatatable[4];
       
        ES=1;//开串口中断
       

}
void main()
{
        init();

        while(1)
        {
               
                if(CommandDatatable[0]==0XFF && CommandDatatable[4]==0XFF)
                {
                        switch (CommandDatatable[1]) //根据键值不同,执行不同的内容
                        {
                                case 0X00: //类型位0X00,表明是控制数据包,进入控制数据case
                                switch(CommandDatatable[2]) //根据数据位的值来进行选择执行不同的动作
                                {
                                case 0X00:go(0x00,0x00);break;
                                case 0X01:go(0x35,0x35);break;
                                case 0X02:go(0x35,0x35);break;
                                case 0X03:go(0x35,0x00);break;
                                case 0X04:go(0x00,0x35);break;
                                default : break;
                                }
                                break;
                               
                        }
                }
        }       

}

回复

使用道具 举报

发表于 2013-8-1 19:47:42 | 显示全部楼层
go(0x00,0x00);这个是什么函数?怎么没看到他的实现?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-1 19:54:13 | 显示全部楼层
liuviking 发表于 2013-8-1 19:47
go(0x00,0x00);这个是什么函数?怎么没看到他的实现?

go是行驶的函数()里面是左右轮转速,,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-1 19:55:29 | 显示全部楼层
日暮惜乔 发表于 2013-8-1 19:54
go是行驶的函数()里面是左右轮转速,,

void go(uchar left_motor,uchar right_motor)//直行
{
        Value=right_motor;
        motor_r_z();
        Value=left_motor;
        motor_l_z();
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-1 19:56:31 | 显示全部楼层
liuviking 发表于 2013-8-1 19:47
go(0x00,0x00);这个是什么函数?怎么没看到他的实现?

void go(uchar left_motor,uchar right_motor)//直行
{
        Value=right_motor;
        motor_r_z();
        Value=left_motor;
        motor_l_z();
}
回复 支持 反对

使用道具 举报

发表于 2013-8-2 12:29:51 | 显示全部楼层
日暮惜乔 发表于 2013-8-1 19:56
void go(uchar left_motor,uchar right_motor)//直行
{
        Value=right_motor;

case 0X00:go(0x00,0x00);break;你里面返回的值给 Value,0x00应该不行吧
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2024-11-23 00:09 , Processed in 1.085997 second(s), 18 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

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