stc12单片机生成spwm波形和proteus仿真
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include <stc.h>
- #include <sin.h>
- #define uint unsigned int
- uchar index;
- uchar a;
- void init_pca(void)//pca计数器初始化函数
- {
- CMOD=0x04;//计数器0的溢出为PCA计数器的时钟源
- CCON=0x00;
- CCAPM0=0x42;//8位PWM输出,无中断
- CL=0x00;//清零pca计数器
- CH=0x00;
- CCAP0L=pwm[0]; //初始化spwm输出的占空比
- CCAP0H=pwm[0];
- CR=1;//运行pca计数器
- }
- void init_timer(void)//计数器初始化函数
- {
- TMOD= 0x12; //计数器0工作在方式模式2,计数器1工作在方式1
- TH0 = 0xFF;//T0的计数值为5,把时钟源5分频
- TL0 = 0xFF;
- TH1 = 0xF6;//T1的计数值为625,若是12M晶振,则中断频率为12M/625=1920HZ,正弦频率为1920/32=600HZ,即600/12=50HZ
- TL1 = 0xA0; //T1的计数值低位
- AUXR=0x80;//计数器均工作在8051速度
- //ET0 = 1; //开中计数器0断
- ET1 = 1; //开计数器1中断
- TR0 = 1; //开启计数器0
- TR1 = 1; //开计数器1
- }
- void int_timer1(void) interrupt 3//计数器1中断函数
- {
- CR=0;
- a=a+1;
- index++; //查表索引
-
- TH1=0xFD; //重装计数值
- TL1=0x8F;
- CCAP0H=pwm[index%32]*2;//改变pwm的占空比
- CR=1;
- }
- void main()
- {a=0;
- EA=1;//开总中断
- init_pca();
- init_timer();
- while(1);
- //-.-//
- }
- 单片机源程序如下:
复制代码
所有资料51hei提供下载:
stc生成spwm 仿真.zip
(74.11 KB, 下载次数: 200)
|