; ***** PIC12F683 ASM Source File For Servo_Out_2 (int osc_4MHz) *****
;                                    *** (Ver.60813, by T.S) ***
       	list	p=pic12f683
;	include pic12f683.inc
;      _config _fosc_intoscio & _wdt_disable & _pwrte_enable & _mclre_gp3=i/o & _boden _enable & _cpd_disable & _cp_disable & _ieso_disable & _fcmen_disable     (for AKI writer)

gp	equ	h'05'

outp	equ	h'20'
fr	equ	h'21'

tim1	equ	h'22'
tim2	equ	h'23'

wid1_a	equ	h'27'		;以下サーボの出力幅データ格納変数
wid1_b	equ	h'28'
wid2_a	equ	h'29'
wid2_b	equ	h'2a'
wid3_a	equ	h'2b'
wid3_b	equ	h'2c'


	org	0
	goto	start
	org	4
	goto	intsub

start
	clrf	gp
	clrf	outp

	; サーボ位置データ(d'10'〜d'30'=0.5〜1.5ms幅,最小角度〜最大角度)設定
	; 下記データを任意に変更可能、但しd'10'〜d'30'の範囲である

	movlw	d'10'		; 1CHサーボ a点位置データ,電源立ち上げ時
	movwf	wid1_a
	movlw	d'30'		; 1CHサーボ b点位置データ
	movwf	wid1_b
	movlw	d'15'		; 2CHサーボ a点位置データ,電源立ち上げ時
	movwf	wid2_a
	movlw	d'21'		; 2CHサーボ b点位置データ
	movwf	wid2_b
	movlw	d'15'		; 3CHサーボ a点位置データ,電源立ち上げ時
	movwf	wid3_a
	movlw	d'20'		; 3CHサーボ b点位置データ
	movwf	wid3_b

	bsf	h'03',5		;Bank1へ
	clrf	h'05'		;init GPIO
	bcf	h'03',5		;Bank0へ
	movlw	h'07'
	movfw	h'19'		;digital I/Oへ

	bsf	h'03',5		;Bank1へ
	movlw	h'65'
	movfw	h'0f'		;oscillator 設定(内部 4Mhz)
	clrf	h'1f'		;digital I/Oへ
	movlw	b'111000'       ;0〜2 bit出力, 3〜5 bit入力
	movwf	h'05'
	bcf	h'03',5		;Bank0へ、以上ポート入出力設定終了

; ***** メインプログラムスタート *****

main
			; ***** 割り込み設定、スタート *****

	bsf	h'03',5		;Bank1へ
	movlw	h'07'		;内部クロック、プリスケーラ1/256設定
	movwf	h'01'
	bcf	h'03',5		;Bank0へ戻す
	movlw	h'b1'		;カウンタ値 d'78'→約20ms, h'ff'- d'78 = h'b1'
	movwf	h'01'		;TMR0へロード
	bsf	h'0b',5		;タイマー割り込み可とする
	bsf	h'0b',7		;全体割り込み可とする


jp0			;***** 無限ループ *****
	nop
	nop
	goto	jp0

; ******** サブルーチン　timr  ********

timr
	movf	fr,0
	movwf	tim1
wa1	movlw	h'0c'
	movwf	tim2
wa2	nop
	decfsz	tim2,1
	goto	wa2
	decfsz	tim1,1
	goto	wa1

	return

; ******** 割り込みルーチン　intsub ********

intsub
	bcf	h'0b',2		;割り込みフラッグクリア

	movlw	h'b1'		;カウンタ値 h'ff'-h'4e'→約20ms
	movwf	h'01'		;TMR0へロード

	movlw	h'04'		; 1CHサーボ出力
	iorwf	outp,1
	movf	outp,0
	movwf	gp

	movf	gp,0
	movwf	fr
	btfss	fr,3
	goto	jin0
	movf	wid1_b,0
	movwf	fr
	goto	jin1
jin0
	movf	wid1_a,0
	movwf	fr
jin1
	call	timr
	movlw	h'3b'
	andwf	outp,1
	movf	outp,0
	movwf	gp

	nop

	movlw	h'02'		; 2CHサーボ出力
	iorwf	outp,1
	movf	outp,0
	movwf	gp

	movf	gp,0
	movwf	fr
	btfss	fr,4
	goto	jin2
	movf	wid2_b,0
	movwf	fr
	goto	jin3
jin2
	movf	wid2_a,0
	movwf	fr
jin3
	call	timr
	movlw	h'3d'
	andwf	outp,1
	movf	outp,0
	movwf	gp

	nop

	movlw	h'01'		; 3CHサーボ出力
	iorwf	outp,1
	movf	outp,0
	movwf	gp

	movf	gp,0
	movwf	fr
	btfss	fr,5
	goto	jin4
	movf	wid3_b,0
	movwf	fr
	goto	jin5
jin4
	movf	wid3_a,0
	movwf	fr
jin5
	call	timr
	movlw	h'3e'
	andwf	outp,1
	movf	outp,0
	movwf	gp


	retfie


	end

