;******************************************************************************************
;  20バー３色表示機サンプル
;   Program Name : 
;   Programer    :
;   Create date  :  Version 1.0    H18.04.06
;   History      :
;******************************************************************************************
;  (0)Display
;     10*2 Bar Diode
;     内部オシレータを使用する(8MHz)
;  (1)Descript I/O
;      A6,A7       : No 8,9 
;      B0～B7      : No 0～7 
;      A0,A2,A3    : I/O
;      A1          : Display A
;      A4          : Display B
;      A5          : None
;******************************************************************************************
	LIST	P=PIC16F88
	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 & _INTRC_IO
	__CONFIG _CONFIG2 , _IESO_OFF & _FCMEN_OFF


DN0A	EQU	20H
DN0B	EQU	21H
DN1A	EQU	22H
DN1B	EQU	23H
TMP0	EQU	24H
LPINTWATA EQU	25H
LPINTWATB EQU	26H
LPWDSP01 EQU	27H
DEMOLP1	EQU	28H
	ORG	0
	GOTO	START
	ORG	5
	GOTO	START
START
; Bank0での設定
	BANKSEL	PORTA	; PortAのBankを選択する
	CLRF	PORTA	; PortAの初期化(Bank0)
	CLRF	PORTB	; PortBの初期化(Bank0,1,2,3)

; Bank1での設定
	BANKSEL	ANSEL	; ANSELのBankを選択する(Bank1)
	MOVLW	B'01111110'	;内部OSC選択,内部OSCに8MHzを選択
	MOVWF	OSCCON
	MOVLW	B'00001101'	;AN0(RA0),AN2(RA2),AN3(RA3)をAnalog-Input, 他をDegitalに設定
	MOVWF	ANSEL	; Degital Inputに設定(Bank1)
	MOVLW	B'00101101'
	MOVWF	TRISA	; PortAのI/O設定(Bank1)
	MOVLW	B'00000000'
	MOVWF	TRISB	; PortBのI/O設定(Bank1)
	MOVLW	B'10000000'	; 7:10Bitを右詰めで得る,6:?(どっちでも),5-4:ReferはVoltage-GND,3-0:None
	MOVWF	ADCON1	;(Bank1)
; Bank0に戻す
	BANKSEL	PORTA	; PortAのBankを選択する
	CALL	CLRDSP
; デモ表示
MAIN
	CALL	DEMO0	; 電源投入時に7-Segment Displayが正常に点灯するか確認する
;	CALL	DEMO1	; デモを表示する
MADIN
;	CALL	PRG01
	CALL	DEMO1	; デモを表示する
	GOTO	MADIN

;******************************************************************************************
;   Function Name : DEMO0
;   Title         : デモ
;   Input         : なし
;   Output        : なし
;******************************************************************************************
DEMO0
	MOVLW	B'11111111'
	MOVWF	DN0A
	MOVLW	B'00000011'
	MOVWF	DN0B
	MOVLW	B'11111111'
	MOVWF	DN1A
	MOVLW	B'00000011'
	MOVWF	DN1B
	CALL	WDSP05
	CALL	WDSP05
;
	CLRF	DN0A
	CLRF	DN0B
	CLRF	DN1A
	CLRF	DN1B
	CALL	WDSP05
	RETURN
;******************************************************************************************
;   Function Name : DEMO1
;   Title         : デモ
;   Input         : なし
;   Output        : なし
;******************************************************************************************
DEMO1
	CALL	INTDN
	MOVLW	B'00000001'
	MOVWF	DN0A
	MOVWF	DN1A
	MOVLW	H'08'
	MOVWF	DEMOLP1
DEMO1A
	CALL	WDSP01
	RLF	DN0A,F
	RLF	DN1A,F
	DECFSZ	DEMOLP1,F
	GOTO	DEMO1A
;
	CALL	INTDN
	MOVLW	B'00000001'
	MOVWF	DN0B
	MOVWF	DN1B
	CALL	WDSP01
;
	RLF	DN0B,F
	RLF	DN1B,F
	CALL	WDSP01
;
	CALL	INTDN
	CALL	WDSP01
;
	RETURN
;******************************************************************************************
;   Function Name : INTDN
;   Title         : 変数初期化
;   Input         : なし
;   Output        : DN0A,DN0B,DN1A,DN1B
;******************************************************************************************
INTDN
	CLRF	DN0A
	CLRF	DN0B
	CLRF	DN1A
	CLRF	DN1B
	RETURN
;******************************************************************************************
;   Function Name : WDSP05
;   Title         : 0.5秒バー表示器を点燈する
;   Input         : DN0A,DN0B,DN1A,DN1B
;   Output        : なし
;******************************************************************************************
WDSP05
	CALL	WDSP01
	CALL	WDSP01
	CALL	WDSP01
	CALL	WDSP01
	CALL	WDSP01
	RETURN
;******************************************************************************************
;   Function Name : WDSP01
;   Title         : 0.1秒バー表示器を点燈する
;   Input         : DN0A,DN0B,DN1A,DN1B
;   Output        : なし
;******************************************************************************************
WDSP01
	MOVLW	H'32'
	MOVWF	LPWDSP01
WDSP01A
	CALL	DSPBAR
	DECFSZ	LPWDSP01,F
	GOTO	WDSP01A
	RETURN
;******************************************************************************************
;   Function Name : DSPBAR
;   Title         : バー表示器を点燈する
;   Input         : DN0A,DN0B,DN1A,DN1B
;   Output        : なし
;******************************************************************************************
DSPBAR
; 1.表示器を消灯する
	CALL	CLRDSP
; 2.０桁目を表示する
;  (1)変数代入
	MOVFW	DN0A
	MOVWF	TMP0
	MOVLW	B'11111111'
	XORWF	TMP0,F
	MOVFW	TMP0
	MOVWF	PORTB
;
	BSF	PORTA,6
	BTFSC	DN0B,0
	BCF	PORTA,6
;
	BSF	PORTA,7
	BTFSC	DN0B,1
	BCF	PORTA,7
;  (2)表示する	
	BSF	PORTA,1
;  (3)待つ
	CALL	INTWAT
;  (4)表示器を消灯する
	CALL	CLRDSP
; 3.１桁目を表示する
;  (1)変数代入
	MOVFW	DN1A
	MOVWF	PORTB
;
	BCF	PORTA,6
	BTFSC	DN1B,0
	BSF	PORTA,6
;
	BCF	PORTA,7
	BTFSC	DN1B,1
	BSF	PORTA,7
;  (2)表示する	
	BSF	PORTA,4
;  (3)待つ
	CALL	INTWAT
;  (4)表示器を消灯する	
	CALL	CLRDSP
	RETURN

;******************************************************************************************
;   Function Name : CLRDSP
;   Title         : バー表示器を消灯する
;   Input         : なし
;   Output        : なし
;******************************************************************************************
CLRDSP
	BCF	PORTA,1
	BCF	PORTA,4
	RETURN


;******************************************************************************************
;   Function Name : INTWAT
;   Title         : 表示間隔タイマー
;   Input         : なし
;   Output        : なし
;   Description   : 8/4MHz ==(200Step)==>10kHz ==(10)==>1kHz
;******************************************************************************************
INTWAT
	MOVLW	H'0A'
	MOVWF	LPINTWATB
INTWATB
	MOVLW	H'41'
	MOVWF	LPINTWATA
INTWATA
	DECFSZ	LPINTWATA,F
	GOTO	INTWATA
	DECFSZ	LPINTWATB,F
	GOTO	INTWATB

	RETURN

	END
