當前位置:編程學習大全網 - 編程語言 - 51單片機,步進電機怎麽實現循環正反轉

51單片機,步進電機怎麽實現循環正反轉

以下程序是我在實驗中自己編寫的,幾乎全部都有詳細註釋,相信學過單片機的同學完全可以輕易讀懂。

讀者可進行壹些修改,比如我使用的都是跳轉指令,在進入加減速循環中讀者完全可以改成調用指令。電機速度也可修改為無上下限。

並且判斷按鍵過程也可有自己的方法,我的判斷按下松開可能會比較麻煩。

數表中我設置的是每個脈沖轉過9°,大家也可按照實際需要修改自己的數表。

這個程序我是參考了《單片機實用系統設計與仿真經典實例》(主編:周景潤 劉曉霞)的P25,讀者有興趣可以去圖書館借閱此書。

ORG 0000H

LJMP MAIN

ORG 0030H

MAIN: MOV 30H,#05H ;加減速速度控制,控制延時循環次數(初值)

MOV DPTR,#TAB1 ;查表法對P2賦值

MOV R0,#03H ;P2初值

MOV R4,#00H ;查表指針值

MOV P2,R0 ;賦值

WAIT: MOV P0,#0FFH ;P0需先輸出壹個1才可輸入

JNB P0.0,SONG3 ;檢測按鍵是否按下,SONG的意思是按鍵是否松開,否則程序會混亂

JNB P0.1,SONG4 ;程序中SONG均是上述意思

SJMP WAIT ;如果不按鍵就不啟動

SONG3: JB P0.0,ZHENG ;進入正轉

SJMP SONG3 ;

SONG4: JB P0.1,FAN ;進入反轉

SJMP SONG4 ;

ZHENG: MOV R4,#01H ;開始查表

LOOP1: JB P0.1,YUNXING1 ;檢測是否要反轉,如果未按反轉鍵就正常運行

SONG1: JNB P0.1,FAN ;按下反轉松開後進入反轉

SJMP SONG1 ;

YUNXING1:MOV A,R4 ;查表

MOVC A,@A+DPTR ;

MOV P2,A ;

ACALL DELAY ;進入延時程序控制電機速度

JB P0.3,COOL1 ;檢測是否按下減速按鍵,如果未按下再檢測是否按下加速按鍵

SONG5: JNB P0.3,DOWN1 ;按下後進入延時程序中修改循環次數

SJMP SONG5 ;

COOL1: JB P0.2,NOMAL1 ;檢測是否按下加速按鍵,未按下就正常運行

SONG6: JNB P0.2,UP1 ;按下加速鍵進入延時程序中修改循環次數

SJMP SONG6 ;

NOMAL1: INC R4 ;查下壹個數據

CJNE R4,#09H ,LOOP1;表中數據查完壹遍後將R4值復位,如未查完就不復位R4

SJMP ZHENG ;使正轉循環

FAN: MOV R4,#07H ;反轉R4初值

LOOP2: JB P0.0,YUNXING2 ;檢測是否按下正轉按鍵,如未按下正常運行反轉程序

SONG2: JNB P0.0,ZHENG ;按下正轉後松開按鍵進入正轉程序

SJMP SONG2 ;

YUNXING2:MOV A,R4 ;開始查表

MOVC A,@A+DPTR ;

MOV P2,A ;

ACALL DELAY ;進入延時程序控制電機速度

JB P0.3,COOL2 ;檢測是否按下減速按鍵如未按下就檢測是否按下加速按鍵

SONG7: JNB P0.3,DOWN2 ;按下後進入延時程序中修改循環次數

SJMP SONG7 ;

COOL2: JB P0.2,NOMAL2 ;檢測是否按下加速按鍵,未按下就正常運行

SONG8: JNB P0.2,UP2 ;按下後進入延時程序中修改循環次數

SJMP SONG8 ;

NOMAL2: DEC R4 ;循環查表

CJNE R4,#00H,LOOP2 ;數據查完壹遍後復位重新查

SJMP FAN ;反轉循環

DELAY: MOV R6,#05H ;

DD1: MOV R5,#080H ;

DD2: MOV R7,#05H ;

DD3: DJNZ R7,DD3 ;

DJNZ R5,DD2 ;

DJNZ R6,DD1 ;固定延時

DJNZ R1,DELAY ;通過改變延時程序的循環次數來控制電機速度

SPEED: MOV R1,30H ;每次循環都將速度值放在R1中

SJMP BACK ;

DOWN1: INC 30H ;速度減,因為循環次數+1

CJNE R1,#10H,NOMAL1;速度下限10,如果不到10可繼續減速

MOV 30H,#10H ;如果達到下限,無法減速,始終是10

SJMP NOMAL1 ;返回正轉循環中

UP1: DEC 30H ;速度加,因為循環次數-1

CJNE R1,#01H,NOMAL1;速度上限1,如果不到1可繼續加速

MOV 30H,#01H ;如果速度到達上限,不可再加速,始終是1

SJMP NOMAL1 ;返回正轉循環

DOWN2: INC 30H ;速度減,因為循環次數+1

CJNE R1,#10H,NOMAL2;速度下限10,如果不到10可繼續減速

MOV 30H,#10H ;如果達到下限,無法減速,始終是10

SJMP NOMAL2 ;返回反轉循環中

UP2: DEC 30H ;速度加,因為循環次數-1

CJNE R1,#01H,NOMAL2;速度上限1,如果不到1可繼續加速

MOV 30H,#01H ;如果速度到達上限,不可再加速,始終是1

SJMP NOMAL2 ;返回反轉循環中

BACK: RET ;延時子程序返回

TAB1: DB 00H,02H,06H,04H

DB 0CH,08H,09H,01H,03H ;控制各項通電順序的數值表

END ;結束

  • 上一篇:2019深圳機甲大師賽總決賽舉辦時間+地點+票價
  • 下一篇:黑龍江哈爾濱附近危險品物流(甲醇)運輸有沒有做的?要有資質的單位,長期合作,月千噸以上(本公司投標
  • copyright 2024編程學習大全網