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

 找回密码
 立即注册
查看: 9259|回复: 7

程序问题

[复制链接]
发表于 2013-12-26 13:14:46 | 显示全部楼层 |阅读模式
帮我看看这个程序里是否有舵机和超声波代码,找个半天没找到定义的是哪个IO口,我用的是51版

/************************************************
51版WIFI小车基础下位机程序
************************************************/
#include <REG52.h> //通用89C52头文件
#define uchar unsigned  char
#define uint unsigned int
int buffer[3];         //接收指令数组
int rec_flag=0;         //标志位

/********电机控制端口***************/
/*sbit ENA    = P1^0; //A使能端
sbit INPUT1 = P2^1; //A控制I/O口       
sbit INPUT2 = P2^2;        //A控制I/O口

sbit ENB    = P1^3;        //B使能端
sbit INPUT3 = P1^4;        //B控制I/O口
sbit INPUT4 = P1^5;        //B控制I/O口                                                                                                                                                                                                          
*/
sbit Beep = P3^6;        //蜂鸣器驱动端口

/************************************************
非精确延时函数 ,单位ms
z:变量范围0-65535.改变z的大小,可以改变延时的时间

************************************************/
void Delay_xMs(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=125;y>0;y--);
}

/************************************************
蜂鸣器发声
t:控制蜂鸣器发声次数,变量范围:1-255

************************************************/
void Alarm(uchar t)
{
        uchar i;
        for(i=0 ; i<t; i++)
        {
                Beep = 0;                               
                Delay_xMs(100);
                Beep = 1;
                Delay_xMs(100);
        }
}

/************************************************
串口初始化
启动UART串口接收中断,允许串口接收,启动T/C1产生波特率
振荡晶体为11.0592MHz
************************************************/
void UART_init (void){
        EA = 1; //允许总中断(如不使用中断,可用//屏蔽)
        ES = 1; //允许UART串口的中断

        TMOD = 0x20;        //定时器T/C1工作方式2
        SCON = 0x50;        //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)
        TH1 = 0xFD;        //定时器初值高8位设置
        TL1 = 0xFD;        //定时器初值低8位设置
        //PCON = 0x80;        //波特率倍频(屏蔽本句波特率为9600)
        TR1 = 1;        //定时器启动   
}


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

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

void Communication_Decode(void)  
{       
        if(buffer[0]==0x00)
        {
                switch(buffer[1])
                {
                        case 0x01:P2=0xF6; return;
                        case 0x02:P2=0xF9; return;
                        case 0x03:P2=0xF5; return;
                        case 0x04:P2=0xFA; return;
                        case 0x00:P2=0x00; return;
                        default: return;
                }       
        }
        else
        {
                return;
        }
}

void main(void)
{
        Alarm(1);
        UART_init(); //初始化串口
        while(1)
        {                 
        }
}

void INT_UartRcv(void) interrupt 4
{
        static int i;
    if(RI==1)
    {
        RI=0;
        if(rec_flag==0)
                {
       
                        if(SBUF==0xff)
                        {
                                rec_flag=1;       
                                i=0;
                        }                       
                }
                else
                {
                        if(SBUF==0xff)
                        {
                                rec_flag=0;       
                                if(i==3)
                                {
                                        Communication_Decode();               
                                }
                                i=0;
                        }
                        else
                        {
                                buffer[i]=SBUF;
                                i++;
                        }
                }               
    }
    else
    {
        TI  =  0;
    }       
}


回复

使用道具 举报

发表于 2013-12-26 14:56:33 | 显示全部楼层
没有舵机也没有超声波
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-26 22:56:22 | 显示全部楼层
从前 发表于 2013-12-26 14:56
没有舵机也没有超声波

请问我找到了一个超声波代码怎么加到这个程序里,生成HEX可烧写文件。
回复 支持 反对

使用道具 举报

发表于 2013-12-26 23:51:40 | 显示全部楼层
washuch 发表于 2013-12-26 22:56
请问我找到了一个超声波代码怎么加到这个程序里,生成HEX可烧写文件。

单片机代码里面定义一个Echo和一个Trig引脚,作为收和发就行了,逻辑你应该在代码里面可以看到,无非是发送一下,然后接受,计算间隔时间,乘以声速。
回复 支持 反对

使用道具 举报

发表于 2013-12-30 15:54:45 | 显示全部楼层
liuviking 发表于 2013-12-26 23:51
单片机代码里面定义一个Echo和一个Trig引脚,作为收和发就行了,逻辑你应该在代码里面可以看到,无非是发 ...

来段代码出来看看 (我组合了很多遍 一直都未成功) 望liuviking 不吝赐教
回复 支持 反对

使用道具 举报

发表于 2013-12-30 17:54:19 | 显示全部楼层
两个代码里的函数调用不重复,就能编译,有个传递参数在处理函数里调用就行

这个需要具体的程序流程才能写,

舵机的控制信号单独的程序实验好了么?  需要50Hz左右的pwm信号,这个需要示波器测具体的输出波形,
回复 支持 反对

使用道具 举报

发表于 2014-1-1 23:16:39 | 显示全部楼层
闽海 发表于 2013-12-30 15:54
来段代码出来看看 (我组合了很多遍 一直都未成功) 望liuviking 不吝赐教

举个例子
  1. void Send_wave(void)
  2. {
  3.     uint16 i;

  4.         Trig = 1;
  5.         for(i=0;i<150;i++);
  6.         Trig = 0;
  7. }

  8. uchar Get_Distance(void)
  9. {
  10.     uint32 Distance = 0;

  11.     Send_wave();
  12.     TH1 = 0;
  13.     TL1 = 0;
  14.         while(TH1<250 && Echo!= 1);          
  15.         if(TH1 <= 250)        //测距范围<0.5M
  16.         {
  17.            TH1 = 0;
  18.            TL1 = 0;
  19.            while(Echo == 1);
  20.            Distance = TH1;
  21.            Distance = Distance*256;
  22.            Distance = Distance + TL1;
  23.            Distance = Distance * 17;
  24.            Distance = Distance / 22118;
  25.            return (uchar)(Distance&0xFF);
  26.         }
  27. }
复制代码
trig和echo要在之前先定义好
/* 超声波管脚配置 */
sbit Echo=P3^4;
sbit Trig=P3^5;
回复 支持 反对

使用道具 举报

发表于 2014-1-2 11:42:48 | 显示全部楼层
liuviking 发表于 2014-1-1 23:16
举个例子trig和echo要在之前先定义好
/* 超声波管脚配置 */
sbit Echo=P3^4;

亲  之前这些代码 都编进去了 雷达能正常显示数据 可是就雷达有用 就是不能控制车子动作
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2024-11-23 05:08 , Processed in 1.125765 second(s), 18 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

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