久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2040|回復(fù): 10
收起左側(cè)

STC15F2K60S2單片機(jī)怎么產(chǎn)生PWM?

[復(fù)制鏈接]
ID:907024 發(fā)表于 2022-12-5 17:01 | 顯示全部樓層 |閱讀模式
請(qǐng)問一下打什么,本人急需STC15F2K60S單片機(jī)產(chǎn)生PWM亦或是固定頻率的方波的代碼,因?yàn)橹皼]接觸過這個(gè)板子,有大神們有思路或者是代碼能分享一下嗎?
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2022-12-5 18:42 | 顯示全部樓層
治標(biāo)不治本法:STC下載器那有現(xiàn)成的代碼,直接復(fù)制就行,自己根據(jù)代碼改成自己想要的結(jié)果
治標(biāo)又治本法:啃數(shù)據(jù)手冊(cè),自己慢慢的寫代碼,改代碼
回復(fù)

使用道具 舉報(bào)

ID:155507 發(fā)表于 2022-12-5 19:03 | 顯示全部樓層
初學(xué)者最重要的就是學(xué)會(huì)看數(shù)據(jù)手冊(cè)

給你一個(gè)示例參考
  1. /*---------------------------------------------------------------------*/
  2. /* --- STC MCU Limited ------------------------------------------------*/
  3. /* --- STC 1T Series MCU Demo Programme -------------------------------*/
  4. /* 如果要在程序中使用此代碼,請(qǐng)?jiān)诔绦蛑凶⒚魇褂昧薙TC的資料及程序        */
  5. /*---------------------------------------------------------------------*/


  6. /*************  功能說明    **************

  7. 使用Timer0模擬16通道PWM驅(qū)動(dòng)程序。

  8. 輸出為 P1.0 ~ P1.7, P2.0 ~ P2.7, 對(duì)應(yīng) PWM0 ~ PWM15.

  9. 定時(shí)器中斷頻率一般不要超過100KHZ, 留足夠的時(shí)間給別的程序運(yùn)行.

  10. 本例子使用11.0592MHZ時(shí)鐘, 25K的中斷頻率, 250級(jí)PWM, 周期為10ms.

  11. 中斷里處理的時(shí)間不超過6us, 占CPU時(shí)間大約為15%.

  12. ******************************************/

  13. #include    <reg52.h>

  14. #define MAIN_Fosc       11059200UL  //定義主時(shí)鐘
  15. #define Timer0_Rate     25000       //中斷頻率


  16. typedef     unsigned char   u8;
  17. typedef     unsigned int    u16;
  18. typedef     unsigned long   u32;

  19. sfr AUXR = 0x8E;

  20. sfr P1M1 = 0x91;    //PxM1.n,PxM0.n     =00--->Standard,    01--->push-pull
  21. sfr P1M0 = 0x92;    //                  =10--->pure input,  11--->open drain
  22. sfr P0M1 = 0x93;
  23. sfr P0M0 = 0x94;
  24. sfr P2M1 = 0x95;
  25. sfr P2M0 = 0x96;
  26. sfr P3M1 = 0xB1;
  27. sfr P3M0 = 0xB2;
  28. sfr P4M1 = 0xB3;
  29. sfr P4M0 = 0xB4;
  30. sfr P5M1 = 0xC9;
  31. sfr P5M0 = 0xCA;
  32. sfr P6M1 = 0xCB;
  33. sfr P6M0 = 0xCC;
  34. sfr P7M1 = 0xE1;
  35. sfr P7M0 = 0xE2;

  36. #define Timer0_Reload   (65536UL -(MAIN_Fosc / Timer0_Rate))        //Timer 0 重裝值

  37. //************** PWM8 變量和常量以及IO口定義 ***************
  38. //********************  8通道8 bit 軟PWM    ********************

  39. #define     PWM_DUTY_MAX    250 // 0~255    PWM周期, 最大255
  40. #define     PWM_ON          1   // 定義占空比的電平, 1 或 0

  41. #define     PWM_OFF         (!PWM_ON)
  42. #define     PWM_ALL_ON      (0xff * PWM_ON)

  43. u8 bdata PWM_temp1,PWM_temp2;       //影射一個(gè)RAM,可位尋址,輸出時(shí)同步刷新
  44. sbit    P_PWM0  =   PWM_temp1^0;    //  定義影射RAM每位對(duì)應(yīng)的IO
  45. sbit    P_PWM1  =   PWM_temp1^1;
  46. sbit    P_PWM2  =   PWM_temp1^2;
  47. sbit    P_PWM3  =   PWM_temp1^3;
  48. sbit    P_PWM4  =   PWM_temp1^4;
  49. sbit    P_PWM5  =   PWM_temp1^5;
  50. sbit    P_PWM6  =   PWM_temp1^6;
  51. sbit    P_PWM7  =   PWM_temp1^7;
  52. sbit    P_PWM8  =   PWM_temp2^0;
  53. sbit    P_PWM9  =   PWM_temp2^1;
  54. sbit    P_PWM10 =   PWM_temp2^2;
  55. sbit    P_PWM11 =   PWM_temp2^3;
  56. sbit    P_PWM12 =   PWM_temp2^4;
  57. sbit    P_PWM13 =   PWM_temp2^5;
  58. sbit    P_PWM14 =   PWM_temp2^6;
  59. sbit    P_PWM15 =   PWM_temp2^7;

  60. u8  pwm_duty;       //周期計(jì)數(shù)值
  61. u8  pwm[16];        //pwm0~pwm15 為0至15路PWM的寬度值

  62. bit     B_1ms;
  63. u8      cnt_1ms;
  64. u8      cnt_20ms;

  65. /**********************************************/
  66. void main(void)
  67. {
  68.     u8  i;
  69.    
  70.     P0M0 = 0x00;
  71.     P0M1 = 0x00;
  72.     P1M0 = 0x00;
  73.     P1M1 = 0x00;
  74.     P2M0 = 0x00;
  75.     P2M1 = 0x00;
  76.     P3M0 = 0x00;
  77.     P3M1 = 0x00;
  78.     P4M0 = 0x00;
  79.     P4M1 = 0x00;
  80.     P5M0 = 0x00;
  81.     P5M1 = 0x00;
  82.     P6M0 = 0x00;
  83.     P6M1 = 0x00;
  84.     P7M0 = 0x00;
  85.     P7M1 = 0x00;

  86.     AUXR |=  (1<<7);    // Timer0 set as 1T mode
  87.     TMOD &= ~(1<<2);    // Timer0 set as Timer
  88.     TMOD &= ~0x03;      // Timer0 set as 16 bits Auto Reload
  89.     TH0 = Timer0_Reload / 256;  //Timer0 Load
  90.     TL0 = Timer0_Reload % 256;
  91.     ET0 = 1;        //Timer0 Interrupt Enable
  92.     PT0 = 1;        //高優(yōu)先級(jí)
  93.     TR0 = 1;        //Timer0 Run
  94.     EA = 1;         //打開總中斷

  95.     cnt_1ms = Timer0_Rate / 1000;   //1ms計(jì)數(shù)
  96.     cnt_20ms = 20;
  97.    
  98.     for(i=0; i<16; i++)     pwm[i] = i * 15 + 15;   //給PWM一個(gè)初值
  99.    
  100.     while(1)
  101.     {
  102.         if(B_1ms)   //1ms到
  103.         {
  104.             B_1ms = 0;
  105.             if(--cnt_20ms == 0) //PWM 20ms改變一階
  106.             {
  107.                 cnt_20ms = 20;
  108.                 for(i=0; i<16; i++) pwm[i]++;
  109.             }
  110.         }
  111.     }
  112. }


  113. /********************** Timer0 1ms中斷函數(shù) ************************/
  114. void timer0 (void) interrupt 1
  115. {
  116.     P1 = PWM_temp1;         //影射RAM輸出到實(shí)際的PWM端口
  117.     P2 = PWM_temp2;
  118.         
  119.     if(++pwm_duty == PWM_DUTY_MAX)      //PWM周期結(jié)束,重新開始新的周期
  120.     {
  121.         pwm_duty = 0;
  122.         PWM_temp1 = PWM_ALL_ON;
  123.         PWM_temp2 = PWM_ALL_ON;
  124.     }
  125.     ACC = pwm_duty;
  126.     if(ACC == pwm[0])       P_PWM0  = PWM_OFF;  //判斷PWM占空比是否結(jié)束
  127.     if(ACC == pwm[1])       P_PWM1  = PWM_OFF;
  128.     if(ACC == pwm[2])       P_PWM2  = PWM_OFF;
  129.     if(ACC == pwm[3])       P_PWM3  = PWM_OFF;
  130.     if(ACC == pwm[4])       P_PWM4  = PWM_OFF;
  131.     if(ACC == pwm[5])       P_PWM5  = PWM_OFF;
  132.     if(ACC == pwm[6])       P_PWM6  = PWM_OFF;
  133.     if(ACC == pwm[7])       P_PWM7  = PWM_OFF;
  134.     if(ACC == pwm[8])       P_PWM8  = PWM_OFF;
  135.     if(ACC == pwm[9])       P_PWM9  = PWM_OFF;
  136.     if(ACC == pwm[10])      P_PWM10 = PWM_OFF;
  137.     if(ACC == pwm[11])      P_PWM11 = PWM_OFF;
  138.     if(ACC == pwm[12])      P_PWM12 = PWM_OFF;
  139.     if(ACC == pwm[13])      P_PWM13 = PWM_OFF;
  140.     if(ACC == pwm[14])      P_PWM14 = PWM_OFF;
  141.     if(ACC == pwm[15])      P_PWM15 = PWM_OFF;

  142.     if(--cnt_1ms == 0)
  143.     {
  144.         cnt_1ms = Timer0_Rate / 1000;
  145.         B_1ms = 1;      // 1ms標(biāo)志
  146.     }
  147. }

復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2022-12-5 20:28 | 顯示全部樓層
無標(biāo)題.jpg
回復(fù)

使用道具 舉報(bào)

ID:907024 發(fā)表于 2022-12-5 20:38 | 顯示全部樓層
回復(fù)

使用道具 舉報(bào)

ID:907024 發(fā)表于 2022-12-5 21:47 | 顯示全部樓層

你好,但是我怎么在這個(gè)例題程序里,讓一個(gè)引腳輸出PWM波呢?在
回復(fù)

使用道具 舉報(bào)

ID:907024 發(fā)表于 2022-12-5 21:51 | 顯示全部樓層
angmall 發(fā)表于 2022-12-5 19:03
初學(xué)者最重要的就是學(xué)會(huì)看數(shù)據(jù)手冊(cè)

給你一個(gè)示例參考

你好,如果我要寫一個(gè)占空比相同的,是不是只要用定時(shí)器寫一個(gè)方波出來就行了呢?那在STC15F2K60S2這里是不是運(yùn)用到和51相同的知識(shí)了呢?
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2022-12-6 05:32 | 顯示全部樓層
qinkang189 發(fā)表于 2022-12-5 21:47
你好,但是我怎么在這個(gè)例題程序里,讓一個(gè)引腳輸出PWM波呢?在

此例選擇PWM2輸出到P3.7,注意PWM輸出端口要設(shè)置為推挽模式。
回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2022-12-7 17:01 | 顯示全部樓層
讀通原理才是根本。
不懂原理,何必呢?
回復(fù)

使用道具 舉報(bào)

ID:25310 發(fā)表于 2022-12-7 17:46 | 顯示全部樓層
我發(fā)現(xiàn)一個(gè)問題,有些人就是想拿8051搞PWM,STC的硬件PWM不想學(xué)也不想用,對(duì)于新人應(yīng)該學(xué)新的知識(shí)不能原地踏步,望樓主共勉!
回復(fù)

使用道具 舉報(bào)

ID:308903 發(fā)表于 2022-12-8 09:09 | 顯示全部樓層
pcbboy 發(fā)表于 2022-12-7 17:46
我發(fā)現(xiàn)一個(gè)問題,有些人就是想拿8051搞PWM,STC的硬件PWM不想學(xué)也不想用,對(duì)于新人應(yīng)該學(xué)新的知識(shí)不能原地 ...

不會(huì)看規(guī)格書緣故
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久国产 | 久久性av| 亚洲精品免费视频 | 免费国产视频在线观看 | 亚洲最大av | 亚洲午夜精品视频 | 亚洲视频第一页 | 手机av网 | 成人精品一区亚洲午夜久久久 | 精品在线看 | 久久久久国产一区二区三区四区 | 国产伦精品一区二区三区精品视频 | 精品久久久久久亚洲综合网 | 欧美精品一区二区三区在线 | 羞羞网站在线观看 | 久久精品99| 亚洲成人观看 | 免费国产视频在线观看 | 欧美精品一 | 成人污污视频 | 91啪影院 | 亚洲精美视频 | 国产精品视频免费 | 精品国产精品三级精品av网址 | 九九久久这里只有精品 | 人人射人人插 | 高清av一区 | 亚洲一区视频 | 亚洲精品一区国产精品 | 伊人伊人 | 国产精品1区 | 久久久久一区二区三区 | 久久久久亚洲av毛片大全 | 日韩欧美亚洲一区 | 日韩在线观看视频一区 | 99久久精品国产麻豆演员表 | www.狠狠干 | 欧美成人aaa级毛片在线视频 | 一区二区在线免费观看视频 | 最新中文字幕在线 | 日韩欧美高清dvd碟片 |