|
這是我的主程序段,當(dāng)我把電機(jī)運(yùn)轉(zhuǎn)和溫控這兩個分開在工程時可以完全得到想要的,但是在我把這兩個結(jié)合時就完全不能實(shí)現(xiàn),為什么當(dāng)我進(jìn)行仿真時電機(jī)只轉(zhuǎn)一個角度就直接超溫停止了,可我的DS18B20都沒有達(dá)到溫度上限值?
void main()
{
uchar i,j,n;
TMOD|=0x01;//定時器設(shè)置
TH0=0xef;//裝初始值
TL0=0xf0;
EA=1;// 開總中斷
ET0=1;//允許定時器0中斷
TR0=1;//開定時器0中斷
RRR=25; //設(shè)置每步延時250ms
check=0;
stop_turing=0;
while(1)
{
if(m_switch==0) //總開關(guān)
{
if(P1!=0xff||P3_0!=1) //判斷是否有步數(shù)按下
{
step(); //判斷步數(shù)
rotation(); //判斷正逆轉(zhuǎn),
if(flg==0) //電機(jī)運(yùn)轉(zhuǎn)時有正逆轉(zhuǎn)的指示燈指示
{
F_led=0; //正轉(zhuǎn)燈
}
else
{
R_led=0; //逆轉(zhuǎn)燈
}
P0=0x0c; //給電機(jī)打開起始位BA,如果在三相單三中則改為P0=0x06;
for(j=0;j<num;j++)
{
if(stop_turing==1)
{
break;
}
for(i=0;i<=3;i++) //給P0口輸出轉(zhuǎn)動,如果在三相單三中則改為for(i=0;i<=2;i++)
{
P0=output[flg][i];
for(n=0;n<RRR;n++) //延時
{
delay(10);
}
if(check==1) //檢查溫度標(biāo)示由定時器給出
{
handle_Temperature();// 處理溫度:如果超溫則stop_turing==1,同時報警響和紅燈亮
}
if(stop_turing==1)
{
break;
}
}
}
F_led=1; //關(guān)燈
R_led=1;
P0=0x0f; //給P0口復(fù)位
}
}
}
}
|
|