目次>5章 第2ステップ(色々な実験)>ステッピングモータを回す(ユニポーラ型)>ソース
ステッピングモータを回す(2相励磁)
更新日2008.5.17
以下のソースを取り込んで、アセンブル→PIC書き込み→実行して下さい。
; ========================== ここから ==============================
; PIC16F84A
; CLOCK : 20MHz
;
; ステッピングモータ(ユニポーラ型)の制御
; (2相励磁)
;
; プリスケーラ : 16
; TMR0 : フリーラン
; TMR0割込み周期 : 819.2uS
;
LIST P=PIC16F84A
INCLUDE P16F84A.INC
__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
CBLOCK 0Ch
save_st ;STATUSのセーブ
save_w ;W-regのセーブ
interval ;インターバル
interval_i ;インターバル初期値
motor_data ;パルスモータ制御ビット
flag ;処理フラグ
; bit0:1ステップ時間経過
ENDC
f_step EQU 0 ;flag[0]:1ステップ時間経過
; ============================================
ORG 0 ;リセットベクタ
GOTO init
; ========= 割り込み処理 (タイマ)=============
ORG 4 ;割込みベクタ
intr
MOVWF save_w ;W-regセーブ
SWAPF STATUS,W
MOVWF save_st ;STATUSレジスタセーブ
BCF INTCON,T0IF ;割込みフラグクリア
DECFSZ interval,F ;ステッピングモータ1ステップ時間経過?
GOTO intr90 ; No
MOVF interval_i,W
MOVWF interval ;インターバル初期値設定
BSF flag,f_step ;1ステップ時間経過
intr90
SWAPF save_st,W
MOVWF STATUS ;STATUSレジスタロード
SWAPF save_w,F
SWAPF save_w,W ;W-regロード
RETFIE ;割込み許可リターン
; ================ 初期処理 ================
init
BSF STATUS,RP0 ;■バンク1に切替え
MOVLW 0Fh ;RB0-3:input,RB4-7:output
MOVWF TRISB
MOVLW 083h ;プリスケーラ:16
MOVWF OPTION_REG
BCF STATUS,RP0 ;■バンク0に切替え
;0.2uS×256×16×30=24.576mS
MOVLW d'30' ;ステッピングモータ1ステップのカウンタ
MOVWF interval_i ;初期値
MOVWF interval ;現在値
MOVLW 030h
MOVWF motor_data ;ステッピングモータ制御信号
CLRF TMR0
MOVLW 0A0h ;TMR0割り込みを使用する
MOVWF INTCON
; ================ メイン処理 ===============
main
BTFSC flag,f_step
CALL step_2R
GOTO main
; ====== ステッピングモータ制御(2相励磁,右回転) ======
step_2R
BCF flag,f_step
BCF STATUS,C
RLF motor_data,F
BTFSC STATUS,C
BSF motor_data,4
MOVLW 0Fh
ANDWF PORTB,W
IORWF motor_data,W
MOVWF PORTB
RETURN
END
; =========================== ここまで ===============================