?? step1.asm
字號(hào):
;實(shí)驗(yàn)?zāi)康模翰竭M(jìn)電機(jī)的使用
;1、步近電機(jī)的驅(qū)動(dòng)
;2、步近電機(jī)方向的控制(通過(guò)改變送電順序
;系統(tǒng)設(shè)計(jì)
;1、本實(shí)驗(yàn)采用4相4拍步進(jìn)電機(jī),步進(jìn)角為7.5
;2、步進(jìn)電機(jī)驅(qū)動(dòng)口連接在RA0-RA3
;3、按下RB0,停止電機(jī)轉(zhuǎn)動(dòng);按下RB1,電機(jī)正轉(zhuǎn);按下RB2,電機(jī)反轉(zhuǎn)
;硬件要求:
;撥碼開關(guān)S1第6位到第8位置ON,S1其他位和其他撥碼開關(guān)斷開
;撥碼開關(guān)S15全部置ON。
;其他撥碼開關(guān)關(guān)閉。
include<p16f877a.inc> ;包含877A的頭文件
__CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC
;芯片配置字,看門狗關(guān),上電延時(shí)開,掉電檢測(cè)關(guān),低壓編程關(guān),加密,4M晶體HS振蕩
#define step1 3h ;轉(zhuǎn)動(dòng)第1步驅(qū)動(dòng)信號(hào)(不同的電機(jī),可以引出線順序不一樣)
#define step2 6h ;轉(zhuǎn)動(dòng)第2步驅(qū)動(dòng)信號(hào)(本程序以“常州市豐源微特電記有限公司的35BY48S053”電機(jī)為基礎(chǔ))
#define step3 0ch ;轉(zhuǎn)動(dòng)第3步驅(qū)動(dòng)信號(hào)
#define step4 9h ;轉(zhuǎn)動(dòng)第4步驅(qū)動(dòng)信號(hào)
#define stop portb,0 ;停止鍵
#define right portb,1 ;正轉(zhuǎn)鍵
#define left portb,2 ;反轉(zhuǎn)鍵
cblock 30h
mode ;停止/正轉(zhuǎn)/反轉(zhuǎn)控制寄存器
endc
org 00h ;復(fù)位入口
nop ;ICD所需要的空指令
goto main ;跳轉(zhuǎn)到主程序
org 05h
;****************************主程序***************************
main
banksel adcon1
movlw 07h
movwf adcon1 ;設(shè)置所有A口為普通數(shù)字口
banksel trisa
clrf trisa ;設(shè)置A口為輸出
movlw 0ffh
movwf trisb ;設(shè)置B口為輸入
CLRF OPTION_REG ;啟用B口的內(nèi)部弱上拉功能
clrf status
clrf mode ;先停止電機(jī)
movlw step1 ;初始電機(jī)狀態(tài)
movwf porta
call delay
;****************************檢查電機(jī)工作狀態(tài)*******************
check
btfsc stop ;是否停止工作
goto check1 ;否,轉(zhuǎn)去判斷其他狀態(tài)
movlw 0
movwf mode ;是,清0工作狀態(tài)控制寄存器
goto check_end ;跳轉(zhuǎn)到驅(qū)動(dòng)電機(jī)工作
check1
btfsc right ;是否正轉(zhuǎn)?
goto check2 ;否,轉(zhuǎn)去判斷是否反轉(zhuǎn)
movlw 1
movwf mode ;是,工作狀態(tài)寄存器送1
goto check_end ;跳轉(zhuǎn)到驅(qū)動(dòng)電機(jī)工作
check2
btfsc left ;是否反轉(zhuǎn)
goto check_end ;否,跳轉(zhuǎn)到驅(qū)動(dòng)電機(jī)工作
movlw 2
movwf mode ;是,工作狀態(tài)寄存器送1
goto check_end
;*****************************驅(qū)動(dòng)電機(jī)工作**********************
check_end
movfw mode
btfsc status,z ;判斷是否停止電機(jī)
goto check ;是,返回檢測(cè)控制信號(hào)
;通過(guò)讀回當(dāng)前的驅(qū)動(dòng)信號(hào),結(jié)合正轉(zhuǎn)/反轉(zhuǎn)控制,決定下一步的輸出控制信號(hào)
movlw step1
xorwf porta,0
btfss status,z ;當(dāng)前控制信號(hào)是否為step1
goto driver2 ;否,轉(zhuǎn)去判斷其他信號(hào)
movlw 1 ;是,判斷下一步正轉(zhuǎn)還是反轉(zhuǎn)
subwf mode,0
btfss status,z ;正轉(zhuǎn)?
goto driver1 ;否,反轉(zhuǎn)
movlw step2 ;下一步驅(qū)動(dòng)信號(hào)為step2
movwf porta ;驅(qū)動(dòng)信號(hào)送A口
call delay ;調(diào)用延時(shí)程序
goto check ;返回主程序繼續(xù)判斷
driver1 ;下一步應(yīng)該為反轉(zhuǎn)
movlw step4 ;下一步驅(qū)動(dòng)信號(hào)為step4
movwf porta ;驅(qū)動(dòng)信號(hào)送A口
call delay ;調(diào)用延時(shí)程序
goto check ;返回主程序繼續(xù)判斷
driver2
movlw step2
xorwf porta,0
btfss status,z ;當(dāng)前控制信號(hào)是否為step2
goto driver4 ;否,轉(zhuǎn)去判斷其他信號(hào)
movlw 1 ;是,判斷下一步正轉(zhuǎn)還是反轉(zhuǎn)
subwf mode,0
btfss status,z ;正轉(zhuǎn)?
goto driver3 ;否,反轉(zhuǎn)
movlw step3 ;下一步驅(qū)動(dòng)信號(hào)為step3
movwf porta ;驅(qū)動(dòng)信號(hào)送A口
call delay ;調(diào)用延時(shí)程序
goto check ;返回主程序繼續(xù)判斷
driver3
movlw step1 ;下一步驅(qū)動(dòng)信號(hào)為step1
movwf porta ;驅(qū)動(dòng)信號(hào)送A口
call delay ;調(diào)用延時(shí)程序
goto check ;返回主程序繼續(xù)判斷
driver4
movlw step3 ;下一步驅(qū)動(dòng)信號(hào)為step3
xorwf porta,0
btfss status,z ;當(dāng)前控制信號(hào)是否為step3
goto driver6 ;否,轉(zhuǎn)去判斷其他信號(hào)
movlw 1 ;是,判斷下一步正轉(zhuǎn)還是反轉(zhuǎn)
subwf mode,0
btfss status,z ;正轉(zhuǎn)?
goto driver5 ;否,反轉(zhuǎn)
movlw step4 ;下一步驅(qū)動(dòng)信號(hào)為step4
movwf porta ;驅(qū)動(dòng)信號(hào)送A口
call delay ;調(diào)用延時(shí)程序
goto check ;返回主程序繼續(xù)判斷
driver5
movlw step2 ;下一步驅(qū)動(dòng)信號(hào)為step2
movwf porta ;驅(qū)動(dòng)信號(hào)送A口
call delay ;調(diào)用延時(shí)程序
goto check ;返回主程序繼續(xù)判斷
driver6
movlw step4 ;下一步驅(qū)動(dòng)信號(hào)為step4
xorwf porta,0
btfss status,z ;當(dāng)前控制信號(hào)是否為step4
goto check ;否,返回主程序繼續(xù)判斷
movlw 1 ;是,判斷下一步正轉(zhuǎn)還是反轉(zhuǎn)
subwf mode,0
btfss status,z ;正轉(zhuǎn)?
goto driver7 ;否,反轉(zhuǎn)
movlw step1 ;下一步驅(qū)動(dòng)信號(hào)為step1
movwf porta ;驅(qū)動(dòng)信號(hào)送A口
call delay ;調(diào)用延時(shí)程序
goto check ;返回主程序繼續(xù)判斷
driver7
movlw step3 ;下一步驅(qū)動(dòng)信號(hào)為step3
movwf porta ;驅(qū)動(dòng)信號(hào)送A口
call delay ;調(diào)用延時(shí)程序
goto check ;返回主程序繼續(xù)判斷
;*******************************延時(shí)程序********************************
;控制輸出的頻率
delay
movfw 0FH
movwf 21h
movlw 0ffh
movwf 22h
decfsz 22h,1
goto $-1
decfsz 21h,1
goto $-5
return
;******************************源程序結(jié)束*******************************
end
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -