2012-10-04 44 views
0

我一直试图在PIC16F877 MCU上使用PWM模块,但我所得到的只是CCP1/CCP2引脚上的低电平。无法让PWM在PIC16F877(PICC)上工作

配置和启动PWM模块的代码如下。

// Configure PWM 
// Timer 2 (PWM timebase) 
TMR2 = 0; //Clear timer 
TOUTPS0 = 0; 
TOUTPS1 = 0; 
TOUTPS2 = 0; 
TOUTPS3 = 1; //Postscaler -> 8 (previously set to 0) 
T2CKPS0 = 0; 
T2CKPS1 = 1; //Prescaler -> 16 
TMR2IF = 0; 
TMR2IE = 1; //Interrupt 
PR2 = 233; //~2.5ms 

//PWM1 config 
CCPR1L = 0x0F; 
CCP1X = 0; 
CCP1Y = 0; //PWM1 duty cycle 
TRISB2 = 0; //CCP1 pin is output (Error is here, see below) 
TMR2ON = 1; //Enable timer 
CCP1CON = 0x0c; //CPP1 is a PWM 

任何可以在PIC16器件上成功启动PWM的代码(PICC)都是有用的。

+0

的'TOUTPS [0-3]'指出'0000'是'1:1' postscalar – Dan

+0

Postcaler是暂时集到0,不是问题。发现问题,见下文。 – NeonMan

回答

0

CCP1引脚未被正确设置。 'TRISB2 = 0''TRISC2 = 0'

// Timer 2 (PWM timebase) 
TMR2 = 0; //Clear timer 
TOUTPS0 = 0; 
TOUTPS1 = 0; 
TOUTPS2 = 0; 
TOUTPS3 = 1; //Postscaler -> 8 
T2CKPS0 = 0; 
T2CKPS1 = 1; //Prescaler -> 16 
TMR2IF = 0; 
TMR2IE = 1; //Interrupt 
PR2 = 233; //~2.5ms 

//PWM1 config 
CCPR1L = 0xFF; 
CCP1X = 1; 
CCP1Y = 1; //PWM1 duty cycle 
TRISC2 = 0; //Previously was TRISB2 
TMR2ON = 1; 
CCP1CON = 0x0c; //CPP1 is a PWM