Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 4607|回復: 0
打印 上一主題 下一主題

8051如何控制兩顆SERVO

[複製鏈接]
跳轉到指定樓層
1#
發表於 2012-11-6 13:21:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
第一次發文 如有冒犯 請見諒!!

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

#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可以做到這樣的控制嗎??
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-12-21 21:11 , Processed in 0.202836 second(s), 7 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表