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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于51單片機PWM輸出程序問題?

[復制鏈接]
跳轉到指定樓層
樓主
ID:687423 發表于 2020-2-19 09:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
剛學的PWM,看了一下參考的程序,有一些地方不是很明白,代碼如下。后面還有我自己改編后寫的代碼,但是不好使,請大家幫我分析一下。
問題:
      PWM的周期timer1是自己設定的還是單片機內部定的
      value代表的是占空比,當count==100的時候才加1,為什么value要等于1000而不是等于10(我認為應該是分成10份啊)
      關于判斷PWM是否為1為什么是用timer1和value的大小做對比。
參考代碼,沒有問題
#include "reg52.h"   
typedef unsigned int u16;   
typedef unsigned char u8;

sbit PWM=P2^2;
bit DIR;

u16 count,value,timer1;

void Timer1Init()
{
TMOD|=0X10
TH1 = 0xFF;
TL1 = 0xff;   
ET1=1
EA=1;
TR1=1;
}

void main()
{
Timer1Init();
while(1)
{
  if(count>100)      
  {  
   count=0;
   if(DIR==1)      
   {
     value++;
   }   
   if(DIR==0)
   {
     value--;
   }
   
  }
  if(value==1000)
  {
    DIR=0;
  }
  if(value==0)
  {
    DIR=1;
  }
   
  if(timer1>1000)
  {
   timer1=0;
  }
  if(timer1 <value)
  {
   PWM=1;
  }
  else
  {
   PWM=0;
  }  
}  
}

void Time1(void) interrupt 3   
{
TH1 = 0xFF;
TL1 = 0xff;   //1us
timer1++;
    count++;
}
我自己根據上面代碼自己改編了一下,只有這些變了,其他和上面程序一樣,但無法呈現呼吸狀態,led一直在閃爍。
if(value==10)
  {
    DIR=0;
  }
  if(value==0)
  {
    DIR=1;
  }
  for(i=0;i<=value;i++)
  {
   PWM=1;
  }
  for(i=value+1;i<=10;i++)
  {
   PWM=0;
  }


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

使用道具 舉報

沙發
ID:94031 發表于 2020-2-19 14:17 | 只看該作者
給你個參考程序,timer1只是給了定時中斷, PWM的周期是程序給定的,在參考程序里zhouqi計數值是周期,gaodianpin計數值是周期內的高電平值,具體看程序。 呼吸燈.rar (18.41 KB, 下載次數: 10)
回復

使用道具 舉報

板凳
ID:687423 發表于 2020-2-19 19:05 | 只看該作者
xuyaqi 發表于 2020-2-19 14:17
給你個參考程序,timer1只是給了定時中斷, PWM的周期是程序給定的,在參考程序里zhouqi計數值是周期,gaod ...

我看了你發的程序,我在開發板上用了一下,但是發現這個程序的呼吸燈效果不是很明顯。
我還有幾個問題,可能是我沒有學好,希望你為我講解一下。
對于這個程序來說,我不知道你對P0的設定有什么用,我把他刪了還是和之前的效果一樣。
這個程序的周期是60000*1us嗎,我還是不明白為什么要等zhouqi>60000后才改變gaodianping的值,
而且開始是DIR為0,那gaodianping就在減,等到DIR為1時,高電平再加,那這么變化gaodianping的值不應該是-60000~0嗎,怎么能大于60000呢。
#include "reg52.h"   
typedef unsigned int u16;   
typedef unsigned char u8;

sbit PWM=P2^2;
bit DIR;

u16 zhouqi;
u16 gaodianpin;

void Timer1Init()
{
        TMOD|=0X10;
        TH1 = 0xFF;
        TL1 = 0xff;   
        ET1=1;
        EA=1;
        TR1=1;
}

void main()
{
        Timer1Init();
        while(1)
        {
            if(zhouqi>60000)
                {
                        zhouqi=0;
                        DIR=!DIR;
                }
            if(gaodianpin>60000)
                {
                        gaodianpin=60000;
                }
                if(gaodianpin<10000)       
                {
                        gaodianpin=10000;
                }
            if((gaodianpin>10000)&&(gaodianpin<60000))
                {
                        PWM=1;
                }
                else
                {       
                        PWM=0;
                }
        }  
}

void Time1(void) interrupt 3   
{
        TH1 = 0xFF;
        TL1 = 0xff;   //1us
        zhouqi++;
        if(DIR==1){gaodianpin++;}
        else{gaodianpin--;}
}

回復

使用道具 舉報

地板
ID:687694 發表于 2020-2-19 19:36 | 只看該作者
#include<reg52.h>
#define uint unsigned int
#define led1 P1//P1口全接發光管,驗證程序請自行修改

/**********占空比太小會熄滅,故一開始有3.3%,最大占空比也看不出變化了,故最大為80%**********/

void delay (uint yc)  //延遲函數,定時器中斷更好,這里就偷懶了
        {
        uint i,j;
        for (i=yc;i>0;i--)
            for (j=10;j>0;j--);
        }
void main()
         {
         uint i=5,n=0; //此處初始化i不得小于最小占空比
        while(1)
                {
                if(i==120) //調節最大占空比
                n=1;
                if(i==4)   //最小占空比
                n=0;
                led1=0x00;//此處自行修改
                delay(i);
                led1=0xff;//此處自行修改               
                delay(150-i);//半周期時間
                if(n==0)
                i++;
                if(n==1)
                i--;
                }
        }
呼吸燈,建議樓主仔細理解一下PWM的含義,簡單說PWM是固定時間長度的周期內,高低電平占時間比的變化量。
回復

使用道具 舉報

5#
ID:94031 發表于 2020-2-19 21:17 | 只看該作者
我這個程序只是仿真了一下沒在開發板上試,因此要想效果好得在理解的基礎上修改程序。
P0那部分那是我為了調試仿真臨時加的,刪了并不影響PWM運行。
是不是1us我沒有測,這和定時器設置有關,總之周期是60000個定時周期。
if(gaodianpin>60000){gaodianpin=60000;}//怕意外加的限制,具體高電平數在中斷里根據DIR ++,--。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费看91 | 久久中文字幕一区 | 久久久久久久国产 | 日韩视频―中文字幕 | av大片在线观看 | 天天色天天色 | 国产在线观看福利 | 色视频一区二区 | 一区二区国产精品 | 国产欧美一区二区三区在线播放 | 国产在线一区二区三区 | www.久久99| 中文字幕在线国产 | 日本精品一区二区 | 欧美日韩视频 | www.国产精| 国产精品一区二区三区在线 | 91高清在线观看 | 手机看片169 | a级毛片免费高清视频 | 日韩在线观看网站 | 精品国产一区二区三区久久久蜜月 | 国产一区二区电影 | 在线精品亚洲欧美日韩国产 | 五月综合激情婷婷 | 午夜影院 | 国产成人高清在线观看 | 天天综合天天 | 人人爽日日躁夜夜躁尤物 | 夜夜爽99久久国产综合精品女不卡 | 久久久精品网站 | 亚洲精品国产成人 | 中文字幕在线免费视频 | 欧美精品一区二区三区在线 | 精久久久久 | 在线播放一区二区三区 | 黄色毛片黄色毛片 | av一区在线观看 | 国产线视频精品免费观看视频 | 国产在线一区二区 | 91超碰caoporn97人人 |