;    CLOCK   10MHz
;    Position Lamp
;    2006-08-24:SW切り替え機能のみ
;    2006-08-25:ALL MODE 追加＋SW切り替え
;　　2006-08-26:modeをEEPROMに保存
;    2006-09-01:RA2にﾓﾆﾀLED追加


	LIST    P=PIC16F84A
	INCLUDE P16F84A.INC

	__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF

GPR_1	EQU	0Ch
GPR_2	EQU	0Dh
GPR_3	EQU	0Eh
GPR_4	EQU	0Fh
GPR_5	EQU	10h
mode	EQU	11h
old_sw	EQU	12h
E_ADRS	EQU	13h
LOOP	EQU	14h
LOOPX	EQU	15h


	ORG     0
;イニシャル処理
INIT
	CLRF	PORTB
	BSF	STATUS,RP0       ;バンク1に切り替え
	CLRF	TRISB            ;RB0-7を出力
	MOVLW	01h              ;RA0を入力　RA1を出力
	MOVWF	TRISA
	BCF	STATUS,RP0       ;バンク0に切り替え

	CLRF	PORTA
	CLRF	PORTB
	MOVLW	01h
	MOVWF	old_sw
	MOVLW	00h
	MOVWF	E_ADRS



;フラッシュよりモード値を読み込み

	MOVF	E_ADRS,W	;データエリアのアドレス指定
	MOVWF	EEADR		;アドレスをEEADRへセット 
	BSF	STATUS,RP0	;PAGE1へ切替え 
	BSF	EECON1,RD	;読み出し開始
	BCF	STATUS,RP0	;PAGE0に戻る 
	MOVF	EEDATA,W	;Wレジスタにデータ取り出し
	MOVWF	mode


;点灯モード先にジャンプ
MAIN

	MOVLW	D'1'
	SUBWF	mode,W
	BTFSC	STATUS,Z
	GOTO	MODE1


	MOVLW	D'2'
	SUBWF	mode,W
	BTFSC	STATUS,Z
	GOTO	MODE2


	MOVLW	D'3'
	SUBWF	mode,W
	BTFSC	STATUS,Z
	GOTO	MODE3


	MOVLW	D'4'
	SUBWF	mode,W
	BTFSC	STATUS,Z
	GOTO	MODE4


	MOVLW	D'1'
	MOVWF	mode
	GOTO	MAIN


;点灯モード1（全点灯）
MODE1	CALL DISP
MODE11
	MOVLW	0FFh
	MOVWF	PORTB
	CALL	T50ms
	GOTO	MODE11

;点灯モード2（ナイトライダー）
MODE2	CALL DISP
MODE22
	MOVLW	b'00000001'
	MOVWF	PORTB
	CALL	T100ms
	MOVLW	b'00000011'
	MOVWF	PORTB
	CALL	T100ms
	MOVLW	b'00000110'
	MOVWF	PORTB
	CALL	T100ms
	MOVLW	b'00001100'
	MOVWF	PORTB
	CALL	T100ms
	MOVLW	b'00011000'
	MOVWF	PORTB
	CALL	T100ms
	MOVLW	b'00110000'
	MOVWF	PORTB
	CALL	T100ms
	MOVLW	b'01100000'
	MOVWF	PORTB
	CALL	T100ms
	MOVLW	b'11000000'
	MOVWF	PORTB
	CALL	T100ms
	MOVLW	b'10000000'
	MOVWF	PORTB
	CALL	T100ms
	MOVLW	b'01100000'
	MOVWF	PORTB
	CALL	T100ms
	MOVLW	b'00110000'
	MOVWF	PORTB
	CALL	T100ms
	MOVLW	b'00011000'
	MOVWF	PORTB
	CALL	T100ms
	MOVLW	b'00001100'
	MOVWF	PORTB
	CALL	T100ms
	MOVLW	b'00000110'
	MOVWF	PORTB
	CALL	T100ms
	MOVLW	b'00000011'
	MOVWF	PORTB
	CALL	T100ms
	GOTO	MODE22

;点灯モード3（フラッシュ）
MODE3	CALL DISP
MODE33
	MOVLW	0E7h
	MOVWF	PORTB
	CALL	T50ms
	MOVLW	0h
	MOVWF	PORTB
	CALL	T50ms
	MOVLW	0E7h
	MOVWF	PORTB
	CALL	T50ms
	MOVLW	0h
	MOVWF	PORTB
	CALL	T50ms
	MOVLW	0E7h
	MOVWF	PORTB
	CALL	T50ms
	MOVLW	0h
	MOVWF	PORTB
	CALL	T05s
	GOTO	MODE33

;点灯モード4（フラッシュ２）
MODE4	CALL DISP
MODE44
	MOVLW	0FFh
	MOVWF	PORTB
	CALL	T50ms
	MOVLW	0h
	MOVWF	PORTB
	CALL	T50ms
	MOVLW	0FFh
	MOVWF	PORTB
	CALL	T50ms
	MOVLW	0h
	MOVWF	PORTB
	CALL	T50ms
	MOVLW	0FFh
	MOVWF	PORTB
	CALL	T50ms
	MOVLW	0h
	MOVWF	PORTB
	CALL	T50ms
	MOVLW	0FFh
	MOVWF	PORTB
	CALL	T50ms
	MOVLW	0h
	MOVWF	PORTB
	CALL	T05s
	GOTO	MODE44




;モード変更スイッチスキャン

SW_chg
	BTFSC	PORTA,0
	GOTO	SW_ON

SW_OFF
	BTFSS	PORTA,0
	CLRF	old_sw
	GOTO	ret

SW_ON
	CALL	T20ms
	BTFSS	PORTA,0
	GOTO	ret

	BTFSC	old_sw,0
	GOTO	ret

	BSF	old_sw,0
	INCF	mode,F

;フラッシュにモード値を書き込み

	BCF	STATUS,RP0	;Set to page 0 
	MOVF	E_ADRS,W	;データエリアのアドレス指定
	MOVWF	EEADR		;Address set
	MOVF	mode,W		;書き込むデータセット
	MOVWF	EEDATA		;Data set 
	BSF	STATUS,RP0	;Set to Page 1 
	BSF	EECON1,WREN	;Set WR Enable 
	MOVLW	55H		;Write Sequence 
	MOVWF	EECON2		;Start write 
	MOVLW	0AAH 
	MOVWF	EECON2 
	BSF	EECON1,WR	;Go write 
WR_LP				;書き込み確認待ちループ
	BTFSC	EECON1,WR	;Check Write end 
	GOTO	WR_LP 
	BCF	STATUS,RP0	;Return to page 0 

	GOTO	MAIN


;モニタLED点灯

DISP
	MOVF	mode,W
	MOVWF	LOOP
LOOP1	BSF	PORTA,2    ;RA2を1
	CALL	T50ms
	CALL	T20ms
	BCF	PORTA,2    ;RA2を0
	CALL	T50ms
	DECFSZ	LOOP,F
	GOTO	LOOP1		
	RETURN


;タイマー

T04ms
	MOVLW	0F9h
	MOVWF	GPR_1
T04LP	NOP
	DECFSZ	GPR_1,F
	GOTO	T04LP
	RETURN 

;50msタイマー処理中にモード変更のスキャンを実施

T50ms
	GOTO	SW_chg
ret
	MOVLW	07Ch  
	MOVWF	GPR_2
T50LP	CALL	T04ms  
	DECFSZ	GPR_2,F
	GOTO	T50LP
	RETURN

T100ms
	MOVLW	02h
	MOVWF	GPR_3
T100LP	CALL	T50ms
	DECFSZ	GPR_3,F
	GOTO	T100LP
	RETURN 

T05s
	MOVLW	0ah
	MOVWF	GPR_4
T05LP	CALL	T50ms
	DECFSZ	GPR_4,F
	GOTO	T05LP
	RETURN 

T20ms
	MOVLW	032h
	MOVWF	GPR_5
T20LP	CALL	T04ms
	DECFSZ	GPR_5,F
	GOTO	T20LP
	RETURN

	END
