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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3334|回復: 8
打印 上一主題 下一主題
收起左側

一個單片機定時器控制可調頻率和占空比的pwm波,仿真出來pwm端口一直處于高電平狀態

[復制鏈接]
回帖獎勵 10 黑幣 回復本帖可獲得 1 黑幣獎勵! 每人限 1 次
跳轉到指定樓層
樓主
程序自己模仿的  可是仿真出來pwm端口一直處于高電平狀態 想問問是什么問題

電路原理圖如下:


單片機源程序:
  1. #include <reg52.h>
  2. #define  uchar unsigned char
  3. #define  uint unsigned int
  4. #define  ALL  65536     //定時器工作方式1時,最大基數長度 65536;
  5. #define  F_osc 12000000    //晶振頻率12M;
  6. sbit s1=P3^2;//上調頻率(500-9500hz)
  7. sbit s2=P3^3;
  8. sbit s3=P3^4;//上調占空比(0.1-0.9)
  9. sbit s4=P3^5;
  10. sbit pwm=P1^0;
  11. int  i=0,q=0.5,f=500;//設置初值占空比0.5 頻率0.5khz
  12. void delay(uchar t);          //延時函數,用于按鍵去抖;
  13. void init();                  //初始化函數,用于定時器的初始化;
  14. void key_scan();             //按鍵掃描函數;
  15. void timer0;
  16. void delay(uchar t);
  17. void delay(uchar t)
  18. {
  19.      uchar a,b;
  20.      while(t--)             //每個脈沖為1us
  21.       {
  22.        for(a=0;a<100;a++)
  23.         for(b=0;b<100;b++);
  24.       }
  25.    }
  26. void key_scan()
  27.    {
  28.      delay(4);

  29.      if(!s1)   
  30.      {
  31.        f=f+500;;   
  32.        {
  33.                                  if(f>9500)
  34.          f=500;
  35.                          }
  36.       }

  37.     if(!s2)
  38.                 {
  39.                 f=f-500;
  40.                         {
  41.                         if(f<500)
  42.                                 f=9500;
  43.                         }
  44.                 }

  45.                 if(!s3)
  46.                 {
  47.                 q=q+0.1;
  48.                         {
  49.                                 if(q>0.9)
  50.                                 q=0.1;
  51.                         }
  52.                 }
  53.                 if(!s4)
  54.     {
  55.                         q=q-0.1;
  56.       {
  57.                         if(q<0.1)
  58.                                 q=0.9;
  59.                         }               
  60.                 }
  61.         }               
  62. void timer0() interrupt 1      
  63.     {  TR0=1;
  64.       TH0=(65536-(10000*(double (1/f)))/256;
  65.       TL0=(65536-(10000*(double (1/f)))%256;
  66.                         i++;
  67.                         if(i<=100*q)
  68.       pwm=1;
  69.                         if(100*q<i<=100)
  70.                         pwm=0;
  71.                         if(i>100)
  72.                         i=0;

  73. void init()
  74.     {
  75.       TMOD=0x01;   
  76.       ET0=1;
  77.       EA=1;
  78.       TR0=1;
  79.                 }

  80. void main()
  81. {
  82. init();
  83.         while(1)
  84. {
  85. key_scan();
  86. }
  87. }
復制代碼

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:354282 發表于 2018-9-5 08:45 | 只看該作者
pwm=0的部分你好像沒有寫。。。                                                                                                     看這個 對照一下#include   <reg51.h>      typedef   unsigned   char   uchar;      sbit   P0_0=P0^0;   sbit   P0_1=P0^1;    sbit   P0_2=P0^2;   sbit   P0_3=P0^3;   sbit   P0_4=P0^4;   sbit   P2_0=P2^0;   sbit   P2_1=P2^1;   sbit   P2_2=P2^2;   sbit   P2_3=P2^3;   sbit   P2_4=P2^4;   sbit   P3_4=P3^4;        uchar   time=0;      uchar   period=30;      uchar   high=10;    uchar   th0=0;   uchar   tl0=1;   bit    dir;           void dealy()   {    uchar i;    for(i=0;i<100;i++);    }        void   timer0()   interrupt   1   using   1      {                TH0=0xfc;     /*¶¨ê±Æ÷3õÖμÖØ×°ÔØ*/                TL0=0x18;                          time++;                          P3_4=~P3_4;         if(dir==1)           {                                                  if(time==high)   /*¸ßμçÆ½3ÖDøê±¼ä½áêø£¬±äμí*/                   P2_0=th0;                 /*¾-1y·′ÏàÆ÷·′Ïà*/                                                                       else   if(time==period)     /*ÖüÆúê±¼äμ½£¬±ä¸ß*/                          {   time=0;                              P2_0=tl0;                /*¾-1y·′ÏàÆ÷·′Ïà*/                                                                                                                              }                                           }                  else          if(time==high)   /*¸ßμçÆ½3ÖDøê±¼ä½áêø£¬±äμí*/                                            P2_1=th0;                 /*¾-1y·′ÏàÆ÷·′Ïà*/                                                                            else   if(time==period)     /*ÖüÆúê±¼äμ½£¬±ä¸ß*/                          {   time=0;                              P2_1=tl0;                /*¾-1y·′ÏàÆ÷·′Ïà*/                                                                          }                      }      void   main()      {                     P0=0x00;                 P2=0x00;          TMOD=0x01;   /*¶¨ê±Æ÷0·½ê½1*/            TH0=0xfc;     /*¶¨ê±Æ÷×°ÔØ3õÖ죬éèÖÃÂö3åDÅoÅμÄÕ¼¿Õ±èÎa1£ˉ5*/            TL0=0x18;                                     ET0=1;   /*¿a¶¨ê±Æ÷0ÖD¶Ï*/            TR0=1;    /*Æô¶ˉ¶¨ê±Æ÷0*/                                      while(1)             {                         if(P0_0==1)                 EA=1;     /*¿aCPUÖD¶Ï*/                           if(P0_1==1)                         EA=0;         /*1ØCPUÖD¶Ï*/                          if(P0_2==1)                         {                         dir=~dir;  /*×aÏò¿ØÖÆ*/                         while(P0_2!=0)                         {};                          }                          if(P0_3==1)                         {                           high++;                          if(high==30)                          high=0;                         while(P0_3!=0)                         {};                          }                  }          }            
回復

使用道具 舉報

板凳
ID:393736 發表于 2018-9-5 09:54 來自手機 | 只看該作者
jefelee 發表于 2018-9-5 08:45
pwm=0的部分你好像沒有寫。。。                                                                        ...

pwm=0我放到中斷里面了 在后面。我是一個個定時器控制的頻率和占空比
回復

使用道具 舉報

地板
ID:393736 發表于 2018-9-5 14:14 | 只看該作者
急啊  有沒有人能回答一下
回復

使用道具 舉報

5#
ID:139455 發表于 2018-9-5 19:55 | 只看該作者
q變量設置的不對,q變量在定義中設置成了int型,應該設置成float 或 double型。改下試試

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:394504 發表于 2018-9-6 15:18 | 只看該作者
int  i=0,q=0.5,f=500;//設置初值占空比0.5 頻率0.5khz  這里 q為整型  所以 q一直為0  
回復

使用道具 舉報

7#
ID:394504 發表于 2018-9-6 15:29 | 只看該作者
  int  i=0,q=0.5,f=500;//設置初值占空比0.5 頻率0.5khz  //這里q為整型 所以 之后的q 一直為0

                      if(100*q<i<=100)  //這里有 語法錯誤  應該 是 if (100*q<i && i<=100)
給樓主個建議  按鍵 消抖 別用延時 用幾毫秒查鍵判斷按鍵是否按下 如果連續多次判定檢測為按下則按鍵確認為按下  
回復

使用道具 舉報

8#
ID:398692 發表于 2018-9-16 16:38 | 只看該作者
q變量設置的不對,q變量在定義中設置成了int型,應該設置成float 或 double型。
回復

使用道具 舉報

9#
ID:398736 發表于 2018-9-16 19:25 | 只看該作者
q設置的不對
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产欧美一区二区 | 天天干天天玩天天操 | www.欧美.com| 青青久久 | 男女视频在线免费观看 | 欧美性video 精品亚洲一区二区 | 久久青 | 成人久久18免费 | 亚洲人成人一区二区在线观看 | av网站免费观看 | 中文在线一区二区 | 狠狠入ady亚洲精品经典电影 | 一级欧美 | 伊人超碰 | 中文字幕乱码亚洲精品一区 | 精品久久中文字幕 | 成人日批视频 | 日日碰碰 | 国产a一区二区 | 日韩三级在线 | 国产目拍亚洲精品99久久精品 | 久久91精品久久久久久9鸭 | 日韩精品一区二区三区在线播放 | 天天弄| 精品视频www | 国产精品99久久久久久宅男 | 91在线视频免费观看 | 色资源在线视频 | 一区二区三区在线电影 | 日韩免费在线 | 中文一区 | 国产综合精品一区二区三区 | 偷拍亚洲色图 | 91久久北条麻妃一区二区三区 | 欧美高清视频一区 | 日韩欧美国产精品 | 免费精品久久久久久中文字幕 | 夜夜爽99久久国产综合精品女不卡 | 欧美黄色一区 | av在线电影网站 | 亚洲婷婷一区 |