讀者可以做壹些修改,比如我用跳轉指令,讀者可以在進入加減速循環時改成調用指令。電機速度也可以修改為沒有下限。
而且判斷按鍵按下過程也可以有自己的方法,我的判斷按下釋放可能更麻煩。
我在數據表裏設置的是每個脈沖轉9,妳也可以根據實際需要修改自己的數據表。
這個程序我參考了《單片機實用系統設計與仿真經典範例》(編者:周景潤劉曉霞)的P25。有興趣的讀者可以從圖書館借這本書。
ORG 0000H
LJMP總管
ORG 0030H
主營:MOV 30H,# 05H加速和減速速度控制,控制延遲周期數(初始值)
MOV DPTR,# tab 1;向P2分配值的表查找方法
MOV R0,# 03HP2初始值
MOV R4,# 00H查找表指針值
MOV·P2,R0;估價
等待:MOV P0,# 0FFHP0需要輸出壹個1才能輸入。
JNB P0.0,宋3;檢查鍵是否按下,宋表示鍵是否放開,否則程序會混亂。
JNB P0.1,宋4;節目中的宋就是上面的意思。
SJMP等待;如果妳不按這個按鈕,它就不會啟動。
宋3:JB p 0.0,鄭;輸入正向旋轉
SJMP歌曲3;
宋4:JB p 0.1,範;輸入反轉
SJMP歌曲4;
鄭:01H;開始查表
loop 1:JB p 0.1,雲星1;檢查是否反轉,如果沒有按下反轉鍵,運轉正常。
宋1:JNB p 0.1,範;按下倒檔釋放並進入倒檔。
SJMP宋1;
運興1:MOV A,R4;查表
MOVC A,@ A+DPTR;
MOV·P2;
呼叫延遲;進入延時程序控制電機速度。
JB P0.3,cool 1;檢測減速按鈕是否按下,如果沒有,檢測加速按鈕是否按下。
宋5:JNB p 0.3,降1;按下進入延遲程序,修改循環次數。
SJMP歌曲5;
cool 1:JB p 0.2,normal 1;檢測加速按鈕是否按下,不按會正常運行。
宋6:JNB p 0.2,up 1;按加速鍵進入延遲程序,修改循環次數。
SJMP歌曲6;
nomal 1:INC R4;檢查下壹個數據
CJNE R4,#09H,loop 1;檢查完表中的數據後,重置R4的值,如果未選中,則不要重置R4。
鄭;循環正轉
粉絲:R4,# 07H反向R4初始值
loop 2:JB p 0.0,雲星2;檢測正向鍵是否被按下,如果沒有,正常運行反向程序。
宋2:p 0.0,鄭;按下正向旋轉按鈕並松開,進入正向旋轉程序。
SJMP歌曲2;
運星2:MOV A,R4;開始查表
MOVC A,@ A+DPTR;
MOV·P2;
呼叫延遲;進入延時程序控制電機速度。
JB P0.3,COOL2檢測減速按鈕是否按下,如果沒有,檢測加速按鈕是否按下。
宋7:JNB p 0.3,降2;按下進入延遲程序,修改循環次數。
SJMP歌曲7;
cool 2:JB p 0.2,正常2;檢測加速按鈕是否按下,不按會正常運行。
宋8:JNB p 0.2,UP2按下進入延遲程序,修改循環次數。
SJMP歌曲8;
師範2:R4 DEC;圓形查找表
CJNE R4,#00H,LOOP2再次檢查後,重置並重新檢查數據。
SJMP範;反轉循環
延時:MOV R6,# 05H
DD1: MOV R5,# 080H
DD2:MOV R7,# 05H
DD3:DJNZ R7,DD3;
DJNZ R5
DJNZ R6,DD 1;固定延遲
DJNZ R1,延時;通過改變延遲程序的循環時間來控制電機速度。
速度:MOV r 1.30h;將每個周期的速度值輸入R1。
SJMP回來了;
down 1:INC 30H;速度降低是因為循環數是+1。
CJNE R1,#10H,normal 1;限速下限為10。如果小於10,可以繼續減速。
MOV 30H,# 10H;到了下限就不能減速了,壹直是10。
SJMP師範1;返回到正向旋轉循環
up 1:12月30日;速度加,因為循環數是-1。
CJNE R1,#01H,normal 1;速度上限為1。如果小於1,可以繼續加速。
MOV 30H,# 01H;速度達到上限就無法加速,永遠是1。
SJMP師範1;返回正向旋轉循環
down 2:INC 30H;速度降低是因為循環數是+1。
CJNE R1,#10H,正常2;限速下限為10。如果小於10,可以繼續減速。
MOV 30H,# 10H;到了下限就不能減速了,壹直是10。
SJMP·諾瑪2;回到相反的循環
UP2:12月30日h;速度加,因為循環數是-1。
CJNE R1,#01H,正常2;速度上限為1。如果小於1,可以繼續加速。
MOV 30H,# 01H;速度達到上限就無法加速,永遠是1。
SJMP·諾瑪2;回到相反的循環
回:RET延遲子程序返回
tab 1:DB 00H,02H,06H,04H
DB 0CH,08H,09H,01H,03H控制每個通電順序的數值表。
結束;結束