線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1447
推到 Plurk!
推到 Facebook!

8051 C語言控制直流馬達相關問題

答題得分者是:taishyang
fushou0214
一般會員


發表:3
回覆:4
積分:1
註冊:2015-08-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2015-08-10 08:53:11 IP:42.73.xxx.xxx 訂閱
想請教各位高手們,以下是我的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 for (j=0;j<120;j ); // 內迴圈
} // 延遲函數結束
taishyang
站務副站長


發表:377
回覆:5486
積分:4552
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2015-08-10 09:38:58 IP:59.127.xxx.xxx 訂閱
猜的
if (PB0==0 && PB1==1) // 若按下PB0,且PB1未按下 正極限
if (PB0==1 && PB1==0) // 若按下PB1,且PB0未按下 負極限

fushou0214
一般會員


發表:3
回覆:4
積分:1
註冊:2015-08-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2015-08-11 08:04:30 IP:42.73.xxx.xxx 訂閱
一樣,碰到PB0時,停止不動!!
taishyang
站務副站長


發表:377
回覆:5486
積分:4552
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2015-08-11 09:44:25 IP:59.127.xxx.xxx 訂閱
PB0 and PB1是input嗎?
用ICE debug一下是否有辦法進入你的條件中


===================引 用 fushou0214 文 章===================
一樣,碰到PB0時,停止不動!!
fushou0214
一般會員


發表:3
回覆:4
積分:1
註冊:2015-08-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2015-08-12 10:38:49 IP:223.137.xxx.xxx 訂閱

===================引 用 taishyang 文 章===================
PB0 and PB1是input嗎?
用ICE debug一下是否有辦法進入你的條件中


===================引 用 fushou0214 文 章===================
一樣,碰到PB0時,停止不動!!



PB0 and PB1是input沒錯!!!

Debug....我不確定我會不會使用~

我是使用
Keil uVision4 來編輯.....
taishyang
站務副站長


發表:377
回覆:5486
積分:4552
註冊:2002-10-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2015-08-12 11:02:49 IP:59.127.xxx.xxx 訂閱
你的硬體確定沒問題嗎?
可參考下面連結,跟你的需求一樣,連程式碼都很像 ^^
http://igtplus.kssh.tn.edu.tw/assets/documents/73/original/d41d8cd98f00b204e9800998ecf8427e.pdf
編輯記錄
taishyang 重新編輯於 2015-08-12 11:08:52, 註解 無‧
fushou0214
一般會員


發表:3
回覆:4
積分:1
註冊:2015-08-05

發送簡訊給我
#7 引用回覆 回覆 發表時間:2015-08-13 08:05:50 IP:42.73.xxx.xxx 訂閱
我是參考它的範例沒錯,但是我無法先停止個幾秒後後再運轉!!! 現在就是在找這個問題.......
taishyang
站務副站長


發表:377
回覆:5486
積分:4552
註冊:2002-10-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2015-08-13 09:49:39 IP:59.127.xxx.xxx 訂閱
試試
while(1){
motor1 = PB0;
}
按下or放開PB0,讓motor1的high-low由PB0來決定

確認motor1可以讓馬達運轉跟停止


===================引 用 fushou0214 文 章===================
我是參考它的範例沒錯,但是我無法先停止個幾秒後後再運轉!!! 現在就是在找這個問題.......
系統時間:2018-01-20 8:57:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!