;******************************************************************************************
;ステッピングモータドライブ  サンプル
;
;
;
;******************************************************************************************
; Description 
;    Input
;      B0 : 正回転クロック
;      B1 : 負回転クロック
;    Output
;      B2 : X
;      B3 : invX
;      B4 : Y
;      B5 : invY
;******************************************************************************************
; History 
;    
;******************************************************************************************
	LIST	P=PIC16F88,ST=OFF,R=DEC
	INCLUDE	"P16F88.inc"	
	__CONFIG _CONFIG1 , _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF & _HS_OSC
	__CONFIG _CONFIG2 , _IESO_OFF & _FCMEN_OFF


CNT	EQU	0CH	;パターンテーブル参照用インデックス
LPWAITA EQU	0DH
LPWAITB EQU	0EH

	ORG	0
	GOTO	START
	ORG	4
	GOTO	START
START
; Bank0での設定
	BANKSEL	PORTA	; Bank0を選択する
	CLRF	PORTA
	CLRF	PORTB
; Bank1での設定
	BANKSEL	ANSEL	; Bank1を選択する
	MOVLW	B'11111111'
	MOVWF	TRISA	; PortAのI/O設定(Bank1)
	MOVLW	B'11000011'
	MOVWF	TRISB	; PortBのI/O設定(Bank1)
; Bank0での設定
	BANKSEL	PORTA	; Bank0を選択する
;
	MOVLW	08H
	MOVWF	CNT
;
MAIN
S0
	BTFSS	PORTB,0		;bit0が0(pulse L)なら進む
	GOTO	S1
	CALL	PMOV
SP1	BTFSC	PORTB,0		;bit0が1(pulse H)なら進む
	GOTO	SP1
S1	BTFSS	PORTB,1		;bit1が0(pulse L)なら進む
	GOTO	S0
	CALL	NMOV
SN1	BTFSC	PORTB,1		;bit0が1(pulse H)なら進む
	GOTO	SN1
;
	GOTO	MAIN
;******************************************************************************************
;   Function Name : NMOV
;   Disctiption   : 負回転関数
;   Input         : 
;   Output        : 
;******************************************************************************************
NMOV
	DECFSZ	CNT,F
	GOTO	PAT1N
	MOVFW	CNT
	CALL	TABLEN
	MOVWF	PORTB
	MOVLW	08H
	MOVWF	CNT
	RETURN
PAT1N
	MOVFW	CNT
	CALL	TABLEN
	MOVWF	PORTB
	RETURN
TABLEN
	ADDWF	PCL,F
	RETLW	B'00100100'
	RETLW	B'00010100'
	RETLW	B'00011000'
	RETLW	B'00101000'
	RETLW	B'00100100'
	RETLW	B'00010100'
	RETLW	B'00011000'
	RETLW	B'00101000'

;******************************************************************************************
;   Function Name : PMOV
;   Disctiption   : 正回転関数
;   Input         : 
;   Output        : 
;******************************************************************************************
PMOV
	DECFSZ	CNT,F
	GOTO	PAT1P
	MOVFW	CNT
	CALL	TABLEP
	MOVWF	PORTB
	MOVLW	08H
	MOVWF	CNT
	RETURN
PAT1P
	MOVFW	CNT
	CALL	TABLEP
	MOVWF	PORTB
	RETURN
TABLEP
	ADDWF	PCL,F
	RETLW	B'00101000'
	RETLW	B'00011000'
	RETLW	B'00010100'
	RETLW	B'00100100'
	RETLW	B'00101000'
	RETLW	B'00011000'
	RETLW	B'00010100'
	RETLW	B'00100100'

;******************************************************************************************
;   Function Name : WAIT
;   Disctiption   : タイマー関数
;   Input         : 
;   Output        : 
;******************************************************************************************
WAIT
	MOVLW	H'FF'
	MOVWF	LPWAITB
WAITB
	MOVLW	H'FF'
	MOVWF	LPWAITA
WAITA
	DECFSZ	LPWAITA,F
	GOTO	WAITA
	DECFSZ	LPWAITB,F
	GOTO	WAITB

	RETURN

	END
