STC15W4K48S4单片机用PCA模块产生3路pwm得问题

2019-07-15 14:48发布

本帖最后由 破力达 于 2016-3-11 13:06 编辑

我使用pca来产生3pwm,但是pca模块2就是输不出pwm。我已经把p37引脚初始化成强推挽,但是还不行。我换个了个stc15f单片机使用一样的程序,一样的电路(其实我这个也没有任何外部电路),这个就可以正常输出3pwm,所以我可以确定单片机外围电路是没问题的。一开始我以为是那个stc15wpca模块2坏掉了,后来我换了2个单片机还是这样。
但是有一个奇怪的现象:我把pca模块2产生的pwmp37管脚切换到p27时他就有反应,但是他输出的pwm只有几百毫伏,而且电压不稳定波动大,而且不受控制,它输出的占空比会随着其他两路PCA模块产生的pwm的变化而变化。

我也试过用isp下载软件中的范例程序直接下载进去看过也是同样的问题

这是我的程序#include <STC15W.H>#define uchar unsigned char#define uint unsigned int
void delay_long(uint y)         //延时(ms{uint i,j;y=7*y;for(i=y;i>0;i--)for(j=160;j>0;j--);}
void PWM_init(){P2M0=0XFF;P2M1=0X00;
P3M0=0XFF;P3M1=0X00;
P_SW1 =0x00;      //CCP_S0=0 CCP_S1=0 //(P1.2/ECI, P1.1/CCP0, P1.0/CCP1, P3.7/CCP2) 00--0000
// P_SW1 =0x10;      //CCP_S0=1 CCP_S1=0  (P3.4/ECI_2, P3.5/CCP0_2, P3.6/CCP1_2, P3.7/CCP2_2)                  
// P_SW1 =0x20;      //CCP_S0=0 CCP_S1=1 (P2.4/ECI_3, P2.5/CCP0_3, P2.6/CCP1_3, P2.7/CCP2_3)
    CCON = 0;                       //初始化PCA控制寄存器                                    //PCA定时器停止                                    //清除CF标志                                    //清除模块中断标志
    CL = 0;                         //复位PCA寄存器    CH = 0;    CMOD = 0x08;                    //设置PCA时钟源                                    //禁止PCA定时器溢出中断
    PCA_PWM0 = 0x00;                //PCA模块0工作于8PWM       CCAPM0 = 0x42;                  //PCA模块0PWM模式    PCA_PWM1 = 0x00;                //PCA模块1工作于8PWM    CCAPM1 = 0x42;                  //PCA模块1PWM模式
    PCA_PWM2 = 0x40;                //PCA模块2工作于8PWM    CCAPM2 = 0x42;                  //PCA模块2PWM模式
    CR = 1;                         //PCA定时器开始工作}
void main(){uchar pwm;
PWM_init();
while (1){CCAP0H = CCAP0L = 255-pwm;         //PWM0的占空比 ((100H-20H)/100H)CCAP1H = CCAP1L = pwm;         //PWM1的占空比((100H-20H)/100H)CCAP2H = CCAP2L = 255-pwm;         //PWM1的占空比((100H-20H)/100H)
pwm++;delay_long(100);}}

在这我想插个题外话。我很喜欢这个论坛和这个论坛的app,他对我有很大的帮助。但是我也不知道为什么我在手机上的app发表了一次(无论是发帖还是回复)那么我这一天就不能再发表任何言论了,只要你一发表他就会出现发表失败,无论是在手机上发表言论还是网页上论坛发表言论都是一样。这也是我为什么借助这次发帖提问题说着这个与主题毫无关系的话原因。谁能跟我解释一下这到底是为什么吗?谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。