找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1575|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)控制兩個舵機(jī),沒辦法停下來,求大佬幫我看看哪里有問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1116922 發(fā)表于 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 (16.41 KB, 下載次數(shù): 56)

main.png

control.h.png (57.07 KB, 下載次數(shù): 49)

control.h.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

5#
ID:1116922 發(fā)表于 2024-4-21 12:11 | 只看該作者

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

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

修改成這樣也不行,我如果去掉了延時函數(shù)它就不會轉(zhuǎn)了,我懷疑是不是延時函數(shù)的問題,但是我不清楚問題在哪
回復(fù)

使用道具 舉報

地板
ID:161164 發(fā)表于 2024-4-19 18:31 | 只看該作者
776749410 發(fā)表于 2024-4-19 12:49
我剛開始學(xué)習(xí)單片機(jī),還是不太明白while(1)要加在哪里,

stop();后面
回復(fù)

使用道具 舉報

板凳
ID:1116922 發(fā)表于 2024-4-19 12:49 | 只看該作者
lkc8210 發(fā)表于 2024-4-17 09:22
control.h檔只有#endif沒有#ifndef沒報錯嗎?
main.c里沒有while(1),程序跑飛了

我剛開始學(xué)習(xí)單片機(jī),還是不太明白while(1)要加在哪里,
回復(fù)

使用道具 舉報

沙發(fā)
ID:161164 發(fā)表于 2024-4-17 09:22 | 只看該作者
control.h檔只有#endif沒有#ifndef沒報錯嗎?
main.c里沒有while(1),程序跑飛了
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表