找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7427|回复: 13
打印 上一主题 下一主题
收起左侧

stc12c5a60s2单片机生成spwm源程序+仿真

  [复制链接]
跳转到指定楼层
楼主
stc12c5a60s2单片机程序包SPWM波形输出程序
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include <stc.h>
  2. #include <sin.h>

  3. #define uint unsigned int

  4. uchar index;
  5. uchar a;
  6. void init_pca(void)//pca计数器初始化函数

  7. {

  8. CMOD=0x04;//计数器0的溢出为PCA计数器的时钟源

  9. CCON=0x00;

  10. CCAPM0=0x42;//8位PWM输出,无中断

  11. CL=0x00;//清零pca计数器

  12. CH=0x00;

  13. CCAP0L=pwm[0];    //初始化spwm输出的占空比

  14. CCAP0H=pwm[0];

  15. CR=1;//运行pca计数器

  16. }

  17. void init_timer(void)//计数器初始化函数

  18. {

  19. TMOD= 0x12; //计数器0工作在方式模式2,计数器1工作在方式1

  20. TH0 = 0xFF;//T0的计数值为5,把时钟源5分频

  21. TL0 = 0xFF;

  22. TH1 = 0xF6;//T1的计数值为625,若是12M晶振,则中断频率为12M/625=1920HZ,正弦频率为1920/32=600HZ,即600/12=50HZ

  23. TL1 = 0xA0;    //T1的计数值低位

  24. AUXR=0x80;//计数器均工作在8051速度

  25. //ET0 = 1; //开中计数器0断

  26. ET1 = 1; //开计数器1中断

  27. TR0 = 1; //开启计数器0

  28. TR1 = 1; //开计数器1

  29. }

  30. void int_timer1(void) interrupt 3//计数器1中断函数

  31. {

  32. CR=0;
  33. a=a+1;
  34. index++; //查表索引

  35. TH1=0xFD; //重装计数值

  36. TL1=0x8F;

  37. CCAP0H=pwm[index%32]*2;//改变pwm的占空比

  38. CR=1;

  39. }
  40. void main()
  41. {a=0;
  42. EA=1;//开总中断
  43. init_pca();
  44. init_timer();
  45. while(1);
  46. //-.-//
  47. }
复制代码

所有资料51hei提供下载:
stc12c5a60s2_spwm.zip (70.75 KB, 下载次数: 262)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:94123 发表于 2018-5-25 16:03 | 只看该作者
好,受教了。
回复

使用道具 举报

板凳
ID:338352 发表于 2018-5-25 20:47 | 只看该作者
谢谢楼主
回复

使用道具 举报

地板
ID:90353 发表于 2018-11-18 09:20 | 只看该作者
谢谢分享,积分不够
回复

使用道具 举报

5#
ID:261031 发表于 2019-4-27 11:14 | 只看该作者
大哥,T0的初始值是不是写错了,0xff的话不是没分频吗
回复

使用道具 举报

6#
ID:116803 发表于 2019-8-12 16:36 | 只看该作者

谢谢分享,积分不够!!!
回复

使用道具 举报

7#
ID:116803 发表于 2019-8-12 16:43 | 只看该作者

谢谢分享,积分不够!!!
回复

使用道具 举报

8#
ID:116803 发表于 2019-8-12 16:46 | 只看该作者
谢谢分享~~~
回复

使用道具 举报

9#
ID:116803 发表于 2019-8-12 16:51 | 只看该作者
谢谢分享~~~
回复

使用道具 举报

10#
ID:116803 发表于 2019-8-13 08:12 | 只看该作者

好,受教了。
回复

使用道具 举报

11#
ID:709685 发表于 2020-3-17 11:19 | 只看该作者
折戟沉沙 发表于 2019-4-27 11:14
大哥,T0的初始值是不是写错了,0xff的话不是没分频吗

T0工作在1T模式,每个时钟周期溢出一次,PWM的频率最高。44M左右
回复

使用道具 举报

12#
ID:381834 发表于 2020-4-11 14:20 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

13#
ID:713055 发表于 2020-5-25 15:08 | 只看该作者
刚好需要,感谢分享
回复

使用道具 举报

14#
ID:95977 发表于 2020-6-2 12:01 | 只看该作者
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表