;***********************************************************
;   Star Clock version 0.0     01.Sep.2008
;***********************************************************
;
	list  p=16F84
	#include <p16F84.inc>
;	__CONFIG CP_OFF & WDT_OFF & _PWRTE_OFF & _LP_OSC

	__CONFIG   03FFh
	
WORK	EQU 	0Ch
TEMP	EQU	0Dh
PCOUNT	EQU	0Eh
LOOP1	EQU	0Fh
WPARA	EQU	10h
TUNE    EQU	11h


L_NUM     EQU	60h

;	Program
	ORG	0h
	GOTO 	MAIN

 	ORG	04H
	BSF	STATUS,C
	BCF	INTCON,2  ; interrept clear
	RETFIE
;
;************************************************************
;	MAIN ROUTINE
;***********************************************************
; ポートの初期化
MAIN	CLRF	PORTA	;Aポートクリア
	CLRF	PORTB	;Bポートクリア
	BSF	STATUS,RP0	;バンク切り替え
	MOVLW	0FFh		;Bポート入力セット
	MOVWF	TRISB
	MOVLW	00h		;Aポート出力セット
	MOVWF	TRISA
	MOVLW	12h		;option reg 00000nnn
	MOVWF	OPTION_REG
	BCF	STATUS,RP0	;バンク切り替え
	
	COMF	PORTB,W		;Read Port B
	ANDLW	0Fh
	MOVWF	TUNE		;Set TUNE 80h + (W)<<3
	BCF	STATUS,C
	RLF	TUNE,F
	RLF	TUNE,F
	RLF	TUNE,F
	BSF	TUNE,7
	
        MOVLW	045h
	MOVWF	TUNE


	MOVLW	40h		;pulse width =40h
	MOVWF	WPARA

;---------------------------------------------
;      初期値設定
L0	MOVLW	L_NUM	;ループ回数セット
	MOVWF	LOOP1
L1	MOVLW	0A0h    
	MOVWF	INTCON		;interrpt ON
	BCF	STATUS,C
	
L2	NOP
	BTFSS	STATUS,C
	GOTO	L2
	DECF	LOOP1,F
	BTFSS	STATUS,Z	;if looop1=0 then goto L1
	GOTO	L1

	MOVF	TUNE,W		;タイマー微調整
	MOVWF	TMR0

	INCF	PCOUNT,F
	MOVF	PCOUNT,W
	ANDLW	01h
	ADDLW	01h
	MOVWF	PORTA		;パルス出力
	MOVF	WPARA,W		;Wait Routine 
	MOVWF	WORK
	CALL	WAIT
	CLRF	PORTA		;パルスオフ

	GOTO	L0

;**********************************************************************
;    WAIT routine      1cycle=0.48msec  cycle->WORK   use WORK
;**********************************************************************
WAIT	MOVWF	WORK
	DECFSZ	WORK,W
	GOTO	WAIT	
	RETURN

	END
