Re: [問題] 超音波程式問題

看板ASM (組合語言)作者 (小呆榕)時間16年前 (2008/08/14 15:48), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串3/4 (看更多)
超音波測距,正常需求,如果距離為0~5cm,則亮紅燈。5~50cm,亮黃燈。50~150cm,則亮綠燈。 而現在程式出現的問題是,距離算的不夠精準,而且距離近的時候,紅燈亮起,而稍微拉遠時, 黃燈亮起一下之後,及轉成紅燈。無法確切得知距離遠近,程式上面不知道是哪裡出錯,還請各 位前輩不吝指教,謝謝。 以下為我們的程式: #include <REG51F.H> sbit P10=P1^0; sbit P11=P1^1; sbit P12=P1^2; sbit P36=P3^6; sbit P37=P3^7; void AddTime(void); void CountDistance(void); void delay_250US(void); void delay_10US(void); void delay_500MS(unsigned int count1); unsigned int Time=250,Distance=0,Count=0; main() { MAIN_L: P10=1; //紅燈 P11=1; //黃燈 P12=1; //綠燈 P37=1; //SINGLE_IN=H P36=0; delay_250US(); P36=1; while(1) { while(P37==1) { MAIN_H: TMOD=0x11; AddTime(); Time++; } while(P37==0) { delay_10US(); if(P37==1) { goto MAIN_H; } else { Distance=Time/58; goto MAIN_N; } MAIN_N: while(Distance>=0&&Distance<1&&Count<10) { P10=0; delay_500MS(10); P11=1; P12=1; Count++; } while(Distance>=5&&Distance<30&&Count<10) { P10=1; P11=0; delay_500MS(10); P12=1; Count++; } while(Distance>=30&&Distance<300&&Count<10) { P10=1; P11=1; P12=0; delay_500MS(10); Count++; } Count=0; Time=0; goto MAIN_L; } } } void delay_250US(void) { TL1=65536-250; TH1=(65536-250)>>8; TR1=1; while(TF1==0); TR1=0; TF1=0; } void AddTime(void) { TL0=65536-1; TH0=(65536-1)>>8; TR0=1; while(TF0==0); TR0=0; TF0=0; } void delay_10US(void) { TL0=65536-10; TH0=(65536-10)>>8; TR0=1; while(TF0==0); TR0=0; TF0=0; } void delay_500MS(unsigned int count1) { TL0=65536-50000; TH0=(65536-50000)>>8; TR0=1; while(TF0==0); TR0=0; TF0=0; count1--; } 不知道 算不算作業文捏 因為不知道錯誤在哪邊 希望高手~幫幫忙~說大概哪邊有錯誤~ 好讓我繼續改進 多謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.23.39.253

08/14 16:39, , 1F
能不能盡量不要用goto 呢?
08/14 16:39, 1F

08/14 18:41, , 2F
用平均啦,不要收到一次就做判斷
08/14 18:41, 2F
文章代碼(AID): #18e-DD6m (ASM)
討論串 (同標題文章)
文章代碼(AID): #18e-DD6m (ASM)