| 
 | 
 
第一次發文 如有冒犯 請見諒!! 
 
目前是使用網路上找到的這個程式碼 並且自己修改以下為程式碼 
 
#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可以做到這樣的控制嗎?? |   
 
 
 
 |