我用STC单片机的PWM功能,按照一组数据改变输出波形的占空比,使用外部晶振频率为11.0592MHz,PCA使用时钟源为计数器0溢出,要产生的频率为8KHZ的波形,程序执行后没有出现我看到的波形,不知是哪里出现了问题请大家指导下。 #include<STC12C5410AD.H> int amount; unsigned char code data1[128] = { 0x86, 0x7D, 0x79, 0x7C, 0x7B, 0x7A, 0x79, 0x80, 0x80, 0x82, 0x7D, 0x7A, 0x78, 0x7A, 0x79, 0x7B, 0x81, 0x7F, 0x77, 0x7A, 0x88, 0x80, 0x7F, 0x7F, 0x86, 0x82, 0x84, 0x89, 0x77, 0x80, 0x7F, 0x89, 0x89, 0x90, 0x8A, 0x76, 0x87, 0x7C, 0x82, 0x87, 0x87, 0x83, 0x86, 0x87, 0x7F, 0x89, 0x7F, 0x87, 0x8A, 0x8B, 0x86, 0x87, 0x83, 0x86, 0x86, 0x79, 0x8B, 0x8A, 0x88, 0x7D, 0x89, 0x8C, 0x7C, 0x88, 0x7B, 0x7C, 0x86, 0x81, 0x7E, 0x7F, 0x89, 0x82, 0x89, 0x86, 0x7D, 0x83, 0x85, 0x81, 0x7A, 0x88, 0x82, 0x85, 0x86, 0x7F, 0x7D, 0x84, 0x87, 0x81, 0x85, 0x7E, 0x82, 0x81, 0x82, 0x7A, 0x80, 0x81, 0x7C, 0x85, 0x87, 0x85, 0x81, 0x82, 0x7C, 0x7A, 0x77, 0x81, 0x83, 0x7D, 0x80, 0x7B, 0x77, 0x7C, 0x7B, 0x78, 0x7A, 0x7E, 0x79, 0x78, 0x7E, 0x77, 0x77, 0x76, 0x7F, 0x7A, 0x72, 0x7A, 0x73, 0x7F }; void timer0_init(void) { TMOD = 0x02; /* Set timer 0 mode 2*/ TH0 = 0xFA;//这里计数值应为5.4,可以设定为5或者6 TL0 = 0xFA;
AUXR=0x80;//T0工作在1T模式 //T0x12=1;//T0工作在1T模式 ET0 = 1; /* Enable timer 0 interrupt */ TR0 = 1; /* Enable timer 0 */ } void PCA_INIT(void) { CMOD=0x84; //PCA在空闲模式下停止。PCA时钟模式为计数器0溢出中断.禁止PCA计数器溢出中断。 CCON=0x00; //禁止PCA计数器工作,清除中断标志、计数器溢出标志。 CL =0x00; //清0计数器。 CH =0x00; //--------------- //设置模块0为8位PWM输出模式。 CCAPM0 =0x42;//模式设定 PCA_PWM0=0x00;//清零EPC0H,EPC0L,若置为0x03,则一直输出为低电平CL一直小于{EPC0L,CCAP0L} //---------------- EPCA_LVD=1; //开PCA中断 EA=1;//开总中断 CR=1; //将PCA计数器打开。 } void delay125(void) { unsigned char i; i=50; while(i) { i--; } } void main(void) { //CCAP0L = 0xc0;//Set the i nitial value same as CCAP0H timer0_init(); PCA_INIT(); amount=0; while(1) { if(amount>=128)amount=0; CCAP0H = data1[amount]; amount++; delay125(); } } |