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

 找回密码
 立即注册
查看: 9681|回复: 9

为什么我的上位机不能一直按一直发送命令

[复制链接]
发表于 2013-3-7 16:42:37 | 显示全部楼层 |阅读模式
我按一下W它走一下,按一下走一下,而不能按着不放的时候,它一直走,要一直敲键盘,在串口调试的时候是可以一直按回车键一直走的,这个是怎么回事啊,是上位机的问题么,小弟受教了!
回复

使用道具 举报

发表于 2013-3-7 19:15:47 | 显示全部楼层
哪个版本的上位机?截个图看看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-7 20:32:32 | 显示全部楼层
liuviking 发表于 2013-3-7 19:15
哪个版本的上位机?截个图看看。

1.21和1.28的都是这样  是不是因为是DB120的原因?
回复 支持 反对

使用道具 举报

发表于 2013-3-7 20:44:48 | 显示全部楼层
下位机呢?是论坛的驱动板还是自己做的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-8 13:12:05 | 显示全部楼层
liuviking 发表于 2013-3-7 20:44
下位机呢?是论坛的驱动板还是自己做的?

自己做的,我用串口的时候是可以的,点亮的是灯,用平台控制的时候,我按一下电机会转,手一直放在那里它就不转了
回复 支持 反对

使用道具 举报

发表于 2013-3-8 22:22:01 | 显示全部楼层
Lyricalstyle 发表于 2013-3-8 13:12
自己做的,我用串口的时候是可以的,点亮的是灯,用平台控制的时候,我按一下电机会转,手一直放在那里它 ...

贴一下代码看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-13 16:02:32 | 显示全部楼层
liuviking 发表于 2013-3-8 22:22
贴一下代码看看

#include<reg52.h>
#include<math.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uint i=0,j,URTAReceivedCount=0,n=1,count=10;
uchar data Tempdatatable[2];//数据包
sbit led=P2^7;
void Delay_1ms(uint i)//1ms延时
{                                                       
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}


void moto_forward()
{  
  
    P0=0x02;     
Delay_1ms(200);
P0=0x00;
count--;
Tempdatatable[1]=0xff;

}
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==2)//包尾
  {
   Tempdatatable[0]=0XFF;
   Tempdatatable[2]=0XFF;
             n=1;
     URTAReceivedCount=0;  //组包完毕
             temp="";
  
  }

ES=1;//开串口中断
}

void main()         //程序入口
{   
     Delay_1ms(200);
         TMOD = 0x20;
     PCON = 0x80;
     SCON = 0x50;   
     TH1 = 0xfA;    //设置波特率 9600
     TL1 = 0xfA;
     TR1 = 1;  //启动定时器1
  
  ET1 =0;
  ES = 1;  //开串口中断
  PS=1;                 //设计串行口中断优先级
  EA = 1;  //开总中断
IT0=0;
EX0=1;
      
   
  while(1)
  {
   if(Tempdatatable[0]==0XFF && Tempdatatable[2]==0XFF)
      {
           switch(Tempdatatable[1])      
             {
                   case 0X02:  
  moto_forward();                                 
                                        break;                    
                                default :  TR0=0;TR2=0;
                                        break;                                          
            
                          }

            
         
      }
  }
}
按一下w它就前进  我买过你的板的
回复 支持 反对

使用道具 举报

发表于 2013-3-13 16:42:18 | 显示全部楼层
Lyricalstyle 发表于 2013-3-13 16:02
#include
#include
#include

下位机代码问题,这个下位机的串口接收有点小bug,请参考论坛驱动板源码重写串口接收部分程序即可
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-14 18:16:16 | 显示全部楼层
liuviking 发表于 2013-3-13 16:42
下位机代码问题,这个下位机的串口接收有点小bug,请参考论坛驱动板源码重写串口接收部分程序即可

好的  谢谢   可是我用串口发送ff02ff一直按回车可以耶 为什么呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-21 13:15:29 | 显示全部楼层
liuviking 发表于 2013-3-13 16:42
下位机代码问题,这个下位机的串口接收有点小bug,请参考论坛驱动板源码重写串口接收部分程序即可


请问我这个程序加上舵机控制为什么就不行了   能不能找下错误吗 谢谢了
#include<reg52.h>
#include<math.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uint i=0,j,URTAReceivedCount=0,n=1,count=10;
uchar data Tempdatatable[2];//数据包
sbit led=P2^7;
void Delay_1ms(uint i)//1ms延时
{                                                        
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
void Time0_Init()     //定时器0初始化
{
  TMOD=0x01;
  IE=0x82;
  TH0=0xfe;
  TL0=0x33;
  TR0=1;
  }

void moto_forward()
{  
  
    P0=0x02;     
Delay_1ms(200);
P0=0x00;
count--;
Tempdatatable[1]=0xff;

}
void Time0_Int() interrupt 1    //定时器0中断
  {
   TH0=0xfe;
   TL0=0x33;
   if(jishu<jd)        //判断0.5ms次数是否小于角度标识
   pwm=1;          //确实小于,pwm输出高电平
   else
   pwm=0;       //大于则输出低电平
   jishu=(jishu+1);//0.5ms次数加1
   jishu=jishu%40;     //次数始终保持为40即保持周期为20ms
   }  
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==2)//包尾
  {
   Tempdatatable[0]=0XFF;
   Tempdatatable[2]=0XFF;
             n=1;
     URTAReceivedCount=0;  //组包完毕
             temp="";
  
  }

ES=1;//开串口中断
}

void main()         //程序入口
{   
   jishu=0;
   jd=1;
     Delay_1ms(200);
         TMOD = 0x20;
     PCON = 0x80;
     SCON = 0x50;   
     TH1 = 0xfA;    //设置波特率 9600
     TL1 = 0xfA;
     TR1 = 1;  //启动定时器1
  
  ET1 =0;
  ES = 1;  //开串口中断
  PS=1;                 //设计串行口中断优先级
  EA = 1;  //开总中断
IT0=0;
EX0=1;
      
   
  while(1)
  {
   if(Tempdatatable[0]==0XFF && Tempdatatable[2]==0XFF)
      {
           switch(Tempdatatable[1])      
             {
                   case 0X02:  
  moto_forward();           
                                  break;
                   case 0x03:                 //如果数据包是0x03  舵机角度+1
                      jd=jd++;                     
                                        break;                    
                                default :  TR0=0;TR2=0;
                                        break;                                          
            
                          }

            
         
      }
  }
}
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2024-11-26 11:42 , Processed in 1.097487 second(s), 19 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

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