找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機中輸出PWM信號時采用全局變量為何會造成輸出失真

[復制鏈接]
跳轉到指定樓層
樓主
ID:79077 發(fā)表于 2015-5-6 15:23 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
注:我用的是Proteus仿真,
#include<reg51.h>                                           //頭文件
sbit pulse=P1^0;//脈沖輸出口
sbit pulse2=P1^1;
int pwm1;  //此處為要輸入的全局變量,為何設置全局變量pwm1和pwm2然后放到中斷中讓其輸出,產(chǎn)生的頻率會直接把計算式放到中斷不同,而且是錯誤的?
int pwm2; //如果這樣,要想從外部輸入定時器信息怎么辦?這些變量就算直接放到中斷中,也會造成輸出信號紊亂
  int pwm3;  
int pwm4;
void t0sss() interrupt 1        //定時器中斷0為確定輸出頻率
{
          TH0=pwm1;//重新賦值,500就代表高低電平的半周期,TH和TL中的是計數(shù)器初值,中斷則是計數(shù)器從初值到溢出之后發(fā)生的,輸出一個信號,如果要產(chǎn)生脈寬,則設置第二個定時器中斷,輸出相反信號
    TL0=pwm2;

   pulse=~pulse;
   TR1=1;                                         //啟動定時器中斷1,類似于嵌套結構
   
}
void t1sss() interrupt 3        //定時器中斷1,輸出特定脈寬
{

      TH1=pwm3;//重新賦值,
    TL1=pwm4;
   pulse=~pulse;
   TR1=0;                         //

}
main()
{
   TMOD=0x11;//使用模式1
   TH0=pwm1;//重新賦值,這里是
   TL0=pwm2;
   TH1=pwm3;//重新賦值,
   TL1=pwm4;
   ET0=1;
   EA=1;
   TR0=1;
   ET1=1;

while(1);         //
   {
           pwm1=(65536-500)/256;//計劃pwm信號改變值從這里開始,后期擬吧這個變量改變成外界直接輸入
           pwm2=(65536-500)%256;
        pwm3=(65536-100)/256;
        pwm4=(65536-100)%256 ;

}
}

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

使用道具 舉報

沙發(fā)
ID:79137 發(fā)表于 2015-5-6 23:11 | 只看該作者
你把pwm1   2  3  4  的值先初始化一下

評分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:79137 發(fā)表于 2015-5-6 23:12 | 只看該作者
你把pwm1   2  3  4  的值先初始化一下
回復

使用道具 舉報

地板
ID:79077 發(fā)表于 2015-5-7 15:40 | 只看該作者
王懷宇 發(fā)表于 2015-5-6 23:12
你把pwm1   2  3  4  的值先初始化一下

好的,我試試,謝謝!
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表