📄 pwm.c
字号:
/*
1. 通过写入PR2 寄存器来设置PWM 周期。
2. 通过写入CCPR1L 寄存器和CCP1CON<5:4> 位来设置PWM 占空比。
3. 用户必须通过清零T R ISC<5> 位将RC5/T1CKI/CCP1/SEG10 引脚配置为输出引脚。
4. 通过写T2CON 来设置TMR2 预分频值并使能Timer2。
5. 配置CCP2 模块使之工作于PWM 模式。
PWM 周期 = [(PR2) + 1] *4 * TOSC * (TMR2 预分频比),用时间单位表示
PWM 占空比 = (CCPR1L:CCP1CON<5:4>) ? TOSC ?(TMR2 预分频值)
TMR2 预分频比=16 TOSC=1/4M CCPR1L:CCP1CON<5:4>=256
PR2=256 25%
*/
#include <pic.h>
/*
该程序用于使CCP1模块产生分辨率为10位的PWM波形,占空比为50%
*/
void CCP2INIT()
{
PR2=0XFF; //设置PWM的工作周期
CCPR2L=0X3F;
CCP2X=1;
CCP2Y=1;
TRISD2=0;
T2CON=0X07;
/*
bit 7 未用:读为0
bit 6-3 TOUTPS<3:0>:Timer2 输出后分频比选择位
0000 = 1:1 后分频比
0001 = 1:2 后分频比
?
?
?
1111 = 1:16 后分频比
bit 2 TMR2ON:Timer2 使能位
1 = 使能Timer2
0 = 禁止Timer2
bit 1-0 T2CKPS<1:0>:Timer2 时钟预分频比选择位
00 = 预分频比为1
01 = 预分频比为4
1x = 预分频比为16
*/
CCP2CON=0X3C; //设置CCP2模块为PWM工作方式,且其工作
/*
bit 7-6 未用:读为0
bit 5-4 CCPxX:CCPxY:PWM 最低有效位
捕捉模式:
未使用
比较模式:
未使用
PWM 模式:
这些位是PWM 占空比的低2 位。高8 位在CCPRxL 中。
bit 3-0 CCPxM<3:0>:CCPx 模式选择位
11xx = PWM 模式
*/
CCP2IE=1;
}
main()
{
IRCF2=1;
IRCF1=1;
IRCF0=1;
HTS=1;
SCS=1; //时钟的初始化,令时钟为8M的内部时钟
CCP2INIT(); //CCP1模块的PWM工作方式初始化
//打开TMR2,且使其前分频为0,
//同时开始输出PWM波形
do
{
;
}while(1); //系统开始输出PWM波形。如果系统是
//多任务的,则可以在此执行其它任务,而
//不会影响PWM波形的产生
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -