找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7558|回復(fù): 1
收起左側(cè)

stc51單片機(jī)PCA控制全流程命令

[復(fù)制鏈接]
ID:26188 發(fā)表于 2015-2-18 01:10 | 顯示全部樓層 |閱讀模式
定時器頻率
#define   T100Hz   (FOSC / 12 / 100)
方波脈沖頻率
#define   T100KHz   (FOSC / 4 / 100000)
struct PCA_
{//PCA_結(jié)構(gòu)數(shù)據(jù)類型
    unsigned int        Cycle;            //頻率
    unsigned int        Match;            //重裝值容器
    unsigned int        Dou;              //擴(kuò)展精度自加容器
    unsigned int        Doub;             //擴(kuò)展精度終點(diǎn)容器
    unsigned char       PWM_Value;        //脈寬值
}PCA_0,PCA_1;                             //結(jié)構(gòu)變量名
void PCA_isr() interrupt 7 using 1
{
    if(CCF0)
    {
        CCF0 = 0;                  //清中斷
        CCAP0L = PCA_0.Match;
        CCAP0H = PCA_0.Match >> 8;  //裝入比較值到比較捕獲寄存器
        PCA_0.Match += T100Hz;      //計算下次需要裝入的值
        if (PCA_0.Dou-- == 0)
            {//如果Dou自減1后為0
            PCA_0.Dou = PCA_0.Doub;  //擴(kuò)展定時時間
            TI=1;
            Uart1_SendData('0');
        }
    }
    if(CCF1)
    {
        CCF1 = 0;                   //清中斷
        CCAP1L = PCA_1.Match1;
        CCAP1H = PCA_1.Match1 >> 8;  //裝入比較值到比較捕獲寄存器
        PCA_1.Match1 += T100Hz;      //計算下次需要裝入的值
        if (PCA_1.Dou-- == 0)
            {//如果Dou自減1后為0
            PCA_1.Dou = PCA_1.Doub;  //擴(kuò)展定時時間
            TI=1;
            Uart1_SendData('1');
        }
    }

}
void PCA_Timers_Setup()
{
//清空PCA控制器、計數(shù)器
    CCON = 0;                 //清計數(shù)溢出CF,PCA時鐘停止,清模塊0、1中斷標(biāo)記
    CL = 0;                   //清PCA16位計數(shù)器
    CH = 0;
//計數(shù)時鐘選擇
    CMOD&=0xF1;               //設(shè)置PCA 16位計數(shù)器工作在12T模式
    //CMOD|=0x02;               //設(shè)置PCA 16位計數(shù)器工作在2T模式
    //CMOD|=0x04;               //設(shè)置PCA 16位計數(shù)器使用定時器1溢出計數(shù)
    //CMOD|=0x06;               //設(shè)置PCA 16位計數(shù)器計數(shù)使用P1.2\P4.1輸入脈沖,最高速度2T
    //CMOD|=0x08;               //設(shè)置PCA 16位計數(shù)器計數(shù)使用系統(tǒng)時鐘全速
    //CMOD|=0x0A;               //設(shè)置PCA 16位計數(shù)器工作在4T模式
    //CMOD|=0x0C;               //設(shè)置PCA 16位計數(shù)器工作在6T模式
    //CMOD|=0x0E;               //設(shè)置PCA 16位計數(shù)器工作在8T模式
//計數(shù)溢出控制
    CMOD&=0xFE;               //禁止PCA計數(shù)器溢出產(chǎn)生中斷標(biāo)志CF
    //CMOD|=0x01;               //允許PCA計數(shù)器溢出產(chǎn)生中斷標(biāo)志CF
//模塊0定時器與高速方波模式設(shè)定裝入值
    PCA_0.Match = T100Hz;       //裝入100Hz重裝值
    CCAP0L = PCA_0.Match;
    CCAP0H = PCA_0.Match >> 8;  //裝入比較值到比較捕獲寄存器
    PCA_0.Match += T100Hz;      //重裝值累加
//模塊1定時器與高速方波模式設(shè)定裝入值
    PCA_1.Match = T100Hz;       //裝入100Hz重裝值
    CCAP1L = PCA_1.Match;
    CCAP1H = PCA_1.Match >> 8;  //裝入比較值到比較捕獲寄存器
    PCA_1.Match += T100Hz;      //重裝值累加
//模塊0PWM模式設(shè)定裝入值
    CCAP0H = CCAP0L = PCA_0.PWM_Value;   //輸出50%PWM波
    CCAP0H = CCAP0L = 0x00;
    PCAPWM0 = 0x00;               //固定輸出高
    CCAP0H = CCAP0L = 0xFF;
    PCAPWM0 = 0x03;               //固定輸出低
//模塊1PWM模式設(shè)定裝入值
    CCAP1H = CCAP1L = PCA_1.PWM_Value;   //輸出50%PWM波
    CCAP1H = CCAP1L = 0x00;
    PCAPWM1 = 0x00;               //固定輸出高
    CCAP1H = CCAP1L = 0xFF;
    PCAPWM1 = 0x03;               //固定輸出低

//模塊0捕獲模式設(shè)定
    CCAPM0 = 0x11;            //負(fù)捕獲,開匹配中斷CCFO
    //CCAPM0 = 0x21;            //正捕獲,開匹配中斷CCFO
    //CCAPM0 = 0x31;            //雙向捕獲,開匹配中斷CCFO
//模塊1捕獲模式設(shè)定
    CCAPM1 = 0x11;            //負(fù)捕獲,開匹配中斷CCFO
    //CCAPM1 = 0x21;            //正捕獲,開匹配中斷CCFO
    //CCAPM1 = 0x31;            //雙向捕獲,開匹配中斷CCFO
//模塊0定時器模式設(shè)定
    CCAPM0 = 0x49;            //開比較器,允許計數(shù)器值與比較器相同時產(chǎn)生中斷CCF0
//模塊1定時器模式設(shè)定
    CCAPM1 = 0x49;            //開比較器,允許計數(shù)器值與比較器相同時產(chǎn)生中斷CCF0
//模塊0高速方波模式
    CCAPM0 = 0x4D;            //與定時器模式相同情況下,TOG置1,在發(fā)生匹配時,P1.3\P4.2電位直接翻轉(zhuǎn)
//模塊1高速方波模式
    CCAPM1 = 0x4D;            //與定時器模式相同情況下,TOG置1,在發(fā)生匹配時,P1.4\P4.3電位直接翻轉(zhuǎn)
//模塊0PWM模式
    CCAPM0 = 0x42;            //允許比較器比較,選擇PWM開關(guān),硬件產(chǎn)生PWM波,關(guān)閉比較中斷CCFO
//模塊1PWM模式
    CCAPM1 = 0x42;            //允許比較器比較,選擇PWM開關(guān),硬件產(chǎn)生PWM波,關(guān)閉比較中斷CCF1
//公用
    CR = 1;                   //計數(shù)器開始計數(shù)
    EA = 1;                   //開總中斷
    PCA_0.Dou = 0;
    PCA_1.Dou = 0;             //中斷內(nèi)擴(kuò)展定時時間
}




相關(guān)帖子

回復(fù)

使用道具 舉報

ID:91009 發(fā)表于 2015-9-24 23:07 | 顯示全部樓層
有問題請教
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表