用延時程序會造成整個程序大部分時間都卡在 延時上,,,整個程序運行效率不高
要學會用定時器,無論你控制幾個電機 只要一個定時器就夠了
利用定時器中斷產生時間基準,如1ms
當定時器進入中斷后 變臉自加加
當加到你需要的值時候 換相 , 處理完記得清零變量
這樣你要控制多個電機不同轉速 只要聲明幾個相應變量 即可
void TM0_Isr() interrupt 1
{
motor1++;//電機1
motor2++;//電機2
motor3++;電機3
motor4++;電機4
}
void main()
{
TMOD = 0x00;
TL0 = 0x66; //65536-11.0592M/12/1000
TH0 = 0xfc;
TR0 = 1; //啟動定時器
ET0 = 1; //使能定時器中斷
EA = 1;
while (1){if(motor1==10){motor1=0; } //判斷是否=10Ms 清空變量 然后電機1換相
if(motor2==20){motor2=0; } //判斷是否=20Ms 清空變量 然后電機2換相
if(motor3==30){motor3=0; } //判斷是否=30Ms 清空變量 然后電機2換相
if(motor4==40){motor4=0; }//判斷是否=40Ms 清空變量 然后電機2換相
}
按這個思路就算10個電機不同轉速都不會卡
|