用keil c 寫的8051控制步進馬達的程式 |
答題得分者是:阿信
|
jk90213
一般會員 發表:5 回覆:4 積分:1 註冊:2008-09-05 發送簡訊給我 |
學校最近開始做專題,我們想寫出一個8051控制步進馬達正轉四圈之後就逆轉四圈,但是重點來了,它只能正轉或是逆轉,程式只能進入if不能進入else
可以請各位大大幫我看看哪邊有錯誤嗎? 這是我寫的程式: #include "reg51.h" char count=5; char direct=0; unsigned char step=0x01; unsigned int speed=(65536-5000); main() { IE=0x82; TMOD=0x01; TH0=(65536-2000)/256; TL0=(65536-2000)%6; TR0=1; while(1); } void T0_int(void) interrupt 1 { TH0=speed/256; TL0=speed%6; if(--count==0) { count=5; if(direct==0) { step>>=1; if(step==0x00) step=0x08; P1&=0xf0; P1|=step; } else { step<<=1; if(step==0x10) step=0x01; P1&=0xf0; P1|=step; } } } 編輯記錄
jk90213 重新編輯於 2008-10-04 02:14:00, 註解 無‧
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
|
jk90213
一般會員 發表:5 回覆:4 積分:1 註冊:2008-09-05 發送簡訊給我 |
我現在程式修改成
#include "reg51.h" char count=5; char direct=0; unsigned char step=0x01; unsigned int speed=(65536-5000); main() { IE=0x82; TMOD=0x01; TH0=(65536-2000)/256; TL0=(65536-2000)%6; TR0=1; while(1); } void T0_int(void) interrupt 1 { TH0=speed/256; TL0=speed%6; if(--count==0) { count=5; if(direct==0) { step>>=1; if(step==0x00) step=0x08; direct=1; P1&=0xf0; P1|=step; } else { step<<=1; if(step==0x10) step=0x01; direct=0; P1&=0xf0; P1|=step; } } } 目前動作步進馬達左右晃動 沒有正轉或逆轉的效果 |
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
|
阿信
版主 發表:111 回覆:983 積分:813 註冊:2005-03-10 發送簡訊給我 |
才走了一步就換邊,當然只會原地抖動。
要讓它走800步才換邊呀! #include "reg51.h" if (--count<=0) {count=800; direct=1;} // 走完4圈才換邊 P1&=0xf0; P1|=step; } else { step<<=1; if(step==0x10) step=0x01; if (--count<=0) {count=800; direct=0;} // 走完4圈才換邊 P1&=0xf0; P1|=step; } // } }
編輯記錄
阿信 重新編輯於 2008-10-09 13:18:47, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |