51單片機中輸出PWM信號時采用全局變量為何會造成輸出失真
已有 728 次閱讀2015-5-6 15:23
|
單片機
注:我用的是protues仿真,# include<reg51.h> //頭文件
sbit pulse=P1^0;//脈沖輸出口
sbit pulse2=P1^1;
int pwm1; //此處為要輸入的全局變量,為何設置全局變量pwm1和pwm2然后放到中斷中讓其輸出,產生的頻率會直接把計算式放到中斷不同,而且是錯誤的?
int pwm2; //如果這樣,要想從外部輸入定時器信息怎么辦?這些變量就算直接放到中斷中,也會造成輸出信號紊亂
int pwm3;
int pwm4;
void t0sss() interrupt 1 //定時器中斷0為確定輸出頻率
{
TH0=pwm1;//重新賦值,500就代表高低電平的半周期,TH和TL中的是計數器初值,中斷則是計數器從初值到溢出之后發生的,輸出一個信號,如果要產生脈寬,則設置第二個定時器中斷,輸出相反信號
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 ;
}
}