PIC16F877 (PICC) 无法使 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 = 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'

// 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

关于PIC16F877 (PICC) 无法使 PWM 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12719203/

相关文章:

c - 将代码从 PIC18F2480 迁移到 PIC18F2680 单片机

c - 如何将 10 位值传递给两个寄存器?

c# - 安装完软件后如何安装USB驱动

c++ - 使用 strcat 将字符附加到 C 中的字符串

c - 使用 AT89S51 串行传输整数值

c - AVR 键盘 COM-08653 问题

c - XC8编译器错误 "no identifier in declaration"

c - MPI 和线程

python - 当 QApplication 退出时,QT 引发段错误(核心已转储)

c - 使用 tiva 系列 c 将数据从微 Controller 发送到计算机