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

 找回密码
 立即注册
查看: 12259|回复: 14

IOS端和小车串口通信问题

[复制链接]
发表于 2016-6-25 09:51:03 | 显示全部楼层 |阅读模式
现在我有了烧程序的设备,我在 void UART_Interrupt_Receive(void) interrupt 4 中断处理函数前面加了让LED灯亮的代码,但是发现我的ios端连上小车发数据后,根本进不去这个中断,这是什么问题啊?
回复

使用道具 举报

发表于 2016-6-25 09:58:25 | 显示全部楼层
贴出具体代码。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-6-25 10:09:11 | 显示全部楼层

/*
版权声明:
深圳市小二极客科技(小R科技)旗下:WIFI机器人网·机器人创意工作室版权所有 www.wifi-robots.com
您可以任意修改本程序,并应用于自行研发的智能小车机器人及其他电子产品上,但是禁止用于商业牟利。
小R科技保留付诸法律起诉侵权的权利!2015-8-22
By WIFI机器人网·机器人创意工作室
*/
#include "uart.h"
#include <stdio.h>
#include "motor.h"
#include "steer.h"
#include "mem.h"
#include "IR.h"
#include "timer.h"
#include "Servo.h"
#include "Light.h"
uint8 xdata buffer[3];
uint8 rec_flag=0;        //等于0等待接受 等于1正在接受
extern uchar IR_Type;  
extern uchar IR_Num;
extern uchar Cruising_Flag;
extern uint16 Uart_timeout_count;
extern uint8 Left_Speed; //左侧速度
extern uint8 Right_Speed;        //右侧速度
extern uint8 Left_Speed_Hold;        //左侧速度锁存
extern uint8 Right_Speed_Hold; //右侧速度锁存
void UART_init(void)
{
        PCON |= 0x80;                //使能波特率倍速位SMOD
        SCON = 0x50;                //8位数据,可变波特率
        BRT = RELOAD_COUNT;                //设定独立波特率发生器重装值
        AUXR |= 0x04;                //独立波特率发生器时钟为Fosc,即1T
        AUXR |= 0x01;                //串口1选择独立波特率发生器为波特率发生器
        AUXR |= 0x10;                //启动独立波特率发生器
        ES      =   1;    //允许串口中断
    EA      =   1;    //开总中断
        TI      =   1;       
        EX0=0;
        EX1=0;
}

void UART_send_byte(uint8 byte)
{
        ES     =   0;  //关串口中断
    TI     =   0;  //清零串口发送完成中断请求标志
    SBUF   =   byte;
    while(TI ==0); //等待发送完成
    TI     =   1;  //清零串口发送完成中断请求标志
    ES     =   1;  //允许串口中断
}

void UART_send(uint8 *Buffer, uint8 Length)
{
        while(Length != 0)
        {
                UART_send_byte(*Buffer);
                Buffer++;
                Length--;
        }

}

void Communication_Decode(void)  
{       
        uint8 i;

        if(buffer[0]==0x00)
        {
                switch(buffer[1])
                {       
                        case

0x01:Left_Speed=Left_Speed_Hold;Right_Speed=Right_Speed_Hold;MOTOR_GO_FORWARD; return;
                        case

0x02:Left_Speed=Left_Speed_Hold;Right_Speed=Right_Speed_Hold;MOTOR_GO_BACK;    return;
                        case

0x03:Left_Speed=Left_Speed_Hold;Right_Speed=Right_Speed_Hold;MOTOR_GO_LEFT;    return;
                    case

0x04:Left_Speed=Left_Speed_Hold;Right_Speed=Right_Speed_Hold;MOTOR_GO_RIGHT;   return;
                        case

0x00:Left_Speed=Left_Speed_Hold;Right_Speed=Right_Speed_Hold;MOTOR_GO_STOP;    return;

                        case 0x05:Left_Speed=4;Right_Speed=10;MOTOR_GO_FORWARD;return;
                        case 0x06:Left_Speed=4;Right_Speed=10;MOTOR_GO_BACK;return;
                        case 0x07:Left_Speed=10;Right_Speed=4;MOTOR_GO_FORWARD;return;
                        case 0x08:Left_Speed=10;Right_Speed=4;MOTOR_GO_BACK;return;
                        default: return;
                }       
        }
        else if(buffer[0]==0x01)
        {
                if(buffer[2]>180)
                        return;
                       
                switch(buffer[1])
                {
                        case 0x01:SetServoAngle(1,buffer[2]); return;
                        case 0x02:SetServoAngle(2,buffer[2]); return;
                        case 0x03:SetServoAngle(3,buffer[2]); return;
                        case 0x04:SetServoAngle(4,buffer[2]); return;
                        case 0x05:SetServoAngle(5,buffer[2]); return;
                        case 0x06:SetServoAngle(6,buffer[2]); return;
                        case 0x07:SetServoAngle(7,buffer[2]); return;
                        case 0x08:SetServoAngle(8,buffer[2]); return;
                        default : return;
                }  
        }
        else if(buffer[0]==0x02)
        {
                if(buffer[2]>10)
                        return;
                switch(buffer[1])
                {
                        case 0x01:Left_Speed_Hold=Left_Speed  = buffer[2]; return;
                        case 0x02:Right_Speed_Hold=Right_Speed = buffer[2]; return;
                        default : return;
                }
        }
        else if        (buffer[0]==0x04)//车大灯,拉电流形式,5V
        {
                 if(buffer[1]==0x01)
                 {
                    OpenMainLight(); //开灯
                 }
                 else
                 {
                         CloseMainLight(); //关灯
                 }
       
       
        }
        else if(buffer[0]==0x13)//模式切换开关
        {
            switch(buffer[1])
                {
                  case 0x01: Cruising_Flag = 0x01; break;//跟随
                  case 0x02: Cruising_Flag = 0x02; break;//巡线
                  case 0x03: Cruising_Flag = 0x03; break;//避障
                  case 0x04: Cruising_Flag = 0x04; break;//雷达避障
                  case 0x00: Cruising_Flag = 0x00; break;//正常模式
                  default:Cruising_Flag = 0x00; break;//正常模式
                }
        }
        else if(buffer[0]==0x32)//存储舵机角度
        {
                  Earse_Section(50*512);
                for(i=1;i<=8;i++)
                {
                   Write_Byte(50*512+i,GetServoAngle(i));       
                }
        }
        else if(buffer[0]==0x33)//读取舵机角度并赋值
        {
                 Init_Steer();
        }
        else
        {
                return;
        }
}

void UART_Interrupt_Receive(void) interrupt 4
{
        static uint8 i;
           LED1=~LED1;
           LED2=~LED2;
           LED3=~LED3;
           LED4=~LED4;
           LED5=~LED5;
           LED6=~LED6;
          
    if(RI==1)
    {
        RI  =   0;
                if(rec_flag==0)
                {
                        if(SBUF==0xff)
                        {
                                rec_flag=1;       
                                Uart_timeout_count = 0;
                                i=0;
                        }                       
                }
                else
                {
                        if(SBUF==0xff)
                        {       
                                rec_flag=0;       
                                if(i==3)
                                {
                                        Communication_Decode();       
                                        //UART_init(); //        解决串口死机问题
                                }
                                i=0;
                        }
                        else
                        {
                                buffer=SBUF;
                                i++;
                        }
                }               
    }
    else
    {
        TI  =  0;
    }
               
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-6-25 10:22:43 | 显示全部楼层
其他的下位机程序我没有改,现在我就是卡在ios和小车通信不了这个问题上了。跟波特率有关系吗?
数据发了,但是单片机串口中断不响应
回复 支持 反对

使用道具 举报

发表于 2016-6-25 10:26:38 | 显示全部楼层
      LED1=~LED1;
           LED2=~LED2;
           LED3=~LED3;
           LED4=~LED4;
           LED5=~LED5;
           LED6=~LED6;
这一段如果去掉,能否控制?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-6-25 10:30:00 | 显示全部楼层
liuviking 发表于 2016-6-25 10:26
LED1=~LED1;
           LED2=~LED2;
           LED3=~LED3;

控制不了,因为进不去这个中断。
用授权后的软件可以控制
。有可能是ser2net的问题吗?
回复 支持 反对

使用道具 举报

发表于 2016-6-25 10:47:57 | 显示全部楼层
BigGoooood 发表于 2016-6-25 10:30
控制不了,因为进不去这个中断。
用授权后的软件可以控制
。有可能是ser2net的问题吗?

意思是用你自己写的上位机无法控制,用我们官方发布的软件可以控制?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-6-25 11:31:02 | 显示全部楼层
liuviking 发表于 2016-6-25 10:47
意思是用你自己写的上位机无法控制,用我们官方发布的软件可以控制?

是的。。。关于ios的资源太少了。写起来很困难
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-6-25 11:36:26 | 显示全部楼层
liuviking 发表于 2016-6-25 10:47
意思是用你自己写的上位机无法控制,用我们官方发布的软件可以控制?

ios端我用的是AsynSocket,是异步非阻塞式的,应该是可行的吧,我还没试过另外一种连接方式,今天回去试试。 - -昨天把Mac的充电器落在老师办公室了。到是昨天我用串口调着调着,整个板子突然不亮灯了,是因为电池没电了吧
回复 支持 反对

使用道具 举报

发表于 2016-6-25 11:41:11 | 显示全部楼层
BigGoooood 发表于 2016-6-25 11:31
是的。。。关于ios的资源太少了。写起来很困难

这个好排查,你用USB-TTL串口线,接wifi模块串口,然后用串口助手查看你上位机发送的数据格式对不对。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-2-5 21:59 , Processed in 1.076942 second(s), 20 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

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