找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3135|回復(fù): 3
收起左側(cè)

51單片機(jī)中輸出PWM信號(hào)時(shí)采用全局變量為何會(huì)造成輸出失真

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

   pulse=~pulse;
   TR1=1;                                         //啟動(dòng)定時(shí)器中斷1,類似于嵌套結(jié)構(gòu)
   
}
void t1sss() interrupt 3        //定時(shí)器中斷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;//計(jì)劃pwm信號(hào)改變值從這里開(kāi)始,后期擬吧這個(gè)變量改變成外界直接輸入
           pwm2=(65536-500)%256;
        pwm3=(65536-100)/256;
        pwm4=(65536-100)%256 ;

}
}

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:79137 發(fā)表于 2015-5-6 23:11 | 顯示全部樓層
你把pwm1   2  3  4  的值先初始化一下

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:79137 發(fā)表于 2015-5-6 23:12 | 顯示全部樓層
你把pwm1   2  3  4  的值先初始化一下
回復(fù)

使用道具 舉報(bào)

ID:79077 發(fā)表于 2015-5-7 15:40 | 顯示全部樓層
王懷宇 發(fā)表于 2015-5-6 23:12
你把pwm1   2  3  4  的值先初始化一下

好的,我試試,謝謝!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表