8051 C語言控制直流馬達相關問題 |
答題得分者是:taishyang
|
fushou0214
一般會員 ![]() ![]() 發表:3 回覆:4 積分:1 註冊:2015-08-05 發送簡訊給我 |
想請教各位高手們,以下是我的8051控制直流馬達,但是有些問題!
先說明以下動作 當我啟動電源時,直流馬達啟動,當碰到PB1時(按住不放),停止兩秒,啟動反轉,反轉一段距離後,離開PB1, 當碰到PB2時(按住不放),停止兩秒,啟動正轉,正轉一段距離後,離開PB2, 當碰到PB1時(按住不放),停止兩秒,啟動反轉,反轉一段距離後,離開PB1,以此類推....... 但是現在問題是,當我碰到PB1或PB2時,它會一直停止不動,想請教各位,是否我C程式哪邊錯了,以下是我的程式 再請各位協助一下,本人剛碰C不到兩個禮拜,有很多不懂請多包涵。 #include "reg51.h" sbit motor1 = P1^0; // 宣告直流馬達位置 sbit motor2 = P1^1; // 宣告直流馬達位置 sbit PB0 = P2^0; // 宣告按鈕開關位置 sbit PB1 = P2^1; // 宣告按鈕開關位置 void delay1ms(int); // 宣告延遲函數 //======================================== main() { motor1=1; // 啟動直流馬達 motor2=0; // 關閉直流馬達 //正轉中// PB0=1; // 設定PB0 PB1=1; // 設定PB1 while(1) // 無窮迴圈 { if (PB0==0 & PB1==1) // 若按下PB0,且PB1未按下 正極限 { motor1=0; // 設定直流馬達轉向 motor2=0; // 開啟直流馬達轉向 delay1ms(2000);// 停止2秒 motor2=1; // 進行反轉 } // 關閉直流馬達 if (PB0==1 & PB1==0) // 若按下PB1,且PB0未按下 負極限 { motor1=0; // 設定直流馬達轉向 motor2=0; // 開啟直流馬達轉向 delay1ms(2000); // 停止2秒 motor1=1; //進行正轉 } // 關閉直流馬達 } } // 結束 // ========== 延遲函數 ========= void delay1ms(int x) { int i,j; for (i=0;i } // 延遲函數結束 |
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
fushou0214
一般會員 ![]() ![]() 發表:3 回覆:4 積分:1 註冊:2015-08-05 發送簡訊給我 |
|
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
PB0 and PB1是input嗎?
用ICE debug一下是否有辦法進入你的條件中 ===================引 用 fushou0214 文 章=================== 一樣,碰到PB0時,停止不動!! |
fushou0214
一般會員 ![]() ![]() 發表:3 回覆:4 積分:1 註冊:2015-08-05 發送簡訊給我 |
===================引 用 taishyang 文 章=================== PB0 and PB1是input嗎? 用ICE debug一下是否有辦法進入你的條件中 ===================引 用 fushou0214 文 章=================== 一樣,碰到PB0時,停止不動!! PB0 and PB1是input沒錯!!! Debug....我不確定我會不會使用~ 我是使用Keil uVision4 來編輯..... |
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
fushou0214
一般會員 ![]() ![]() 發表:3 回覆:4 積分:1 註冊:2015-08-05 發送簡訊給我 |
|
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
試試
while(1){ motor1 = PB0; } 按下or放開PB0,讓motor1的high-low由PB0來決定 確認motor1可以讓馬達運轉跟停止 ===================引 用 fushou0214 文 章=================== 我是參考它的範例沒錯,但是我無法先停止個幾秒後後再運轉!!! 現在就是在找這個問題....... |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |