找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8369|回復: 13
收起左側(cè)

stc12c5a60s2單片機生成spwm源程序+仿真

  [復制鏈接]
ID:295312 發(fā)表于 2018-3-22 01:18 | 顯示全部樓層 |閱讀模式
stc12c5a60s2單片機程序包SPWM波形輸出程序
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png 0.png

單片機源程序如下:
  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計數(shù)器初始化函數(shù)

  7. {

  8. CMOD=0x04;//計數(shù)器0的溢出為PCA計數(shù)器的時鐘源

  9. CCON=0x00;

  10. CCAPM0=0x42;//8位PWM輸出,無中斷

  11. CL=0x00;//清零pca計數(shù)器

  12. CH=0x00;

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

  14. CCAP0H=pwm[0];

  15. CR=1;//運行pca計數(shù)器

  16. }

  17. void init_timer(void)//計數(shù)器初始化函數(shù)

  18. {

  19. TMOD= 0x12; //計數(shù)器0工作在方式模式2,計數(shù)器1工作在方式1

  20. TH0 = 0xFF;//T0的計數(shù)值為5,把時鐘源5分頻

  21. TL0 = 0xFF;

  22. TH1 = 0xF6;//T1的計數(shù)值為625,若是12M晶振,則中斷頻率為12M/625=1920HZ,正弦頻率為1920/32=600HZ,即600/12=50HZ

  23. TL1 = 0xA0;    //T1的計數(shù)值低位

  24. AUXR=0x80;//計數(shù)器均工作在8051速度

  25. //ET0 = 1; //開中計數(shù)器0斷

  26. ET1 = 1; //開計數(shù)器1中斷

  27. TR0 = 1; //開啟計數(shù)器0

  28. TR1 = 1; //開計數(shù)器1

  29. }

  30. void int_timer1(void) interrupt 3//計數(shù)器1中斷函數(shù)

  31. {

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

  35. TH1=0xFD; //重裝計數(shù)值

  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, 下載次數(shù): 266)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:94123 發(fā)表于 2018-5-25 16:03 | 顯示全部樓層
好,受教了。
回復

使用道具 舉報

ID:338352 發(fā)表于 2018-5-25 20:47 | 顯示全部樓層
謝謝樓主
回復

使用道具 舉報

ID:90353 發(fā)表于 2018-11-18 09:20 | 顯示全部樓層
謝謝分享,積分不夠
回復

使用道具 舉報

ID:261031 發(fā)表于 2019-4-27 11:14 | 顯示全部樓層
大哥,T0的初始值是不是寫錯了,0xff的話不是沒分頻嗎
回復

使用道具 舉報

ID:116803 發(fā)表于 2019-8-12 16:36 | 顯示全部樓層

謝謝分享,積分不夠!!!
回復

使用道具 舉報

ID:116803 發(fā)表于 2019-8-12 16:43 | 顯示全部樓層

謝謝分享,積分不夠!!!
回復

使用道具 舉報

ID:116803 發(fā)表于 2019-8-12 16:46 | 顯示全部樓層
謝謝分享~~~
回復

使用道具 舉報

ID:116803 發(fā)表于 2019-8-12 16:51 | 顯示全部樓層
謝謝分享~~~
回復

使用道具 舉報

ID:116803 發(fā)表于 2019-8-13 08:12 | 顯示全部樓層

好,受教了。
回復

使用道具 舉報

ID:709685 發(fā)表于 2020-3-17 11:19 | 顯示全部樓層
折戟沉沙 發(fā)表于 2019-4-27 11:14
大哥,T0的初始值是不是寫錯了,0xff的話不是沒分頻嗎

T0工作在1T模式,每個時鐘周期溢出一次,PWM的頻率最高。44M左右
回復

使用道具 舉報

ID:381834 發(fā)表于 2020-4-11 14:20 | 顯示全部樓層
謝謝樓主分享
回復

使用道具 舉報

ID:713055 發(fā)表于 2020-5-25 15:08 | 顯示全部樓層
剛好需要,感謝分享
回復

使用道具 舉報

ID:95977 發(fā)表于 2020-6-2 12:01 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表