📄 pwm.c
字号:
// PWM period = [(PR2) + 1] x 4 x Tosc x (TMR2 prescale value)=8000
// PWM duty cycle = (CCPR1L:CCP1CON<5:4>) x Tosc x (TMR2 prescale value)
// PR2=0xF9; // TMR2值,用于设置PWM Timer2 Period
// CCP1CON=0x0f; // ccp1 为pwm mode, CCP1CON<5:4>为00,分辨率为8位
// T2CON=0x04; // 预分频为1:1,Postscale为1:1,TMR2使能
/**************************************************************************
*** 程序思想:PWM period恒定为8000,通过改变(CCPR1L:CCP1CON<5:4>)的值
*** 而改变duty cycle,使其在0~8184之间变化
***************************************************************************/
#include <pic.h>
void pwm_out(unsigned int dat)
{
unsigned char buf;
buf = (unsigned char)(dat&0x00ff);
buf &= 0x03;
buf = buf<<4;
CCP1CON |= buf; // 共十位,CCP1CON的5:4为地2为,CCPR1L为高8位
CCP2CON |= buf;
dat = dat>>2;
CCPR1L = (unsigned char)(dat&0x00ff);
CCPR2L = (unsigned char)(dat&0x00ff);
// CCPR2L = i;
//CCP2CON=0x0f;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -