在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

    
    
    <address id="vxupu"><td id="vxupu"></td></address>

      <pre id="vxupu"><small id="vxupu"></small></pre>
      <dfn id="vxupu"></dfn>
      <div id="vxupu"><small id="vxupu"></small></div>
    1. 新聞中心

      EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于51單片機(jī)的pwm波產(chǎn)生

      基于51單片機(jī)的pwm波產(chǎn)生

      作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò) 收藏
      利用定時(shí)器的中斷來(lái)實(shí)現(xiàn)PWM調(diào)制。如果我們?cè)O(shè)定脈沖的周期為1000毫秒;每20毫秒產(chǎn)生一次中斷,則知道要中斷50次。
      那么我們可以這樣編寫(xiě)程序
      TH0=0XFF;
      TL0=0XEC;這是定時(shí)器0產(chǎn)生一次中斷的時(shí)間,即20毫秒產(chǎn)生一次中斷。我們?cè)俣x一個(gè)計(jì)數(shù)的變量NUM,讓NUM從0開(kāi)始加到50,程序如下
      void Timer0Interrupt(void) interrupt 1
      {
      TH0 = 0x0FE;
      TL0 = 0x0C;
      NUM++;
      if(NUM==33)
      {
      NUM=0;
      }
      if(NUM<=PWM)P1=0x00;
      if(NUM>PWM)P1=0xff;

      }
      其中的PWM為0到50的數(shù)值,這樣通過(guò)控制PWM的值讓小于PWM的NUM值里所產(chǎn)生的中斷全為低電平,大于PWM的為高電平,這樣通過(guò)控制計(jì)數(shù)就實(shí)現(xiàn)了PWM。
      所有程序如下
      #include
      #define uint unsigned int
      #define uchar unsigned char
      sbit k1=P3^2;
      sbit k2=P3^3;
      sbit beep=P2^7;
      uchar PWM=10; //用來(lái)控制脈寬
      uchar NUM;//中斷次數(shù)變量
      void delay(uint t)
      {
      uchar j;
      while(t--)for(j=0;j<120;j++);
      }
      void bee()
      {
      beep=0;
      delay(10);
      beep=1;
      delay(10);

      }
      void keycheck()
      {
      if(k1==0)
      {
      delay(10);
      if(k1==0)
      {
      if(PWM!=0X20)
      {
      PWM++;
      delay(20);
      }
      }
      else
      bee();
      }
      if(k2==0)
      {
      delay(10);
      if(k2==0)
      {
      if(PWM!=0X01)
      {
      PWM--;
      delay(20);
      }
      }
      else
      bee();
      }
      }
      void InitTimer0(void)
      {
      TMOD = 0x01;
      TH0 = 0xfe; //我們?cè)O(shè)定500毫秒中斷一次 共中斷32次即一個(gè)周期
      TL0 = 0x0c;
      EA = 1;
      ET0 = 1;
      TR0 = 1;
      }
      void main()
      {
      InitTimer0();
      while(1)
      {

      keycheck();
      }
      }
      void Timer0Interrupt(void) interrupt 1
      {
      TH0 = 0x0FE;
      TL0 = 0x0C;
      NUM++;
      if(NUM==33)
      {
      NUM=0;
      }
      if(NUM<=PWM)P1=0x00;
      if(NUM>PWM)P1=0xff;

      }


      關(guān)鍵詞: 51單片機(jī)pwm

      評(píng)論


      技術(shù)專區(qū)

      關(guān)閉