|
|
下邊程序 在試驗時 ,前四次按開關(guān) 可以正常到循環(huán)次數(shù)后 停下,但第五次按開關(guān)時 就不停了,關(guān)電重啟后 也是一樣,只有四次開關(guān)有效,不論是 K0 K1,或者是隨便,只要達(dá)五次開關(guān),就不停, 什么原因。
ORG 00H;
K0 EQU P0.0 ; 設(shè)定P0.0以 K0 代表示反轉(zhuǎn)
K1 EQU P0.1 ; 設(shè)定P0.1以 K1 表示正轉(zhuǎn),
STOP: MOV P1 , #0FFH ; 電機(jī)停止; 開始掃描各按鈕狀態(tài);
LOOP: JNB K0 , FM ; 是否按 K0 --是 則反轉(zhuǎn)
JNB K1 , ZM ; 是否按 K1 -- 是則正轉(zhuǎn)
JMP LOOP ; 跳到 LOOP 處循環(huán)掃描檢查開關(guān)狀況; ;開關(guān)消抖程序
K0XD: ACALL DELAY ; 按K0 的肖抖
JNB K0 , $ ; K0 放開否?
ACALL DELAY ; 放開削除抖動
JMP FM ; 轉(zhuǎn)到反轉(zhuǎn)處
K1XD: ACALL DELAY ; 按K1 的肖抖
JNB K1 , $ ; K1 放開否?
ACALL DELAY ; 放開削除抖動
JMP ZM ; 轉(zhuǎn)到ZM處 ;反轉(zhuǎn)300步子程序;
FM: MOV R1 , #00;
MOV R1 , #75 ; 走300步的脈沖數(shù)循環(huán)次數(shù)
FM1: MOV P1, #0F3H ; 第一步
ACALL DELAY ; 延時4MS
MOV P1, #0F9H ; 第二步
ACALL DELAY ; 延時4MS
MOV P1, #0FCH ; 第三步
ACALL DELAY ; 延時4MS
MOV P1, #0F6H ; 第四步
ACALL DELAY ; 延時4MS
DJNZ R1, FM1; 循環(huán)
RET; ; 正轉(zhuǎn)300子程序ZM:
MOV R1 , #00 ;
MOV R1 , #75 ; 走300步的脈沖數(shù)循環(huán)次數(shù)
ZM1: MOV P1 , #0F6H ; 第一步
ACALL DELAY ; 延時4MS
MOV P1 , #0FCH ; 第二步
ACALL DELAY ; 延時4MS
MOV P1 , #0F9H ; 第三步
ACALL DELAY ; 延時4MS
MOV P1 , #0F3H ; 第四步
ACALL DELAY ; 延時4MS
DJNZ R1, ZM1; 循環(huán)
RET;
DELAY: MOV TMOD , #00000001B ; 延時時間4MS
SETB TR0 ;
MOV TL0 , #LOW(65336-4000);
MOV TH0 , #HIGH(65336-4000);
JNB TF0 , $ ;
CLR TF0 ;
RET ;
END
|
|