PIC18F25K80PWM输出例程
时间: 2023-08-05 12:01:58 浏览: 284
PIC18F25K80
以下是PIC18F25K80芯片的PWM输出例程,假设我们要通过RC2口输出PWM波,占空比为50%:
```c
#include <xc.h>
#include <stdio.h>
// 配置寄存器
#pragma config FOSC = INTIO67 // 内部振荡器
#pragma config PWRT = OFF // 关闭上电延时
#pragma config WDTEN = OFF // 关闭看门狗定时器
#pragma config PBADEN = OFF // 关闭端口B的模拟输入功能
#pragma config LVP = OFF // 关闭低电压编程模式
// 初始化函数
void initPWM() {
TRISCbits.RC2 = 0; // 将RC2口配置为输出
PR2 = 249; // 设定PWM周期为4us
T2CON = 0b00000111; // 启动定时器2,预分频1:16
CCP1CON = 0b00111100; // 设定PWM模式为单边模式,PWM输出于RC2口
CCPR1L = 0b00001111; // 设定PWM占空比为50%
}
// 主函数
void main() {
OSCCON = 0b01110010; // 设置内部振荡器频率为8MHz
initPWM(); // 初始化PWM
while(1) {
// 程序主循环
}
}
```
在上面的例程中,我们先通过`initPWM()`函数进行了PWM的初始化设置,其中`TRISCbits.RC2 = 0`将RC2口配置为输出,`PR2`和`T2CON`分别配置了PWM的周期和预分频,`CCP1CON`和`CCPR1L`则分别配置了PWM的模式和占空比。在主函数中,我们只需要进入一个死循环即可,因为PWM的输出会一直保持在设定的占空比上。
需要注意的是,这里的占空比是通过`CCPR1L`和`CCP1CON`两个寄存器进行设定的,具体的计算公式是:
$$DutyCycle = \frac{CCPR1L \times 256 + CCP1CON}{(PR2+1)\times4} \times 100\%$$
其中,`CCPR1L`为高8位,`CCP1CON`为低2位,`PR2`为设定的PWM周期。所以,在上面的例程中,我们将`CCPR1L`设为`0b00001111`,`CCP1CON`设为`0b00111100`,就可以得到占空比为50%的PWM输出。
阅读全文