单片机程序更改

2019-07-15 21:31发布

/////////PCA CEX0为PWM 输出模式//////////////
/////////PWM.c//////////////////////////
#include <C8051F040.h>
typedef unsigned int uint;
typedef unsigned char uchar;
typedef unsigned long ulong;
sfr16 RCAP2=0xca;
sfr16 RCAP3=0xca;
sfr16 RCAP4=0xca;
sfr16 TMR4=0xcc;
sfr16 TMR3=0xcc;
sfr16 TMR2=0xcc;
sfr16 PCA0CP0=0xfb;
sfr16 PCA0CP1=0xfd;
sfr16 PCA0CP2=0xe9;
sfr16 PCA0CP3=0xeb;
sfr16 PCA0CP4=0xed;
sfr16 PCA0CP5=0xe1;
uchar temppage;
void delay1ms(uint time){//延迟1ms
        uint i;
        uint j;
        for (i=0;i<time;i++){
                for(j=0;j<300;j++);
        }
}       
void pca0ini(){//CEX0为8bit PWM输出模式
        SFRPAGE = 0x00;
        PCA0CPM0=0X42;
}
void PWM0_set(uchar low){//占空比设置,高电平占空比为(256-low)/256
        SFRPAGE = 0x00;
        PCA0CPH0=low;
}
void pcaini(){
        SFRPAGE=0x00;
        PCA0MD=0x08;//PCA采用系统时钟,且PCA溢出中断禁止
        PCA0CN=0x42;//启动PCA计数器
        //EIE1|=0x08;//将此代码屏蔽,禁止PCA中断
}
void config(){
//看门狗禁止
        WDTCN = 0x07;       
    WDTCN = 0xDE;   
           WDTCN = 0xAD;
        SFRPAGE = 0x0F;
//交叉开关配置,CEX0-CEX5配置到P0.0-P0.5
        XBR0 = 0x30;       
        XBR1 = 0x00;       
        XBR2 = 0x40;
        XBR3 = 0x00;   
//管脚输出配置,P0口为开漏输出,其中P0.6接上拉电阻,P0为数字输入口
        SFRPAGE = 0x0F;
        P0MDOUT = 0x00;
        P1MDIN = 0xFF;  
//晶振配置,采用内部晶振8分频
        SFRPAGE = 0x0F;
        CLKSEL = 0x00;  
        OSCXCN = 0x00;       
        OSCICN = 0x84;       
}
void main(void){
        xdata uchar lowset;
        config();
        pcaini();
        pca0ini();
        lowset=00;
        PWM0_set(lowset);
        while(1){
                delay1ms(2000);
                lowset+=20;
                PWM0_set(lowset);
        }

}


谁能帮着把上面的程序改成直接输出一个固定占空比的PWM波的程序啊 并且说明怎么修改初始占空比
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。