qwer20175 發表於 2012-11-6 13:21:58

8051如何控制兩顆SERVO

第一次發文 如有冒犯 請見諒!!

目前是使用網路上找到的這個程式碼 並且自己修改以下為程式碼

#include <regx51.h>
unsigned int dutytime=45536; //65536-45536就是責任週期
unsigned int ton=10000; //高電位比例=50%
unsigned int toff=10000; //低電位比例=50%
unsigned int temp; //給計時器工作用
void delay(int);      //    宣告延遲函數
void timer0_initialize(void)//初始化計時器0

{
    EA=0; //關閉中斷功能(所有中斷副程式失效)
    IE|=0x02; //開啟計時器中斷功能
    TMOD|=0x01; //設定計時器模式
    temp=65536-dutytime; //設定中斷一次的時間(預設是dutytime)
    TH0=temp/256; //填入高八位
    TL0=temp%256; //填入低八位
    TR0=1; //啟動計時器
    EA=1; //開啟中斷功能(中斷副程式可以執行)
}
void timer0_isr(void) interrupt TF0_VECTOR using 1 //使用計時器中斷副程式產生PWM
{
    if(P2_0==1)
    {
    TR0=0;
    temp=65536-toff;
    TH0=temp/256;
    TL0=temp%256;
    TR0=1;
    P2_0=0;
    }
    else
    {
    TR0=0;
    temp=65536-ton;
    TH0=temp/256;
    TL0=temp%256;
    TR0=1;
    P2_0=1;
    }
}
void main(void) //主程式開始
{
    timer0_initialize(); //呼叫計時器初始化副程式
    //主程式中可直接改變ton或toff即可改變高電位跟低電位佔的比例
    while(1)
    {
      if(P1_0==0)ton=2200;//2.2ms 左轉
      delay(400);       //延遲1秒            //if(P1_1==0)ton=1500;//1.5ms 中間
      ton=900;      //0.9ms 右轉角度0.5~2.2之間都可調角度
      toff=20000-ton;
      }
    }

//==副程式=============================================
/* 延遲函數,延遲約x 5ms */
void delay(int x)      // 延遲函數開始
{    int i,j;            // 宣告整數變數i,j
    for (i=0;i<x;i++)    // 計數x次,延遲x 5ms
      for (j=0;j<600;j++);// 計數600次,延遲5ms
}                        // 延遲函數結束

但是 我現在想要控制兩顆SERVO

動作方式如下 開關打開 第一顆SERVO轉到2.2MS 停頓約1秒後 第二顆SERVO轉到2.2MS

然後第二顆SERVO轉到2.2MS後馬上回到0.9MS 然後第一顆SERVO關閉

想請教各位先進 8051可以做到這樣的控制嗎??
頁: [1]
查看完整版本: 8051如何控制兩顆SERVO