我正在尝试使用此代码进行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模块的功能,对吗?
我想念什么?
最佳答案
附加信息:
TMR 2正在计数。
当我在while循环中添加PORTC = 0xFF;
并再次调试代码时。除RC2(RC2 = CCP2的相应输出)外,端口C上的所有信号均已置位。
当我为CCP3尝试相同的代码时,将设置端口C上的所有信号,但RC2和RC6除外(RC6 = CCP3的对应输出)。
当我用PORTC = 0xFF;
替换PORTCbits.CCP2 = 1;
时,只有RC1设置为高。
这最后一个项目符号是否意味着将CCP2与RC1而不是RC2混合?