返回討論區
 列印本文  

本篇主題:步進馬達分度控制
我現在要利用8051控制步進馬達(1.8度)做實驗 我希望步進馬達可以每走10步停5秒在走10步停5秒 直到50步(90度)停止再反轉 現在我只能讓步進馬達從0步直接走到50步在反轉直接到0度 ;============================ ;程式檔名: P12-1.asm ;============================ ;== 主程式 == ;============================ MotorBuffer equ 30h org 0 jmp Reset Reset: mov sp,#6fh mov MotorBuffer,#11101110b; 1 相激磁方式 Start: mov r3,#50 ;50步 (1.8度*50=90度) ;============================ ;== 步進馬達正轉副程式 == ;============================ Forward: mov a,MotorBuffer ; rl a ;產生正轉的激磁時相脈衝 mov MotorBuffer,a ;並由p1輸出 mov p1,a ; mov r7,#100 ;每走一步,停100ms call Delay_10ms ; djnz r3,Forward ;繼續走完50步 mov r7,#200 ;休息2秒鐘 call Delay_10ms mov r3,#50 ;設定反轉50步(1/4圈) ;============================ ;== 步進馬達反轉副程式 == ;============================ Reverse: mov a,MotorBuffer ; rr a ;產生反轉時序脈衝 mov MotorBuffer,a ;並由p1輸出 mov p1,a ; mov r7,#100 ;每走一步,停100ms call Delay_10ms ; djnz r3,Reverse ;繼續走完50步 mov r7,#200 ;休息2秒鐘 call Delay_10ms jmp Start ;重頭重複執行程式 ;============================= ;== 延時副程式 == ;============================= ;每呼叫本副程式一次,可延時(r7)*10ms ;採用計時器0(Timer0)的 Mode1 Delay_10ms: mov tmod,#00000001b ; mov tl0,#<(2^16-10000).mod.32; mov th0,#>(2^16-10000)/32 ; setb tr0 ;啟動計時器,開始計時 Timer_Wait: jbc tf0,Timer_Ok ; jmp Timer_Wait ;若未計時完(tf0=0)則跳回Timer_Wait,繼續檢查 Timer_Ok: djnz r7,Delay_10ms ;讓Timer0執行計時10ms工作(r7)次 clr tr0 ;停止計時工作. ret ; .end ;程式結束 要怎樣改程式碼才能達到我要的動作

本話題由 藍威政 於2012-04-10 07:55:32 發表 
目前尚未有會員回覆...


欲回應此篇文章,請先登入!