STC12C5A60S2单片机产生SPWM主程序C代码 联系客服

发布时间 : 星期三 文章STC12C5A60S2单片机产生SPWM主程序C代码更新完毕开始阅读2e6d1bdb793e0912a21614791711cc7930b77852

STC12C5A60S2 单片机产生 SPWM 主程序 C 代码

本程序通过模拟仿真,实际示波器测试,均表现良好,愿拿出来分享,若 有更好的实现方法,希望高手多多指教。。。。

/*************spwm 产生程序******//*单片机 STC12C5A60S2,晶振 11.0592M,正弦波 50Hz,spwm 波形 21.6KHz*/#include

STC12x5A60S2.H#define uchar unsigned char#define uint unsigned intuchar code pwm[54]={255,240,226,211,196,182,168,154,141,128,115,103,91,80,69,59,50,42,34,2

7,20,15,10,6,3,1,0,0,1,3,6,10,15,20,27,34,42,50,59,69,80,91,103,115,128,141,154,16 8,182,196,211,226,240,255};

//

反正弦变化 int

index=0;sbit

P13=P1 ;

//PCA 模块 0 输出 sbit P14=P1 ; //PCA 模块 1 输出 bit zf=0;

//前后半周期标志 void init_pca(void)//pca 计数器初始化函数{CMOD=0x02;//计 数器 0 的溢出为 PCA 计数器的时钟源,允许 pca 中断使能

CCON=0x00;CCAPM0=0x42;//8 位 PWM 输出,无中断 CCAPM1=0x42;//8 位 PWM 输出,无中断 CL=0x00;//清零 pca 计数器 CH=0x00;CCAP0L=pwm[0]; //初始化 spwm 输出的占空比 CCAP0H=pwm[0];CCAP1L=pwm[0]; spwm 输出的占空比 CCAP1H=pwm[0];CR=1;//运行 pca 计数器}void

init_timer(void)//计数器初始化函数{TMOD= 0x01; //计数器 0 工作在方式模式 1TH0

=

0XF7;//T1 的计数值为 2048,若是 11.0592M 晶振,则中断频率为

//T1 的计数值低位 AUXR=0xC0;//计数器

//初始化

11.0592M/2048=5.4KTL0 = 0xFF;

均工作在 1T 模式。计数频率 11.0592MET0 = 1; //开中计数器 0 断 TR0 = 1; //开 启计数器 0}void int_timer0(void) interrupt 1//计数器 1 中断函数{TH0=0xF7; //重 装计数值 TL0=0xFF;index++; //查表索引 if(index==54) //半周期转换,每半周期 分为 60 份{CR=0;

//关 PCA 计数 index=0;zf=~zf; //半周期标志,zf=0,前

半周期,zf=1,后半周期 CCAPM0=0X00;

if(zf) //设置后半周期{P13=0; //设置模块 1 工作方式}else

//设 }

//关闭模块 0CCAPM1=0X42;

//设置前半周期{P14=0; CCAPM1=0X00; 置模块 0 工作方式}CR=1; if(zf==0)

//关闭模块 1CCAPM0=0X42; //开 PCA 计数

//将下一小格的占空比赋给相应值{CCAP0H=pwm[index];}

else {CCAP1H=pwm[index];}}void main(void){P14=0;P13=0;EA=1;//开总中断 init_pca();init_timer();while(1)//主循环{//彩灯程序 和 1602 显示程序}}tips:感谢 大家的阅读,本文由我司收集整编。仅供参阅!