pic16f1829 c语言,PIC16F1829 PWM模块初始化及应用

//timer6 前一级预分频值

#defineTIMER6_1DIV1(0<<0)

#defineTIMER6_1DIV4(1<<0)

#defineTIMER6_1DIV16(2<<0)

#defineTIMER6_1DIV64(3<<0)

//----------------

#defineMOD_PWM0X0C//PWM模式

#defineMOD_CMP0X09//比较输出模式

#defineMOD_CMPI0X0A//比较中断模式

//---250-8K__125-16K------------

//#defineVT_8KPWM(uint8)250

#defineVT_16KPWM(uint8)125

#defineV_PWMFREVT_16KPWM //PWM的周期/频率

#ifdefined(VT_8KPWM) && defined(VT_16KPWM)

#error both define VT_8KPWM and VT_16KPWM!!!

#endif

#ifdefVT_8KPWM//8k pwm 调节占空比

#defineSetPwmCcpA(x)CCPR1L = x

#defineSetPwmCcpB(x)CCPR2L = x

#defineSetPwmCcpC(x)CCPR3L = x

//#defineSetPwmCcpC(x)CCPR4L = x

#else //def VT_16KPWM //16k pwm 调节占空比

#defineSetPwmCcpA(x)CCPR1L = (x>>1);

#defineSetPwmCcpB(x)CCPR2L = (x>>1);

#defineSetPwmCcpC(x)CCPR3L = (x>>1);

//#defineSetPwmCcpC(x)CCPR4L = (x>>1);

#endif

//------------------------------------------

#defineCCP4_IE_ENBCCP4IE = 1

#defineCCP4_IE_DISCCP4IE = 0

//*************************************

// 函数名称:Init_Eccp

// 函数功能:捕捉/比较功能设置

// 入口参数:PWM的时基TIMER6的分频参数 占空比初值 PWM周期值

// 出口参数:无

//

//***************************************

void Init_Eccp(uint8 Prsc,uint8 Tcon,uint8 Tcyc)

{

//CCPR1H = (uint8)(Tcon>>8) ;

CCPR1L = (uint8)(Tcon&0xff) ;//PWM 占空比

//CCPR2H = CCPR1H ;

CCPR2L = CCPR1L ;

//CCPR3H = CCPR1H ;

CCPR3L = CCPR1L ;

//CCPR4H = CCPR1H ;

CCPR4L = CCPR1L ;

CCP1CON = MOD_PWM ; //PWM模式 高电平有效 PXA被调制

CCP2CON = MOD_PWM ;

CCP3CON = MOD_PWM ;

CCP4CON = 0X00 ;//PWM模式关闭

CCPTMRS = 0XAA ;//CCP1-4 由TIMER6产生

TMR6ON = 1 ;//开启定时器6

T6CON |= Prsc ;//T6四分频  Fosc/4 /Prsc

PR6 = Tcyc ; //PWM周期

//自动关闭控制寄存器

CCP1AS = 0X00 ;//CCPX输出正常工作

CCP2AS = 0X00 ;

//增强型PWM控制寄存器

PWM1CON = 0X00 ;

PWM2CON = 0X00 ;

//转向控制寄存器

PSTR1CON = 0X01 ;

PSTR2CON = 0X01 ;

CCP1IF = 0 ;

CCP2IF = 0 ;

CCP3IF = 0 ;

CCP4IF = 0 ;

/*

CCP1IE = 1 ;

CCP2IE = 1 ;

CCP3IE = 1 ;

CCP4IE = 1 ;

*/

}

//--应用实例-----------

//PWM模块初始化 TIMER6频率为2M CCP1-CCP4产生16K的PWM

Init_Eccp(TIMER6_1DIV4,0x00,V_PWMFRE) ;//Fosc/4/x

//CCP1-CCP3的占空比调整

SetPwmCcpA(x) ;//设置CCP1的PWM占空比 X/V_PWMFRE (V_PWMFRE=250)

SetPwmCcpB(x) ;//设置CCP2的PWM占空比 X/V_PWMFRE (V_PWMFRE=250)

SetPwmCcpC(x) ;//设置CCP3的PWM占空比 X/V_PWMFRE (V_PWMFRE=250)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值