PIC16F877A單片機(jī)的PWM功能
通過以下步驟將CCP 模塊配置為PWM 模式:
1. 寫入PR2 寄存器以設(shè)定PWM 周期。
2. 寫入DCxB9:DCxB0 位以設(shè)置PWM 占空比。
3. 將相應(yīng)的TRIS 位清零以將CCPx 引腳設(shè)為輸出。
4. 寫入T2CON 以設(shè)置TMR2 預(yù)分頻比并使能Timer2。
5. 將CCP 模塊配置為PWM 模式。
程序:
#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初始化,設(shè)置PWM周期;
PWM周期=[(PR2)+1]*4*TOSC*(TMR2預(yù)分頻比)
=(255+1)*4*(1/4000000)*16 s = 4.096 ms
PWM占空比=(DCxB9:DCxB0)*Tosc*(TMR2預(yù)分頻比)
=1024*(1/4000000)*16 s = 4.096 ms
注意:如果PWM占空比值大于PWM周期,CCPx 引腳將
不會被清零,這時(shí)占空比將達(dá)到100%;
*****************************************************************/
void initPWM()
{
INTCON = 0x00;//關(guān)閉總中斷和外部中斷
PR2 = 0xff;//寫入PR2寄存器設(shè)置PWM周期,PWM周期=[(PR2)+1]*4*TOSC*(TMR2預(yù)分頻比)
CCP1CON = 0x3C; //設(shè)置PWM占空比低2位為11,設(shè)置為PWM模式
CCPR1L = 0x00;//設(shè)置PWM占空比高8位
TRISC = 0xfb;//設(shè)置CCP1口為輸出
T2CON = 0x02;//設(shè)置TMR2預(yù)分頻為16;
}
void Delay1ms(uint time)
{
uint i,j;
for(i=time;i>0;i--)
for(j=110;j>0;j--);
}
評論