標(biāo)題: 為什么主函數(shù)里的循環(huán)是空的 [打印本頁(yè)]

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


作者: sxhwdz    時(shí)間: 2018-10-20 08:56
因?yàn)橹骱瘮?shù)只有一個(gè)任務(wù)就是初始化定時(shí)器,完成初始化以后,就把所有的任務(wù)派發(fā)給定時(shí)器中斷了,只需悠閑的打空轉(zhuǎn)消磨時(shí)間,而定時(shí)器中斷則會(huì)忠誠(chéng)地按時(shí)完成各自的任務(wù)。
作者: 虛幻大千    時(shí)間: 2018-10-21 16:50
他是起一個(gè)控制作用的
作者: 藍(lán)琪    時(shí)間: 2018-10-23 10:51
sxhwdz 發(fā)表于 2018-10-20 08:56
因?yàn)橹骱瘮?shù)只有一個(gè)任務(wù)就是初始化定時(shí)器,完成初始化以后,就把所有的任務(wù)派發(fā)給定時(shí)器中斷了,只需悠閑的 ...

了解,謝謝了
作者: reiquet    時(shí)間: 2018-10-24 13:17
初始化




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1