找回密码
 立即注册

QQ登录

只需一步,快速开始

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

我这段单片机代码为什么小车动不了?感觉没什么问题

[复制链接]
跳转到指定楼层
楼主
ID:586622 发表于 2019-8-9 23:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>


typedef unsigned char u8;
typedef unsigned int  u16;
sbit IN1=P2^1;
sbit IN2=P2^0;
sbit ENA=P2^2;
sbit ENB=P2^3;
u8        time1;


void time()
{        
    TMOD|=0x01;
        TH0=0XFF;
        TL0=0Xff;
        EA=1;
        ET0=1;
        TR0=1;
}

void main()
{

        time();
        while(1)
        {

                if (time1>1000)time1=0;//定义周期
                IN1=0;
                IN2=1;
                   if(time1<=500)          //占空比50%
                   {
                        ENA=1;
                        ENB=1;
               
                }
                else
                {
                ENA=0;
                ENB=0;
               
                }
                IN1=1;
                IN2=0;
                if(time<=500)          //占空比50%
                   {
                        ENA=1;
                        ENB=1;
                }
                else
                {
                 ENA=0;
                ENB=0;
                }
                }
}
void time0() interrupt 1
{
        TH0=0XFF;
        TL0=0Xff;
        time1++;
        
}

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

使用道具 举报

沙发
ID:332444 发表于 2019-8-10 03:58 | 只看该作者
time这个定义在哪?没看到
回复

使用道具 举报

板凳
ID:542954 发表于 2019-8-10 08:38 来自手机 | 只看该作者
你的这个定时中断给的时间或许过于短了吧,这是一个机器周期一次中断,算下来你pwm的周期也只有1000个机器周期,这个频率可能超过了电机的接受范围。你可以适量减少TH0和TL0的值试一下
回复

使用道具 举报

地板
ID:586622 发表于 2019-8-10 09:37 | 只看该作者
xianfajushi 发表于 2019-8-10 03:58
time这个定义在哪?没看到

主函数第一个就调用了
回复

使用道具 举报

5#
ID:586622 发表于 2019-8-10 09:39 | 只看该作者
witheMe 发表于 2019-8-10 08:38
你的这个定时中断给的时间或许过于短了吧,这是一个机器周期一次中断,算下来你pwm的周期也只有1000个机器 ...

#include<reg52.h>


typedef unsigned char u8;
typedef unsigned int  u16;
sbit IN1=P2^1;
sbit IN2=P2^0;
sbit IN3=P2^2;
sbit IN4=P2^3;
                         
#define L_go      IN1=0;IN2=1 //左轮前进
#define L_back    IN1=1;IN2=0 //左轮后退   
#define L_stop    IN1=0;IN2=0        //左轮停止,两个输出1也可以
#define R_go            IN3=0;IN4=1 //右轮前进
#define R_back          IN3=1;IN4=0 //右轮后退
#define R_stop          IN3=0;IN4=0 //右轮停止,两个输出1也可以
void main()
{
        while(1)
        {
         L_go;
         R_go;
        }       
}
我这样不用PWM直接让他动,为什么也不行
回复

使用道具 举报

6#
ID:542954 发表于 2019-8-10 10:22 | 只看该作者

那我觉得你或许需要检查一下你的硬件问题了,看是不是线松动了,单片机出了啥差错,稳压模块驱动模块是不是正常工作,电机是否可以正常转动
回复

使用道具 举报

7#
ID:332444 发表于 2019-8-10 10:22 | 只看该作者
longtimenosee 发表于 2019-8-10 09:37
主函数第一个就调用了

     if(time<=500)     我说的是这个
回复

使用道具 举报

8#
ID:586622 发表于 2019-8-10 12:56 | 只看该作者
witheMe 发表于 2019-8-10 10:22
那我觉得你或许需要检查一下你的硬件问题了,看是不是线松动了,单片机出了啥差错,稳压模块驱动模块是不 ...

我现在就是排查到应该是单片机没进入电路,但是我把L298N的GND和最小系统板的GND连在一起,这种接法没有问题
回复

使用道具 举报

9#
ID:586622 发表于 2019-8-10 12:56 | 只看该作者

这个打掉了一个1.。。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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