📄 pwm3.c
字号:
#include "p18f452.h"
/* ****************************************************************
** 函 数 名: initial()
** 功能描述: 系统初始化子程序,放在程序首部
*************************************************************** */
void initial(void)
{
INTCON=0x00; //* bit7-bit0:关总中断 */
ADCON1=0X07; //* 设置数字输入输出口 */
PIE1=0; //* PIE1 的中断不使能 */
PIE2=0; //* PIE2 的中断不使能 */
// PIE3=0; //* PIE3 的中断不使能 */
}
/* **************************************************************
** 函 数 名: PWMSet()
** 功 能:CCP1输出PWM设置,设置完成后即输出PWM
****************************************************************** */
//设置PWM 操作
//通过以下步骤将CCP 模块配置为PWM 操作:
//1. 写入PR2 寄存器以设定PWM 周期。
//2. 写入CCPR1L 寄存器和CCP1CON<5:4> 位以设置PWM 占空比。
//3. 将TRISC<2> 位清零以将CCP1 引脚设为输出。
//4. 写入T2CON 以设置TMR2 预分频值并使能Timer2。
//5. 将CCP1 模块配置为PWM 模式。
//6. speed为速度,取值范围从0~127
void PWMinit(void)
{ PR2=0X7F; //* 设置PWM工作周期=((PR2)+1)*4*Tosc*(TMR2前分频值);Tosc=fosc/4*/ 7F--25K
CCPR1L=0; //* CCP1高电平值高8位为1000 0000=80,占空比0 */
CCPR2L=0; //* CCP2高电平值高8位为1000 0000=80,占空比0 */
TRISC=TRISC&0XF9; //* 设置CCP1(RC2)引脚为输出方式 */
//TRISC=TRISC&0XFD; //* 设置CCP2(RC1)引脚为输出方式 */
CCP1CON=0X0C; //* CCP1模块为PWM工作方式,高电平值低2位为00*/
CCP2CON=0X0C; //* CCP2模块为PWM工作方式,高电平值低2位为00*/
T2CON=0X04; //* 打开TMR2,且使其前后分频为1,同时开始输出PWM波形 */
PIE1bits.RCIE=0; //CCP1IE=0; //* CCP1中断禁止 */
}
void PWMSet1(unsigned char speed)
{
CCPR1L=speed; //* CCP1高电平值高8位为speed */
}
void PWMSet2(unsigned char speed)
{
CCPR2L=speed; //* CCP2高电平值高8位为speed */
}
void main(void)
{
initial(); //* 系统初始化子程序 */
PWMinit();
RCONbits.IPEN=1; // 使能中断高低优先级
INTCON=INTCON|0xc0; // 开总中断、开外围接口中断
while(1)
{
PWMSet1(70);
PWMSet2(127);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -