怎么PIC16F1827打开PWM功能在RA3上输出

2019-03-25 18:55发布

下面的代码能开启PWM吗?我试了好像不行

void initPWM()
{
INTCON = 0x00; //关闭总中断和外部中断
TRISA=0xFF;  //ADD BY CHEN
PR2 = 0xff;  //写入PR2寄存器设置PWM周期,PWM周期=[(PR2)+1]*4*TOSC*(TMR2预分频比)
CCP1CON = 0x3C;  //设置PWM占空比低2位为11,设置为PWM模式
CCPR1L = 0x00; //设置PWM占空比高8位
// TRISC = 0xfb;  //设置CCP1口为输出
// T2CON = 0x02;  //设置TMR2预分频为16;
        T2CON = 0x06;  //ADD BY CHEN 设置TMR2预分频为16并且打开TIMER2;
        TRISA=0;  //ADD BY CHEN
}

是否PWM功能要开中断?

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
and01
1楼-- · 2019-03-26 19:21
谢谢大家的热情帮忙,我终于能启动PWM了!

改成这样就好了(其实已经启动只是高电平时间为“0”,所以一直输出低)
void initPWM()
{
INTCON = 0x00; //关闭总中断和外部中断
TRISA=0xFF;  //ADD BY CHEN
PR2 = 0;  //写入PR2寄存器设置PWM周期,PWM周期=[(PR2)+1]*4*TOSC*(TMR2预分频比)
CCP3CON = 0x2C;//CCP1CON = 0x3C;  //设置PWM占空比低2位为11,设置为PWM模式
CCPR3L = 0x00;//CCPR1L = 0xAA; //设置PWM占空比高8位
// TRISC = 0xfb;  //设置CCP1口为输出
// T2CON = 0x02;  //设置TMR2预分频为16;
        T4CON=0x04;
        T6CON=0x04;
        T2CON = 0x04;  //ADD BY CHEN 设置TMR2预分频为16并且打开TIMER2;
        TRISA=0;  //ADD BY CHEN
}
     

可是问题又来了我本来是使用32MHz的内部高频RC,是最高输出的PWM频率是2M?

感觉有点纳闷!按计算应该是8M才对!

主时钟是4分频来启动PWM,
PWM周期=[(PRX)+1]x4xTOSCx(TMRX预分频值)]

我当前已经让PR2=0 / TMRX预分频值=1了,可是好象是16分频了

可是我的好象有两次4分频?没找到原因?
and01
2楼-- · 2019-03-26 21:58
单周期语句是不是按FOSC/4跑的?

一周热门 更多>