找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 198|回复: 4
收起左侧

51单片机控制两个舵机,没办法停下来,求大佬帮我看看哪里有问题

[复制链接]
ID:1116922 发表于 2024-4-16 22:09 | 显示全部楼层 |阅读模式
#include <intrins.h>
#include <REGX51.H>

sbit PWM = P1^0;  
sbit PWM2 = P0^1;


unsigned char counter,angle,counter2,angle2;     

void Delay3000ms()                //@11.0592MHz
{
        unsigned char i, j, k;

        _nop_();
        _nop_();
        i = 127;
        j = 18;
        k = 107;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}

void delay(unsigned char i)
{
  unsigned char j,k;
  for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}

void Timer1_Init()              
{
        TMOD = 0x10;            

        TL1 = 0x33;  
        TH1 = 0xFE;

        TF1 = 0;  
        TR1 = 1;   
        ET1 = 1;  
        EA  = 1;  
        PT1 = 1;  
}

void Timer1_Routine() interrupt 3
{
        TL1 = 0x33;  
        TH1 = 0xFE;  
        counter++;
        counter2++;
        if (counter >= 40)
        {
                counter = 0;
        }
        
        if (counter2 >= 40)
        {
                counter2 = 0;
        }
        
        if (counter < angle)
        {
                PWM = 1;
        }
        else
        {
                PWM = 0;
        }
        
        if (counter2 < angle2)
        {
                PWM2 = 1;
        }
        else
        {
                PWM2 = 0;
        }
}


void control ()
{
        counter = 0;
        angle = 1;  
  counter2 = 0;
        angle2 = 5;
}



void stop ()
{
  angle = 0;
  angle2 = 0;
}

#endif


#include "control.h"

void main ()
{
  Timer1_Init();
  control ();
  delay(100);
        stop();
}

main.png
control.h.png
回复

使用道具 举报

ID:161164 发表于 2024-4-17 09:22 | 显示全部楼层
control.h档只有#endif没有#ifndef没报错吗?
main.c里没有while(1),程序跑飞了
回复

使用道具 举报

ID:1116922 发表于 2024-4-19 12:49 | 显示全部楼层
lkc8210 发表于 2024-4-17 09:22
control.h档只有#endif没有#ifndef没报错吗?
main.c里没有while(1),程序跑飞了

我刚开始学习单片机,还是不太明白while(1)要加在哪里,
回复

使用道具 举报

ID:161164 发表于 2024-4-19 18:31 | 显示全部楼层
776749410 发表于 2024-4-19 12:49
我刚开始学习单片机,还是不太明白while(1)要加在哪里,

stop();后面
回复

使用道具 举报

ID:1116922 发表于 2024-4-21 12:11 | 显示全部楼层

#include "control.h"
int x;
void main ()
{

        Timer1_Init();
  control ();
  Delay3000ms();
        stop();
        while(1)
        {
        x=1;
        }
}

修改成这样也不行,我如果去掉了延时函数它就不会转了,我怀疑是不是延时函数的问题,但是我不清楚问题在哪
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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