找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1770|回复: 3
打印 上一主题 下一主题
收起左侧

新人求助关于51智能车

[复制链接]
跳转到指定楼层
楼主
ID:165830 发表于 2017-2-21 21:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
新手,一个简单的PWM和超声波程序,可是小车没反应,不加超声波程序小车能走,下面这个小车就没反应,求大神指点
#include<AT89X51.H>
#include<math.h>
#include   <intrins.h>
#include   <STDIO.H>
#define uint unsigned int
#define uchar unsigned char
sbit RX=P3^6;
sbit TX=P3^7;

sbit en1=P1^0;//电机驱动接口
sbit s1=P1^2;
sbit s2=P1^1;
sbit nc=P1^3;
sbit s3=P1^4;
sbit s4=P1^5;
sbit en2=P1^6;

uchar t=0;//中断计数值
uchar m1=0;//电机1的速度值
uchar m2=0;//电机2的速度值
uchar tmp1,tmp2;//电机当前速度值
unsigned int  time=0;
unsigned int  timer=0;
float         S=0;
bit           flag =0;

/************************************************************************/
void delay(unsigned int ms)
{
        unsigned char i=100,j;
        for(;ms;ms--)
        {
                while(--i)
                {
                        j=10;
                        while(--j);
                }
        }
}
/************************************************************************/

/************************************************************************/
void StartModule() //启动测距信号
{
        TX=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        TX=0;
}
/***************************************************/
void Count(void) //计算距离
{
        TR0=1; //开启计数
        while(RX); //当RX为1计数并等待
        TR0=0; //关闭计数
        time=TH0*256+TL0; //读取脉宽长度
        TH0=0;
        TL0=0;
        S=(time*1.88)/100; //算出来是CM
}
/************************************************************************/
/*电机控制函数index-电机号(1,2);speed-电机速度(-100到100)*/
void moto(uchar index,char speed)
{
        if(speed>=-100&&speed<=100)
        {
                if(index==1)//电机1的处理
                {
                        m1=abs(speed);//取速度的绝对值
                        if(speed<0)//速度为负值反转
                        {
                                s1=0;
                                s2=1;
                        }
                        else//不为负数则正转
                        {
                                s1=1;
                                s2=0;
                        }
                }
                if(index==2)//电机2的处理
                {
                        m2=abs(speed);//电机2的速度控制
                        if(speed<0)
                        {
                                s3=0;
                                s4=1;
                        }
                        else
                        {
                                 s3=1;
                                s4=0;
                        }
                }               
        }
}
/***************************************************/
///*TIMER1中断服务子函数产生PWM信号*/
void time1()interrupt 3
{
        if(t==0)//1个PWM周期完成后才会接受新数值
        {
                tmp1=m1;
                tmp2=m2;
        }               
        if(t<tmp1)//产生电机1的PWM信号
                en1=1;
        else
                en1=0;
        if(t<tmp2)//产生电机2的PWM信号
                en2=1;
        else
                en2=0;
        t++;
        timer++;
        if(t>=100)//1个PWM信号由100次中断产生
                t=0;
               
}         
/***************************************************/
void main(void)
{
        unsigned int valA;
        TMOD=0X21;
        SCON=0x50;
        TH1=(65536-100)/256;
        TL1=(65536-100)%256;
        TH0=0;
        TL0=0;
        TR1= 1;
        TR0= 1;
        ET1= 1;
        ET0= 1;
        TI=1;
        EA = 1;


        while(1) /*无限循环*/
                {
                delay(60);
            StartModule();
        for(valA=7510;valA>0;valA--)
            {
                  
               if(RX==1)
                   {
           Count();
                   }
             }
                 if(S>20)
                 {
                         moto(1,28);
                        moto(2,25);
                 }
                 else
                 {
                         moto(1,0);
                        moto(2,0);
                 }         
               
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:165830 发表于 2017-2-22 10:48 来自手机 | 只看该作者
人工顶。。
回复

使用道具 举报

板凳
ID:166043 发表于 2017-2-22 20:17 | 只看该作者
坐等大神回帖
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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