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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1798|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

關(guān)于51單片機PWM輸出程序問題?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:687423 發(fā)表于 2020-2-19 09:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
剛學(xué)的PWM,看了一下參考的程序,有一些地方不是很明白,代碼如下。后面還有我自己改編后寫的代碼,但是不好使,請大家?guī)臀曳治鲆幌隆?br /> 問題:
      PWM的周期timer1是自己設(shè)定的還是單片機內(nèi)部定的
      value代表的是占空比,當(dāng)count==100的時候才加1,為什么value要等于1000而不是等于10(我認(rèn)為應(yīng)該是分成10份啊)
      關(guān)于判斷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++;
}
我自己根據(jù)上面代碼自己改編了一下,只有這些變了,其他和上面程序一樣,但無法呈現(xiàn)呼吸狀態(tài),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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

我看了你發(fā)的程序,我在開發(fā)板上用了一下,但是發(fā)現(xiàn)這個程序的呼吸燈效果不是很明顯。
我還有幾個問題,可能是我沒有學(xué)好,希望你為我講解一下。
對于這個程序來說,我不知道你對P0的設(shè)定有什么用,我把他刪了還是和之前的效果一樣。
這個程序的周期是60000*1us嗎,我還是不明白為什么要等zhouqi>60000后才改變gaodianping的值,
而且開始是DIR為0,那gaodianping就在減,等到DIR為1時,高電平再加,那這么變化gaodianping的值不應(yīng)該是-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--;}
}

回復(fù)

使用道具 舉報

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

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

void delay (uint yc)  //延遲函數(shù),定時器中斷更好,這里就偷懶了
        {
        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) //調(diào)節(jié)最大占空比
                n=1;
                if(i==4)   //最小占空比
                n=0;
                led1=0x00;//此處自行修改
                delay(i);
                led1=0xff;//此處自行修改               
                delay(150-i);//半周期時間
                if(n==0)
                i++;
                if(n==1)
                i--;
                }
        }
呼吸燈,建議樓主仔細(xì)理解一下PWM的含義,簡單說PWM是固定時間長度的周期內(nèi),高低電平占時間比的變化量。
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久成人综合 | 天天天天天操 | 三级视频网站 | 色一级| 国户精品久久久久久久久久久不卡 | 在线播放一区二区三区 | 午夜影院在线观看免费 | 国产一极毛片 | 日本免费在线观看视频 | 操视频网站 | 国产一区二区精 | 亚洲欧美日韩网站 | 精品国产伦一区二区三区观看体验 | 狠狠色狠狠色综合系列 | 国产成人综合在线 | 99精品一区二区 | 最新中文字幕一区 | 中文字幕91| 久久综合九色综合欧美狠狠 | 色视频www在线播放国产人成 | 亚洲精品一区二三区不卡 | 久久一区二区三区电影 | 国产一区二区三区四区 | 在线毛片网 | 国产精品久久久久久久久久免费看 | 日韩免费一区 | 伦理一区二区 | 黄色片网站国产 | 午夜影视免费片在线观看 | jlzzjlzz国产精品久久 | 天堂在线免费视频 | 成年人在线视频 | 91精品国产综合久久婷婷香蕉 | 国产精品久久久爽爽爽麻豆色哟哟 | 久久久久久看片 | 久久九 | 国产色视频网站 | 亚洲精品国产电影 | 国产精品日韩高清伦字幕搜索 | 欧美一区二区另类 | 国产色片|