目次>5章 第2ステップ(色々な実験)>ステッピングモータを回す(ユニポーラ型)>ソース
ステッピングモータを回す(1相励磁)
更新日2008.5.17
以下のソースを取り込んで、アセンブル→PIC書き込み→実行して下さい。
; ========================== ここから ============================== ; PIC16F84A ; CLOCK : 20MHz ; ; ステッピングモータ(ユニポーラ型)の制御 ; (1相励磁) ; ; プリスケーラ : 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 010h MOVWF motor_data ;ステッピングモータ制御信号 CLRF TMR0 MOVLW 0A0h ;TMR0割り込みを使用する MOVWF INTCON ; ================ メイン処理 =============== main BTFSC flag,f_step CALL step_1R GOTO main ; ====== ステッピングモータ制御(1相励磁,右回転) ====== step_1R 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 ; =========================== ここまで ===============================