0

我正在尝试使用此代码进行 PWM 输出,但显然缺少某些内容。因为当我在 MPLab 中检查逻辑分析仪时,CCP2 输出没有任何反应。我正在使用 pic18f25k80。

void main() {

    // Set up PWM
    CCP2CON = 0b00001100;       // Enable PWM on CCP2, bits 5:4 are LSB part of duty cycle
    CCPTMRS = 0b00000000;       // Use timer2 for all CCP modules
    CCPR2L = 31;                // MSB part of duty cycle
    TRISC = 0b00000000;         // Set port C as output
    PORTC = 0;                  // Clear port C

    // Set Up timer2
    PR2 = 249;                  // PWM period = (PR+1)*4*Tcy = 1ms
    T2CON = 0b00000100;         // Enable TMR2 with prescaler = 1

    while(1)
    {
    }
}

我期待什么时候

  • TMR2 = PR2,CCP2 输出翻转,定时器复位

  • 此外,TMR2 = CCPR2L(占空比),CCP2 输出切换

  • TMR2 一直计数,直到达到第 1 步。

    我想这应该是自动发生的。我的意思是我不必为此编写代码,因为那是 PWM 模块的功能,对吧?我错过了什么?

4

1 回答 1

0

附加信息:

  • TMR 2 正在计数。
  • 当我添加PORTC = 0xFF;while 循环并再次调试代码时。除了 RC2(RC2 = CCP2 的相应输出)外,端口 C 上的所有信号均已设置。
  • 当我为 CCP3 尝试相同的代码时,端口 C 上的所有信号都已设置,除了 RC2 和 RC6(RC6 = CCP3 的相应输出)。
  • 当我用 替换PORTC = 0xFF;PORTCbits.CCP2 = 1;,只有 RC1 设置为高。

最后一个项目符号是否意味着 CCP2 与 RC1 而不是 RC2 复用?

于 2014-10-28T09:19:10.683 回答