51單片機分時控制8路舵機程序

2021-01-09 電子產品世界

本程序中用到的頭文件 12c5a.H下載:http://www.51hei.com/f/12c5a.rar

//分時控制舵機,採用的單片機是STC12c5a 51增強型單片機,晶振11.0592MHZ
#include <12c5a.H>

本文引用地址:http://www.eepw.com.cn/article/201612/324193.htm

void delay(uint16 time);
void Timer_init();
void Timer0(uint32 us);

uint16 xdata pwm[8]={1500,1500,1500,1500,1500,1500,1500,1500};

sbit pwm1=P0^0;
sbit pwm2=P0^1;
sbit pwm3=P0^2;
sbit pwm4=P0^3;
sbit pwm5=P0^4;
sbit pwm6=P0^5;
sbit pwm7=P0^6;
sbit pwm8=P0^7;

void main()
{
P0M1=0;
P0M0=0XFF;

Timer_init();
Timer0(100);
delay(100);
while(1)
{
;
}
}
void delay(uint16 time)
{
uint16 i;
uint16 j;
for(i=0;i<1000;i++)
for(j=0;j}
void Timer_init()
{
EA=1; //開總中斷
AUXR|=0xC0; //T0,T1工作在1T
TMOD|= 0x11; //T0工作在方式1,16位
ET0 = 1; //開定時器0中斷
}
void Timer0(uint32 us)
{
uint32 valu;
valu=us*11;
valu=valu;
valu=0xffff-valu;

TH0=valu>>8;
TL0=valu;
TR0 = 1;
}
void T0zd(void) interrupt 1
{
static uint8 i=1;
switch(i)
{
case 1:
{
pwm1=1;
Timer0(pwm[0]);
} break;
case 2:
{
pwm1=0;
Timer0(2500-pwm[0]);
} break;
case 3:
{
pwm2=1;
Timer0(pwm[1]);
} break;
case 4:
{
pwm2=0;
Timer0(2500-pwm[1]);
} break;
case 5:
{
pwm3=1;
Timer0(pwm[2]);
} break;
case 6:
{
pwm3=0;
Timer0(2500-pwm[2]);
} break;
case 7:
{
pwm4=1;
Timer0(pwm[3]);
} break;
case 8:
{
pwm4=0;
Timer0(2500-pwm[3]);
} break;
case 9:
{
pwm5=1;
Timer0(pwm[4]);
} break;
case 10:
{
pwm5=0;
Timer0(2500-pwm[4]);
} break;
case 11:
{
pwm6=1;
Timer0(pwm[5]);
} break;
case 12:
{
pwm6=0;
Timer0(2500-pwm[5]);
} break;

case 13:
{
pwm7=1;
Timer0(pwm[6]);
} break;
case 14:
{
pwm7=0;
Timer0(2500-pwm[6]);
} break;

case 15:
{
pwm8=1;
Timer0(pwm[7]);
} break;
case 16:
{
pwm8=0;
Timer0(2500-pwm[7]);
i=0;
} break;

default:break;

}

i++;
}


相關焦點

  • 利用單片機PWM信號進行舵機控制[圖]
    脈衝計數可以利用51單片機的內部計數器來實現,但是從軟體系統的穩定性和程序結構的合理性看,宜使用外部的計數器,還可以提高CPU的工作效率。實驗後從精度上考慮,對於FUTABA系列的接收機,當採用1MHz的外部晶振時,其控制電壓幅值的變化為0.6mV,而且不會出現誤差積累,可以滿足控制舵機的要求。
  • 51單片機控制舵機旋轉的設計
    這裡用到PCF8591 ADDA晶片 和51單片機機,和一個電位器。通過 控制 電位器,產生PWM波,控制舵機 旋轉。並在數碼管上顯示角度。 這是程序,、 /*----------------------------------------------- 名稱:IIC協議 PCF8591ADDA轉換 內容:此程序通過IIC協議對DAAD晶片操作,讀取電位器的電壓,並輸出模擬量,用LED亮度漸變指示,晶體選用12MHz -------------------------------------
  • 對180度360度sg90舵機的使用經驗+單片機程序
    大部資料都是在網上找到網友大神所共享的,我只是在理解他們的資料上加上了自己的一些註解,在網上找了幾種舵機的,剛接觸有點懵,之後找得多了就理解了,想要控制一個硬體就要先了解這個硬體。這裡有介紹180度舵機和360度舵機的具體使用,有網上大神的程序,這個更多的是一個網上對舵機使用的一個整合。
  • AT89C2051多路舵機控制電路詳解
    本文在綜合上述兩個單片機舵機控制方案基礎上,提出了一個新的設計方案,如圖4所示。該控制器中單片機可以產生8個通道的PWM信號,分別由AT89C2051的P1.0~Pl.7(12~19引腳)埠輸出。輸出的8 路PWM信號通過光耦隔離傳送到下一級電路中。因為信號通過光耦傳送過程中進行了反相,因此從光耦出來的信號必須再經過反相器進行反相。
  • 多路舵機控制PWM發生器的設計與Proteus仿真
    以Proteus和Keil軟體為基礎,介紹了在Proteus環境下利用51單片機產生多路PWM脈衝的實現方法。最後以一個典型的應用實例驗證了設計的可行性與可靠性。實驗證明,本系統可在單片機定時器資源有限的情況下同時對多個舵機的輸出轉角進行控制。
  • S12單片機模塊應用及程序下載調試
    DG128在Flash存儲控制及加密方面也有很強的功能,加解密可配合第三方軟體使用。     DG128單片機採用增強型16位HCS12 CPU,片內總線時鐘最高可達25MHz;片內資源包括8K RAM、128K Flash、2K EEPROM; SCI、SPI、PWM串行接口模塊;脈寬調製模塊(PWM)可設置成4路8位或者2路16位,邏輯時鐘選擇頻率寬。
  • 以STC12C5A60S2單片機為系統控制單元的系留飛艇地面監測系統設計
    艇載模塊需要完成的任務包括:通過無線通信模塊與地面站進行通信,根據制定的通信協議解析接收的命令,做相應的操作;為確保數據通信的正確性,將接收數據進行循環冗餘校驗,數據錯誤則放棄,正確則進行處理並由單片機PCA定時器生成PWM信號來控制雲臺水平和垂直轉動的舵機;與數字羅盤進行通信,獲取系留飛艇姿態信息發給地面站;單片機定時器0和定時器1對舵機帶動旋轉編碼器轉動時產生的脈衝進行計數並將其反饋給地面站;單片機外部中斷
  • 步進電機控制程序(c語言+51單片機)
    接齒輪傳感器 中斷 */sbit bujin_zx_stop = P3^3; /* 接步進電機 ,正向到位傳感器 ,為 0 停機 */sbit bujin_fx_stop = P3^4; /* 接步進電機 ,反向到位傳感器 ,為 0 停機 */sbit shache = P3^5; /* 接剎車控制
  • 通過51單片機來控制直流電機
    原理很簡單了 直接上電路圖和源程序吧看不清楚圖的請點保存 或者點開連接地址看大圖 下面是針對上面電路圖的程序(直接複製粘貼進去運行還是那句話 程序別光是複製粘貼 要一句句看懂 看出核心的那一段代碼是怎麼利用單片機加上一個晶片來控制電機的為以後自己寫其他驅動程序打基礎 );----------------------------------------------;名稱:51單片機來控制直流電機 ;主頻 6M晶震 51系列單片機;編譯環境:keil c51
  • 51單片機精確控制步進電機(有TB6600驅動)
    設備:51單片機開發板、TB6600驅動器、57BYG250B步進電機(二相)、直流開關電源。直流電源給驅動器供電,單片機給驅動器輸入脈衝,驅動器驅動步進電機。程序使用定時器中斷精確控制電機轉動(不考慮失步)。比如我採用16倍細分,則需給驅動輸入3200個脈衝,驅動才會使電機轉一圈,下面程序中1秒發送200個脈衝,則相應的電機16秒轉一圈。
  • 分時控制電熱水器的嵌入式控制器設計
    1 概述          隨著國家對家用電器節能和安全認證工作的開展,城市用電分時計費方式開始被推廣實施,即用電高峰在時收費高,用電低谷時收費低。
  • 《Arduino》基礎:舵機控制
    舵機是電機的一種,又加伺服電機,它和步進電機有異曲同工之妙,步進電機是可以設定轉過多少角度,而舵機是可以設定轉到的位置,可以說是指哪打哪,Arduino智能小車的前輪轉彎系統便是用的這種原理,在工業上機器人上,舵機的應用更是不勝枚舉。
  • 51單片機中斷過程與主程序調用子程序過程的比較
    LCALL與ACALL是MCS-51單片機的兩條調用指令,分別稱為長調用和絕對調用,兩指令主要區別在於LCALL後面操作數直接就是16位二進位的子程序入口地址;而ACALL後面操作數只是11位二進位數,子程序入口地址是把這11位數作為低位地址,再加上ACALL的下一條指令地址(即斷點地址)的高5位作為高位地址,從而形成16位的子程序入口地址
  • 《電子發燒友網51單片機設計方案TOP10》
    為了實現小車識別路線,判斷並自動躲避障礙,選擇正確的行進路線,障礙判斷採用單光束反射取樣紅外傳感器,驅動電機採用直流電機,控制核心採用MCS-51單片機。控制上採用分時復用技術,僅用一塊單片機實現了信號採集、線路判斷、電機控制等功能。迷宮由16×16個區組成。起點設在拐角處,終點設在中央,佔4個區。
  • 通過51單片機定時器/計數器實現精確延時
    MCS-51單片機內部共有兩個16位可編程定時器,計數器,即TO、Tl。既有定時功能,又有計數的功能。每個定時器都是由兩個8位的特殊功能寄存器THi和TLi組成(i=0、1)。TMOD是TO和Tl的工作方式控制寄存器,TCON是TO和Tl的運行狀態控制寄存器。
  • 單片機控制步進電機的原理
    二、設計方案    本設計採用51單片機AT89C51(晶振頻率為12MHZ)對四相六線制步進電機(內阻33歐,步進1.8度,額定電壓12V)進行控制。通過I/O口輸出的具有時序的方波作為步進電機的控制信號,信號經過晶片ULN2003驅動步進電機。ULN2003 是高耐壓、大電流達林頓陳列,由七個矽NPN 達林頓管組成。
  • PWM控制MOSFET搭建的H橋電路驅動直流電機仿真與單片機源碼
    #define INT16U unsigned int#define K1     RA5INT8U  DemoMode = 0;//-----------------------------------------------------------------// 主程序//-------------------
  • 關於STC單片機的幾點建議
    STC主要依靠高校學生市場和超低端小批量市場(51系列在工業用單片機上的份額並不大)生存多年,出了這麼多產品。而且那個神奇的ISP工具越做越像客戶端,也許有一天STC把編譯器做進去,直接就在下載工具裡面寫程序了。
  • 使用樹莓派控制16路舵機驅動板(pca9685)
    使用樹莓派控制16路舵機驅動板(pca9685)在樹莓派上,可以通過RPI.GPIO方便地輸出PWM進行舵機控制。:1p.start(dc)更改頻率:1p.ChangeFrequency(freq)更改佔空比:1p.ChangeDutyCycle(dc)停止 PWM:1p.stop()但當你同時使用多個舵機時
  • 51單片機IO埠基礎知識及應用
    本文就來說下89C51單片機的引腳IO埠及應用,學習單片機的IO口的應用也是入門單片機的第一步。上圖是89C51單片機的封裝引腳圖,89C51單片機有4個IO埠為P0~P3,每個埠有8個引腳,分別對應8個位0~7,每個埠的引腳都可以作為輸入輸出使用。