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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機pwm脈寬調制程序詳解

[復制鏈接]
跳轉到指定樓層
樓主
ID:83710 發表于 2015-6-23 19:11 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這個問題困擾我三天了,剛開始在考慮怎樣做,結果很快程序完成,不幸的是程序在脈寬調寬是竟然是尖峰波,斷續,后多次調試未果,后來跟蹤time0變量,也正常,原來是在中斷時位對立即采樣寄存器清零造成,程序判斷錯誤,而誤動作!在修改變量time0是結束加兩條請立即采樣寄存器,一切變得如此簡單,加油!PWM是很有用的!
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit p1_0=P0^0;
sbit p2_0=P2^0;//加鍵
sbit p2_1=P2^1;//減鍵

uint t=100;  //周期
uint time0; // 低電平可按鍵調整量
uint time1; // 高點平基準量
uint timeing0;//立即低電平動態變量
uint timeing1; //立即高電平動態變量
void delay(uint z) //延時程序
{  
uint x,a,b;
         for (x=0;x<z;x++)
   
       {
       for(b=120;b>0;b--)
    {
        for(a=3;a>0;a--);
     
             }
    }

}

void keyball()//{按鍵修改定時數據,實現實時PWM調制

  if(p2_0==0)
  {
   delay(3);
                     if(p2_0==0)
      {
      
             if(time0>1)
         {
         
         
          time0--;
          time1=(t-time0);
         
          timeing0=0;
          timeing1=0;
         
         }


      
      }
  
  
  
  
  
  
  }
//
*********************已上是減低電平************一下是加低電平******************if(p2_1==0)
  {
   delay(3);
                     if(p2_1==0)
      {
      
             if(time0<100)
         {
         
         
          time0++;
          time1=(t-time0);
          timeing0=0;
          timeing1=0;  //太關鍵了!這一步,因為不加的話,當再一次的time0被修改時timeing0,和timeing1不為0
         //             所以才會發生錯誤,表現為波形時斷時續,而且有尖鋒脈沖,這都是沒有在刷新TIME0的同時刷新tineing的后果
         //             沒想到很簡單的一點事竟差點PWM做不出來!真是有有教訓了
         //             2010年10月7日晚8:34分與天津開發區第四項目部宿舍1
         
         
         }


      
      }
  
  
  
  
  
  
  }

}
void InitTimer0(void) //10us
{
    TMOD = 0x01;

    TH0 =0xff;
    TL0 =0xf7;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
  p1_0=1;
}
void main(void)//主函數
{ P2=0x0f;
    InitTimer0(); //10 us  time0=10;(根據不同的精準度和頻率要求)

  time1=10;
  while(1)
  {
  
  keyball();
  P3=time0;
  
  }







}
void Timer0Interrupt(void) interrupt 1
{
   
     if(time0==timeing0)
  {
        if(time1!=timeing1)
     {
     
        TH0 =0xff;
              TL0 =0xf7;
          p1_0=1;
          timeing1++;
     
     
     }
       //中斷函數(定時器參量修改)




  }
   else
   if(time0!=timeing0)
     {
   TH0 =0xff;
        TL0 =0xf7;
    p1_0=0;
   timeing0++;   
  
  
  
  }
  if(time0==timeing0)
  {
  if(time1==timeing1)
  {
  
   timeing0=0;
   timeing1=0;
  }
  }
   
}


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

使用道具 舉報

沙發
ID:45963 發表于 2015-6-24 07:56 | 只看該作者
先點個贊
回復

使用道具 舉報

板凳
ID:46475 發表于 2018-4-1 21:08 | 只看該作者
厲害了
回復

使用道具 舉報

地板
ID:170318 發表于 2018-4-4 09:16 | 只看該作者
不錯,有鉆勁
回復

使用道具 舉報

5#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91久久国产综合久久91精品网站 | 欧美激情视频一区二区三区免费 | 天天爽夜夜骑 | 免费的av网站 | 国产成人福利视频 | a级大毛片 | 日韩国产一区二区 | 国产96在线| 成人免费视频网站在线观看 | 精品免费国产视频 | 亚洲不卡一 | 国产日韩欧美综合 | 国产目拍亚洲精品99久久精品 | 久一精品 | 久久久精品久 | 亚洲欧美日韩精品久久亚洲区 | 欧美一区成人 | 一区免费观看 | 精品国产91| 国产综合久久久久久鬼色 | 国产在线一区二区三区 | 中文字幕在线看人 | www.三级| 四季久久免费一区二区三区四区 | 国产精品99久久久久久人 | 久久成人精品一区二区三区 | 在线观看av中文字幕 | 久久国产亚洲 | 91免费福利在线 | caoporn国产| 久草精品视频 | 精品一区国产 | 成人特区 | 国产乱码一二三区精品 | 中文字幕观看 | 国产视频二区 | 欧美日韩在线观看一区 | 久久男人 | 久久久精品一区 | 国产亚洲一区二区三区在线 | 国产精品一区二区在线 |