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

標題: 請教stc系列單片機的pwm產生問題 [打印本頁]

作者: callmesbplease    時間: 2019-11-18 19:26
標題: 請教stc系列單片機的pwm產生問題
我想做一個pwm按鍵控制電機速度,然后程序中又有兩個中斷計算電機的轉速,轉速已經完成,但是控制電機的pwm一直沒有波形,我想請各位幫我看看,是哪方面的問題,謝謝

  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uch unsigned char
  4. #define uin unsigned int

  5. uch code table[]="Duty Ratio:";
  6. uch code able[]="Rev:";
  7. uin count,countt,rad,f,t,g,s,q,w,m,b;
  8. //uin b;
  9. //uin PWM_T = 0;   //占空比控制變

  10. sbit rs=P1^2;
  11. sbit rw=P1^1;
  12. sbit en=P1^0;

  13. sbit down = P1^5;
  14. sbit up = P1^6;
  15. sbit fan=P1^4;

  16. void delay(uin time)
  17. {
  18.         uin i,j;
  19.         for(i=time;i>0;i--)
  20.                 for(j=110;j>0;j--);
  21. }

  22. void time0()
  23. {

  24.         TMOD=0x11;

  25.         TH0=0xdc;
  26.         TL0=0x00;
  27.         ET0=1;
  28.         TR0=1;

  29.         IT1=1;
  30.         EX1=1;
  31. //        EA=1;

  32.         TH1=(65536-100)/256;     //寫入預置初值(取值1-255,數越大PWM頻率越高)
  33.         TL1=(65536-100)%256;     //寫入預置值 (取值1-255,數越大PWM頻率越高)
  34.         ET1=1;                 //允許定時器0中斷
  35.         TR1=1;       //啟動定時器

  36.         EA=1;        //允許總中斷

  37. }

  38. uch lcd_readbusy()
  39. {
  40.         uch temp;
  41.         rs=0;
  42.         rw=1;
  43.         _nop_();
  44.         P2=0xff;
  45.         _nop_();
  46.         en=1;
  47.         _nop_();
  48.         temp=P2;
  49.         _nop_();
  50.         en=0;
  51.         return(temp&0x80);
  52. }
  53. void write_com(uch com)
  54. {
  55.         while(lcd_readbusy());
  56.         rs=0;
  57.         rw=0;
  58.         P2=com;
  59.         delay(5);
  60.         en=1;
  61.         delay(10);
  62.         en=0;
  63. }
  64. void write_data(uch dat)
  65. {
  66.         while(lcd_readbusy());
  67.         rs=1;
  68.         rw=0;
  69.         P2=dat;
  70.         delay(5);
  71.         en=1;
  72.         delay(5);
  73.         en=0;
  74. }
  75. void display1()        {

  76.         countt=rad/3;
  77.         f=rad*10%10;
  78.         g=countt%10;
  79.         s=(countt/10)%10;
  80. //        b=(countt/100)%10;
  81. //        q=(countt/1000)%10;
  82. //        w=countt/10000;

  83. //        write_com(0xc0+5);
  84. //        write_data(w+0x30);  //萬位
  85. //        write_com(0xc0+6);
  86. //        write_data(q+0x30); //千位
  87. //        write_com(0xc0+7);
  88. //        write_data(b+0x30);   //百位
  89.         write_com(0xc0+8);
  90.         write_data(s+0x30); //十位
  91.         write_com(0xc0+9);
  92.         write_data(g+0x30); //個位
  93.         write_com(0xc0+11);
  94.         write_data(f+0x30); //浮點位
  95. }
  96. void init()
  97. {        uin i=0;

  98.         write_com(0x38);
  99.         write_com(0x0c);
  100.         write_com(0x01);

  101.         write_com(0x80);
  102.                 for(i=0;i<11;i++)
  103.         {
  104.                 write_data(table[i]);
  105.         }
  106.         write_com(0x80+15);
  107.         write_data('%');
  108.        
  109.         write_com(0xc0);
  110.         for(i=0;i<4;i++)
  111.         {
  112.                 write_data(able[i]);
  113.         }

  114.         write_com(0xc0+10);
  115.         write_data('.');
  116.         write_com(0xc0+13);
  117.         write_data('R');
  118.         write_data('P');
  119.         write_data('S');        // 轉每秒

  120. }
  121. void button()
  122. {
  123.          if(!up)
  124.                          {
  125.                                 if(m<=100)
  126.                                         {        m++;
  127. //                                          PWM_T++;
  128.                                         }
  129. //                               
  130. //                                delay(10);
  131.                         }
  132.                  if(!down)
  133.                          {
  134.                                 if(m>=1)
  135.                                         {          m-- ;
  136. //                                          PWM_T--;
  137.                                         }
  138. //                               
  139. //                                delay(10);
  140.                         }       
  141. }
  142. void main()
  143. {

  144.         count=0;
  145.         t=0;
  146.         b=0;
  147.         m=50;
  148.         init();
  149.         time0();
  150.         while(1)
  151.         {        display1();
  152.                 button();

  153. }
  154.   }
  155. writerdown_time1() interrupt 2
  156. {
  157.         count++;
  158. }
  159. taker_time2() interrupt 1
  160. {
  161.         t++;
  162.         TH0=0xdc;
  163.         TL0=0x00;
  164.         if(t==200)
  165.         {        rad=count/3;
  166. //                display1();
  167.                 count=0;
  168.                 t=0;
  169.         }
  170. }
  171. time3() interrupt 3
  172. {        TR1=0;
  173.         TH1=(65536-100)/256;
  174.         TL1=(65536-100)%256;
  175.                  b++;    //每次定時器溢出加1
  176.          if(b<m)   //PWM周期 100個單位
  177.                  {

  178.                           fan=1;  //輸出端口
  179.                  }
  180.        
  181.                   else

  182.                  {  
  183.                          fan=0;        //  
  184.                  }
  185.                  if(b>100)b=1;
  186. }
復制代碼





作者: pcbboy    時間: 2019-11-19 08:36
你這是用定時器做的PWM,比較耗資源,實時性強的程序都運行不了的。直接用硬件PWM不會消耗CPU資源的。
作者: f556    時間: 2019-11-19 15:03
程序看上去沒有問題,定時器是不耗資源的,當然直接用硬件PWM更爽。試試上電時:
fan=1;   
延時 500;
fan=0;
延時 500;
fan=1;  
延時 500;
fan=0;
用萬用表測fan是否有高低電平。估計你要經過三極管、NMOS再輸出PWM,會不會后級有問題。




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 91精品国产91久久久久久最新 | 亚洲一区二区三区在线播放 | 日韩第一夜 | 久久亚洲一区二区三区四区 | 欧美二区三区 | 日本一区二区视频 | 久久不射电影网 | 久久av网| 欧美日韩国产一区二区 | 亚洲精品电影网在线观看 | 久久久久国产精品 | 日韩成人精品 | 国产成人免费视频网站视频社区 | 拍拍无遮挡人做人爱视频免费观看 | 久久久久国产一区二区三区四区 | 天堂av免费观看 | 一区二区在线免费观看 | 久久久男人的天堂 | 亚洲国产成人在线视频 | 午夜精品在线观看 | 欧美精品一区二区三区蜜臀 | 免费观看www7722午夜电影 | 日韩综合在线 | 日韩一二三区视频 | 国产视频二区在线观看 | 国产欧美在线 | 国产综合久久久 | 日日操天天射 | 亚洲国产精品久久久久秋霞不卡 | 日韩成人在线免费观看 | 亚洲视频在线观看 | 欧美极品一区二区 | 久久99精品国产自在现线小黄鸭 | 欧美日韩久 | 大象一区 | 国产成人精品一区二区三区 | 久久久激情 | 久久大陆 | 日韩在线视频播放 | 一区二区三区av夏目彩春 | 一区视频在线播放 |