调频率和占空比PWM程序

#include
#defineT3RUNtemppage=SFRPAGE;SFRPAGE=0x01;TR3=1;SFRPAGE=temppage
#defineT3STOPtemppage=SFRPAGE;SFRPAGE=0x01;TR3=0;SFRPAGE=temppage
typedefunsignedintuint;
typedefunsignedcharuchar;
typedefunsignedlongulong;
sfr16RCAP2=0xca;
sfr16RCAP3=0xca;
sfr16RCAP4=0xca;
sfr16TMR4=0xcc;
sfr16TMR3=0xcc;
sfr16TMR2=0xcc;
sfr16PCA0CP0=0xfb;
sfr16PCA0CP1=0xfd;
sfr16PCA0CP2=0xe9;
sfr16PCA0CP3=0xeb;
sfr16PCA0CP4=0xed;
sfr16PCA0CP5=0xe1;
uchartemppage;
voidt3_fre_set(uintval){//T3频率设置,计算公式为:(T3时钟频率/(2*val))
temppage=SFRPAGE;
SFRPAGE=0x01;
RCAP3=~val+1;
TMR3=RCAP3;
SFRPAGE=temppage;
}
voidt3_ini(){//t3为频率输出模式
temppage=SFRPAGE;
SFRPAGE=0x01;
TMR3CN=0x00;//TR3=0,T3尚未启动
TMR3CF=0x0e;//T3采用系统时钟,TOG3=1,T3不计数时输出为1,DCEN=0
SFRPAGE=temppage;
}
//voiddelay1ms(uinttime){//延迟1ms
//uinti;
//uintj;
//for(i=0;i//for(j=0;j<300;j++);
//}
//}
voidpca0ini(){//CEX0为8bitPWM输出模式
SFRPAGE=0x00;
PCA0CPM0=0X42;
PCA0CPM1=0X42;
}
voidPWM0_set(ucharlow){//占空比设置,高电平占空比为(256-low)/256
SFRPAGE=0x00;
PCA0CPH0=low;
}
voidPWM1_set(ucharlow){//占空比设置,高电平占空比为(256-low)/256
SFRPAGE=0x00;
PCA0CPH1=256-low;
}
voidpcaini(){
SFRPAGE=0x00;
PCA0MD=0x06;//PCA采用ECI输入时钟,且PCA溢出中断禁止
PCA0CN=0x40;//启动PCA计数器
//EIE1|=0x08;//将此代码屏蔽,禁止PCA中断
}
voidconfig(){
//看门狗禁止
WDTCN=0x07;
WDTCN=0xDE;
WDTCN=0xAD;
SFRPAGE=0x0F;
//交*开关配置,CEX0-CEX5配置到P0.0-P0.5,ECI为P0.6口,T3为P0.7口,T3输出口与ECI相连
XBR0=0x70;
XBR1=0x00;
XBR2=0x40;
XBR3=0x01;
//管脚输出配置,P0口为开漏输出,其中P0.6接上拉电阻,P0为数字输入口
SFRPAGE=0x0F;
P0MDOUT=0x00;
P1MDIN=0xFF;
//晶振配置,采用内部晶振4分频
SFRPAGE=0x0F;
CLKSEL=0x01;
OSCXCN=0x67;
OSCICN=0x88;
}
voidmain(void){
xdataucharlowset;
config();
t3_ini();
t3_fre_set(256);//T3产生约为12800HZ的方波239
T3RUN;
pcaini();
pca0ini();
lowset=64;
PWM0_set(lowset);
PWM1_set(lowset);
}

相关文档
最新文档