在網(wǎng)上看到的一個PWM控制雙舵機的程序,為什么主函數(shù)里的循環(huán)是空的?程序是對的嗎?求解
sbit SEV_PWM = P0^0; //上下舵機信號位 sbit SEH_PWM = P0^1; //左右舵機信號位 unsigned char count = 0; unsigned char SEV_count = 15; unsigned char SEH_count = 15; /* 串口初始化、定時器T0、T1初始化 */ void Com_Init() { IP = 0x08; PCON &= 0x7F; TMOD &= 0x00; TMOD |= 0x21; //定時器0設置為16為定時器方式1,定時器1配置波特率為自動重載方式2 SCON= 0x50; //串口工作在方式1,8位異步通信 TH1 = 0xfd; //定時器1設置為在11.0592下波特率為9600 TL1 = 0xfd; ES = 1; //打開串口中斷 ET1 = 0; //關閉定時器1中斷 TR1 = 1; //打開定時器1 TH0 = 0xff; //配置定時器0初值,溢出時間為0.1ms TL0 = 0xa4; ET0 = 1; //打開定時器0中斷 TR0 = 1; //開啟定時器0 } /* 定時器0中斷服務程序 */ void Time0_Int() interrupt 1 { TR0 = 0; //關閉定時器0 TH0 = 0xff; //重裝初值0.1ms TL0 = 0xa4; //舵機1 if(count <= SEH_count) //控制占空比左右 { //如果count的計數(shù)小于(5-25)也就是0.5ms-2.5ms則這段小t周期持續(xù)高電平。產(chǎn)生方波 SEH_PWM = 1; } else { SEH_PWM = 0; } //舵機2 if(count <= SEV_count) //控制占空比上下 { SEV_PWM = 1; } else { SEV_PWM = 0; } count++; if (count >= 200) //T = 20ms則定時器計數(shù)變量清0 { count = 0; } TR0 = 1; //開啟定時器0 } void main() { Com_Init(); while(1) { ; } } /* 串口中斷函數(shù) */ void uart_ser() interrupt 4 { if (RI == 0) { return; } ES = 0; RI = 0; command = SBUF; //將接收到的數(shù)據(jù)傳給command switch(command) { case 'f': //舵機向上轉 { SEV_count++; if(SEV_count >= 25) { SEV_count = 25; } count = 0; //占空比參數(shù)t改變,讓定時器重新計數(shù) break; } case 'g': { SEV_count--; if(SEV_count <= 5) { SEV_count = 5; } count = 0; break; } case 'h': { SEH_count++; if(SEH_count >= 25) { SEH_count = 25; //保持角度180度。 } count = 0; break; } case 'i': { SEH_count--; if(SEH_count <= 5) //保持角度0度 { SEH_count = 5; } count = 0; break; } case 'k': //舵機復位 { SEH_count = 15; SEV_count = 15; count = 0; break; } default: { break; } } ES = 1; //打開串口 }
|