标题: 51单片机控制两个舵机,没办法停下来,求大佬帮我看看哪里有问题 [打印本页]

作者: 776749410    时间: 2024-4-16 22:09
标题: 51单片机控制两个舵机,没办法停下来,求大佬帮我看看哪里有问题
#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 (16.41 KB, 下载次数: 56)

main.png

control.h.png (57.07 KB, 下载次数: 49)

control.h.png

作者: lkc8210    时间: 2024-4-17 09:22
control.h档只有#endif没有#ifndef没报错吗?
main.c里没有while(1),程序跑飞了
作者: 776749410    时间: 2024-4-19 12:49
lkc8210 发表于 2024-4-17 09:22
control.h档只有#endif没有#ifndef没报错吗?
main.c里没有while(1),程序跑飞了

我刚开始学习单片机,还是不太明白while(1)要加在哪里,
作者: lkc8210    时间: 2024-4-19 18:31
776749410 发表于 2024-4-19 12:49
我刚开始学习单片机,还是不太明白while(1)要加在哪里,

stop();后面
作者: 776749410    时间: 2024-4-21 12:11
lkc8210 发表于 2024-4-19 18:31
stop();后面

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

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

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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1