;コンバットサウンドスイッチプログラム

;Ver1.0.0	2000.08.31	By T.HINOKI

		LIST		P=16C84,R=DEC
	STATUS	EQU	3
	PG	EQU	5
	PORTA	EQU	5
	PORTB	EQU	6
	EEDATA	EQU	8
	EEADR	EQU	9
	TRISA	EQU	H'85'
	TRISB	EQU	H'86'
	COUNT1	EQU	H'10'
	COUNT2	EQU	H'11'
	PIN4	EQU	H'15'	;４ｃｈ入力パルス幅（大砲音・機銃音用）

	KEISAN1	EQU	H'1A'	;計算用変数
	KEISAN2	EQU	H'1B'	;計算用変数
	KEISAN3	EQU	H'1C'	;計算用変数


	CLRF	PORTB		;クリア PORTB
	BSF	STATUS,PG	;Change Page1
	MOVLW	B'1111'		;TRISA=F  All Input
	MOVWF	TRISA
	CLRF	TRISB		;TRISB=0  All output
	BCF	STATUS,PG	;Change Page0


;-------------------メインルーチン -------------
LOOP1

	CALL	PULSIN4		;4chパルス幅取得

;-----------------　音　---------------
	MOVLW	120		;4chスティックが120以下だったら
	SUBWF	PIN4,0		;
	BTFSC	STATUS,0	;(CY=1) PIN4>=120はOTO10へ
	GOTO	OTO10		;

	BSF	PORTB,7		;PULS7 on(機関銃音)
	GOTO	OTO80		;

OTO10
	MOVLW	180		;4chスティックが180以上だったら
	SUBWF	PIN4,0		;
	BTFSS	STATUS,0	;(CY=0) PIN4<180はOTO20へ
	GOTO	OTO20		;

	BSF	PORTB,6		;PULS6 on（音切り換え）
	CALL	TIM20		;ちょっと待つ
	BSF	PORTB,7		;PULS7 on（大砲音）
	GOTO	OTO80		;

OTO20
	BCF	PORTB,6		;PULS off
	BCF	PORTB,7		;PULS off

OTO80
	GOTO	LOOP1

;-------------  20サイクルタイマー（実際は19サイクル）
TIM20
	GOTO	$+1	;2
	GOTO	$+1	;+2=4
	GOTO	$+1	;+2=6
	GOTO	$+1	;+2=8
	GOTO	$+1	;+2=10
	GOTO	$+1	;+2=12
	GOTO	$+1	;+2=14
	GOTO	$+1	;+2=16
	NOP		;+1=17
	RETURN		;+2=19

;-------------  Ｗレジスタ分のカウントタイマー(1カウント=25サイクル)×Ｗ
TIM25
	MOVWF	COUNT1		;1+1=2
TIM26
	CALL	TIM20		;19+2=21
	NOP			;+1=22
	DECFSZ	COUNT1,1	;+1=23
	GOTO	TIM26		;+2=25
	RETURN			;+1+(W*25)+2-1

;-----------4CHパルス幅測定（PIN4）音用-----------
PULSIN4
	BTFSS	PORTA,3		;OFF の時
	GOTO	PULSIN4		;入力待ちループ
	MOVLW	0		;
	MOVWF	PIN4		;カウンター初期化
PULSIN41
	CALL	TIM20		;20サイクル待ち
	INCF	PIN4,1		;PIN4=PIN4+1
	BTFSC	PORTA,3		;ＯＮの時は、
	GOTO	PULSIN41	;カウント継続

	MOVLW	70		;カウントが70以下だったら
	SUBWF	PIN4,0		;カウントしなおし！
	BTFSS	STATUS,0	;(CY=0) PIN4<70
	GOTO	PULSIN4		;
	RETURN

	END
