Can';t使PWM在PIC16F877(PICC)上工作

Can';t使PWM在PIC16F877(PICC)上工作,c,microcontroller,pic,pwm,C,Microcontroller,Pic,Pwm,我一直在尝试在PIC16F877 MCU上使用PWM模块,但我得到的只是两个CCP1/CCP2引脚上的平坦低电平 配置和启动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 =

我一直在尝试在PIC16F877 MCU上使用PWM模块,但我得到的只是两个CCP1/CCP2引脚上的平坦低电平

配置和启动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),这些代码将非常有用。

CCP1引脚未正确设置。”TRISB2=0'应为“TRISC2=0”


TOUTPS[0-3]
声明
0000
1:1
postscalarPostcaler临时设置为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