新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > PIC16F877A單片機的PWM功能

PIC16F877A單片機的PWM功能

作者: 時間:2016-11-11 來源:網(wǎng)絡 收藏
說明:設置PWM 操作

通過以下步驟將CCP 模塊配置為PWM 模式:
1. 寫入PR2 寄存器以設定PWM 周期。
2. 寫入DCxB9:DCxB0 位以設置PWM 占空比。
3. 將相應的TRIS 位清零以將CCPx 引腳設為輸出。
4. 寫入T2CON 以設置TMR2 預分頻比并使能Timer2。
5. 將CCP 模塊配置為PWM 模式。

本文引用地址:http://butianyuan.cn/article/201611/316762.htm

程序:

#include
#define uint unsigned int
#define uchar unsigned char
__CONFIG(0x3B31);

void initPWM();
void Delay1ms(uint time);

/******************************************
***主函數(shù)功能:PWM初始化,PWM占空比周期性變化
*******************************************/
void main()
{
uchar i;
initPWM();
while(1)
{
for(i=0;i<256;i++)
{
CCPR1L = i;
TMR2ON = 1;
Delay1ms(100);
TMR2ON = 0;
}
}

}

/******************************************************************
***函數(shù)功能:PWM初始化,設置PWM周期;
PWM周期=[(PR2)+1]*4*TOSC*(TMR2預分頻比)
=(255+1)*4*(1/4000000)*16 s = 4.096 ms

PWM占空比=(DCxB9:DCxB0)*Tosc*(TMR2預分頻比)
=1024*(1/4000000)*16 s = 4.096 ms

注意:如果PWM占空比值大于PWM周期,CCPx 引腳將
不會被清零,這時占空比將達到100%;

*****************************************************************/
void initPWM()
{
INTCON = 0x00;//關(guān)閉總中斷和外部中斷
PR2 = 0xff;//寫入PR2寄存器設置PWM周期,PWM周期=[(PR2)+1]*4*TOSC*(TMR2預分頻比)
CCP1CON = 0x3C; //設置PWM占空比低2位為11,設置為PWM模式
CCPR1L = 0x00;//設置PWM占空比高8位
TRISC = 0xfb;//設置CCP1口為輸出
T2CON = 0x02;//設置TMR2預分頻為16;
}

void Delay1ms(uint time)
{
uint i,j;
for(i=time;i>0;i--)
for(j=110;j>0;j--);
}



關(guān)鍵詞: PIC16F877A單片機PWM功

評論


技術(shù)專區(qū)

關(guān)閉