; ; 実験4 1相励磁ステッピングモータ駆動プログラム ; ; CONFIG1 __CONFIG _CONFIG1, _FOSC_XT & _WDTE_OFF & _PWRTE_ON & _MCLRE_ON & _BOREN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CCPMX_RB0 & _CP_OFF ; CONFIG2 __CONFIG _CONFIG2, _FCMEN_ON & _IESO_ON list p=16F87 #include ORG 0x000 ; リセットベクタを 0番地に指定 BSF STATUS,RP0 ; STATUSのビットPR0をセット(BANK 1) MOVLW B'00001111' ; WレジスタにB'00001111'を転送 MOVWF TRISA ; Aポートの下位4bitを入力に設定 CLRF TRISB ; Bポートを全て出力に設定 BCF STATUS,RP0 ; STATUSのビットPR0をセット(BANK 0) COUNT1 EQU 0x20 COUNT2 EQU 0x21 LOOP0 MOVLW B'00001' ; WレジスタにB'00001'を転送 MOVWF PORTB ; Wレジスタの値をBポートに転送 CALL WAIT MOVLW B'00010' ; WレジスタにB'00010'を転送 MOVWF PORTB ; Wレジスタの値をBポートに転送 CALL WAIT MOVLW B'00100' ; WレジスタにB'00100'を転送 MOVWF PORTB ; Wレジスタの値をBポートに転送 CALL WAIT MOVLW B'01000' ; WレジスタにB'01000'を転送 MOVWF PORTB ; Wレジスタの値をBポートに転送 CALL WAIT GOTO LOOP0 ; ラベルLOOP0へジャンプ ; 無駄時間待ち処理 WAIT WAIT MOVLW 0xFF ; Wレジスタに0xFFを転送(回転数調整用) MOVWF COUNT1 ; COUNT1にWレジスタの内容を転送 LOOP1 CALL WAIT1 ; WAIT1をサブルーチンコール DECFSZ COUNT1,F ; COUNT1を減算してCOUNT1に格納 GOTO LOOP1 ; COUNT1が0でなければ繰り返す RETURN ; COUNT1が0になったら戻る。 WAIT1 MOVLW 0xFF ; Wレジスタに0xFFを転送(回転数調整用) MOVWF COUNT2 ; COUNT2にWレジスタの内容を転送 LOOP2 NOP ; 1命令サイクル消費 DECFSZ COUNT2,F ; COUNT2を減算してCOUNT2に格納 GOTO LOOP2 ; COUNT2が0でなければ繰り返す RETURN ; COUNT2が0になったら戻る。 END