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

 找回密码
 立即注册
查看: 8584|回复: 6

为什么我用51单片机写的程序干不起啊???

[复制链接]
发表于 2013-10-23 20:41:34 | 显示全部楼层 |阅读模式
本帖最后由 红尘笑客288 于 2013-10-23 21:03 编辑

   我用51单片机自己写了一个串口控制的程序。但是现在是,用电脑控制,传回的数据就和发的数据一样。但是用手机控制就,不可以,而且回传的数据多数时候都错位了。大侠们怎么办呢?下面是我写的程序,希望大家看看!
  补充说明一点,那就是我的这个703N的信号是直接接在单片机RXD端的,我刚才看见论坛里面的帖子,说要先把703N接MAX232再接单片机,请问是不是这个的问题?
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar Uart[5];
uint i=0;
bit flag;
sbit IN1=P1^0;
sbit IN2=P1^1;
sbit IN3=P1^2;
sbit IN4=P1^3;
/**************
*函数名称: go
*函数功能: 前进
*函数调用: 无
*入口参数: 无
*出口参数: 无
*************/
void go()
{
IN1=0;
IN2=1;
IN3=1;
IN4=0;  
}
/**************
*函数名称: back
*函数功能: 后退
*函数调用: 无
*入口参数: 无
*出口参数: 无
*************/
void back()
{
IN1=1;
IN2=0;
IN3=0;
IN4=1;
}
/**************
*函数名称: left
*函数功能: 左转
*函数调用: 无
*入口参数: 无
*出口参数: 无
*************/
void left()
{
IN1=0;
IN2=1;
IN3=0;
IN4=1;
}
/**************
*函数名称: right
*函数功能: 右转
*函数调用: 无
*入口参数: 无
*出口参数: 无
*************/
void right()
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
void stop()
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
}
void Play_Decode()
{


    switch(Uart[2])
{
  case 0x00:stop();  return;
  case 0x01:back(); return;
  case 0x02:go();    return;
  case 0x03:left(); return;
  case 0x04:right(); return;
  default: return;
}
}
/******************
*串口方式1初始化
****************/
void UART_Init(void)
{
  SCON = 0x50; //串口方式1(8位UART,波特率可变),允许接收
  TMOD =0x20; //T1定时器,工作2模式(8位自动重装)
  PCON=0x00;   //波特率不加倍
  TH1 = 0xfd; //设置定时器初值(9600的波特率)
  TL1 = 0xfd;
  EA=1;      //开总中断
  TR1=1;  //开定时器中断
  ES=1;   //开串口中断
}
void Uart_Send(uchar date)
{
  ES=0;
  SBUF = date; //数据给SBUF缓冲区
  while(!TI); //等待发送完毕(在发送时TI为0,)
  TI=0;
  ES=1;   //发送标志位清零
}
void main()
{
uint j;
  UART_Init();
  while(1)
  {  
   Play_Decode();
    if((i==5)&&(flag==1))
{
    ES=0;
    i=0;
    for(j=0;j<5;j++)
    {
     Uart_Send(Uart[j]);
    }
    ES=1;
}
   
  }
}
void Uart_Receive(void) interrupt 4
{
   if(TI==1)TI=0;
   if(RI==1) //查询接收标志位(有数据发送过来时置为1)
  {
      ES=0;
   RI =0;   
   Uart=SBUF;
         i=i+1;
           flag=1;
    ES=1;
  }
}
   

回复

使用道具 举报

 楼主| 发表于 2013-10-23 20:44:27 | 显示全部楼层
求解释啊,大神们!
回复 支持 反对

使用道具 举报

发表于 2013-10-23 22:26:31 | 显示全部楼层
如果可以收到正确数据,说明串口是好的,不用串MAX232
回复 支持 反对

使用道具 举报

发表于 2013-10-24 14:14:06 | 显示全部楼层
关键你要看手机发送的是不是16进制形式,如果不是肯定不行。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-24 15:56:11 | 显示全部楼层
你的好伙伴 发表于 2013-10-24 14:14
关键你要看手机发送的是不是16进制形式,如果不是肯定不行。

是16进制啊,就是手机发送是数据是错位了的!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-24 15:58:00 | 显示全部楼层
liuviking 发表于 2013-10-23 22:26
如果可以收到正确数据,说明串口是好的,不用串MAX232

嗯嗯,谢谢你!我现在已经找到问题了,原来是数组的元素少了一个。对了管理员,你知道哪里有完整的改造703N路由的教程吗,发个链接,谢谢了。
回复 支持 反对

使用道具 举报

发表于 2013-11-30 14:13:39 | 显示全部楼层
你好,我也想做一个小车,但是我不懂编程。看了你写的程序,应该是把单片机的P1.0~P1.3接L298N的IN1~IN4口吧?还有,我用V1.05版的安卓客户端,前、后、左、右、停,分别应该填什么代码?手机软件一装上,控制端口是2001 ,不需要改吧?
本人高三苦逼生一个,只想课余时间做个小车出来玩玩,希望大神能帮我。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2024-11-23 05:23 , Processed in 1.084285 second(s), 19 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

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