51單片機(jī)中輸出PWM信號(hào)時(shí)采用全局變量為何會(huì)造成輸出失真
已有 714 次閱讀2015-5-6 15:23
|
單片機(jī)
注:我用的是protues仿真,# 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 ;
}
}