;---------------------------------------------------------------------------------------------------------------------------

	TITLE		"<6桁周波数ｶｳｳﾝﾀ->"
	SUBTITLE		"<               >"
	LIST		P=16F84A
	INCLUDE		"P16F84A.inc"

	__CONFIG	_CP_OFF & _WDT_OFF & _PWRTE_OFF & _HS_OSC

;---------------------------------------------------------------------------------------------------------------------------
;     基準周波数は　12.8MHｚ　の水晶発振器用になっています。　他の周波数の水晶発振子や水晶発振器を使用する場合は　変更が必要です。
;---------------------------------------------------------------------------------------------------------------------------
;	[ ﾒﾓﾘ-割り当て ]

wait_cn		EQU		0CH
wait_cn2	EQU		0DH
cn		EQU		0EH

x_0		EQU		010H		;Xは、必ず #10h 番地に置いてね
x_1		EQU		011H
x_2		EQU		012H
x_3		EQU		013H

vfo_0		EQU		018H		;#18h番地;Lo(VFO)
vfo_1		EQU		019H
vfo_2		EQU		01AH
vfo_3		EQU		01BH

;dec は必ず＃20h番地に; 10進格納場所（ 10ﾊﾞｲﾄ ）dec_top

dec_0		EQU		020H		;計算結果 1000MHｚの桁
dec_1		EQU		021H		;計算結果　100MHｚの桁
dec_2		EQU		022H		;計算結果　 10MHｚの桁
dec_3		EQU		023H		;計算結果　　1MHｚの桁
dec_4		EQU		024H		;計算結果　100KHｚの桁
dec_5		EQU		025H		;計算結果　 10KHｚの桁
dec_6		EQU		026H		;計算結果　  1KHｚの桁
dec_7		EQU		027H		;計算結果　 100Hｚの桁
dec_8		EQU		028H		;計算結果　  10Hｚの桁
dec_9		EQU		029H		;計算結果　   1Hｚの桁

val_0		EQU		02AH		; 変換したい値（３２ビット）
val_1		EQU		02BH		; 変換したい値（３２ビット）
val_2		EQU		02CH		; 変換したい値（３２ビット）
val_3		EQU		02DH		; 変換したい値（３２ビット）

val_m		EQU		02EH		; 一時余り格納場所（サブルーチンで使用）

N		EQU		02FH		;prescaler 1/N= ×4倍

mode		EQU		031H		;RB1がLの時10MHz桁以下表示。RB1がHの時1MHz桁以下表示

overf		EQU		034H

dsp_0		EQU		039H		;7ｾｸﾞﾒﾝﾄLED表示　1桁目
dsp_1		EQU		03AH		;7ｾｸﾞﾒﾝﾄLED表示　2桁目
dsp_2		EQU		03BH		;7ｾｸﾞﾒﾝﾄLED表示　3桁目
dsp_3		EQU		03CH		;7ｾｸﾞﾒﾝﾄLED表示　4桁目
dsp_4		EQU		03DH		;7ｾｸﾞﾒﾝﾄLED表示　5桁目
dsp_5		EQU		03EH		;7ｾｸﾞﾒﾝﾄLED表示　6桁目

;---------------------------------------------------------------------------------------------------------------------------

		ORG		0000H
		GOTO		start
		ORG		0004H
		GOTO		start

;---------------------------------------------------------------------------------------------------------------------------

;7seg 表示　DP表示無し

t_fig		ADDWF		PCL,F
		RETLW		007H		;7ｾｸﾞﾒﾝﾄLED表示DATA [0]
		RETLW		017H		;7ｾｸﾞﾒﾝﾄLED表示DATA [1]
		RETLW		087H		;7ｾｸﾞﾒﾝﾄLED表示DATA [2]
		RETLW		097H		;7ｾｸﾞﾒﾝﾄLED表示DATA [3]
		RETLW		047H		;7ｾｸﾞﾒﾝﾄLED表示DATA [4]
		RETLW		057H		;7ｾｸﾞﾒﾝﾄLED表示DATA [5]
		RETLW		0C7H		;7ｾｸﾞﾒﾝﾄLED表示DATA [6]
		RETLW		0D7H		;7ｾｸﾞﾒﾝﾄLED表示DATA [7]
		RETLW		027H		;7ｾｸﾞﾒﾝﾄLED表示DATA [8]
		RETLW		037H		;7ｾｸﾞﾒﾝﾄLED表示DATA [9]
		RETLW		0A7H		;7ｾｸﾞﾒﾝﾄLED表示DATA [ﾌﾞﾗﾝｸ]
		RETLW		0B7H		;7ｾｸﾞﾒﾝﾄLED表示DATA [ﾌﾞﾗﾝｸ]
		RETLW		067H		;7ｾｸﾞﾒﾝﾄLED表示DATA [ﾌﾞﾗﾝｸ]
		RETLW		077H		;7ｾｸﾞﾒﾝﾄLED表示DATA [ﾌﾞﾗﾝｸ]
		RETLW		0E7H		;7ｾｸﾞﾒﾝﾄLED表示DATA [ﾌﾞﾗﾝｸ]
		RETLW		0F7H		;7ｾｸﾞﾒﾝﾄLED表示DATA [ﾌﾞﾗﾝｸ]
		SLEEP

;7seg 表示　DP表示有り

t_fig_dp	ADDWF		PCL,F
		RETLW		00FH		;7ｾｸﾞﾒﾝﾄLED表示DATA [0]
		RETLW		01FH		;7ｾｸﾞﾒﾝﾄLED表示DATA [1]
		RETLW		08FH		;7ｾｸﾞﾒﾝﾄLED表示DATA [2]
		RETLW		09FH		;7ｾｸﾞﾒﾝﾄLED表示DATA [3]
		RETLW		04FH		;7ｾｸﾞﾒﾝﾄLED表示DATA [4]
		RETLW		05FH		;7ｾｸﾞﾒﾝﾄLED表示DATA [5]
		RETLW		0CFH		;7ｾｸﾞﾒﾝﾄLED表示DATA [6]
		RETLW		0DFH		;7ｾｸﾞﾒﾝﾄLED表示DATA [7]
		RETLW		02FH		;7ｾｸﾞﾒﾝﾄLED表示DATA [8]
		RETLW		03FH		;7ｾｸﾞﾒﾝﾄLED表示DATA [9]
		RETLW		0A7H		;7ｾｸﾞﾒﾝﾄLED表示DATA [ﾌﾞﾗﾝｸ]
		RETLW		0B7H		;7ｾｸﾞﾒﾝﾄLED表示DATA [ﾌﾞﾗﾝｸ]
		RETLW		067H		;7ｾｸﾞﾒﾝﾄLED表示DATA [ﾌﾞﾗﾝｸ]
		RETLW		077H		;7ｾｸﾞﾒﾝﾄLED表示DATA [ﾌﾞﾗﾝｸ]
		RETLW		0E7H		;7ｾｸﾞﾒﾝﾄLED表示DATA [ﾌﾞﾗﾝｸ]
		RETLW		0F7H		;7ｾｸﾞﾒﾝﾄLED表示DATA [ﾌﾞﾗﾝｸ]
		SLEEP

;---------------------------------------------------------------------------------------------------------------------------

start
		CALL		wt255ms		;待機時間（何もしない）　255ms

		CLRF		TMR0		;TMR0をクリア

		BSF		STATUS,5	;バンク1
		CLRWDT				;prescalerをクリア
		MOVLW		067H		;prescaler 1/256 set ;RBプルアップ; 立ち上がりカウント
		MOVWF		OPTION_REG

		BCF		STATUS,5	;バンク0

		CLRF		PORTA		;PORTAをすべてクリア  L
		CLRF		PORTB		;PORTBをすべてクリア　L
		CLRF		dsp_5		;dsp_5のデ－タをクリア
		CLRF		dsp_4		;dsp_4をデ－タをクリア
		CLRF		dsp_3		;dsp_3をデ－タをクリア
		CLRF		dsp_2		;dsp_2をデ－タをクリア
		CLRF		dsp_1		;dsp_1をデ－タをクリア
		CLRF		dsp_0		;dsp_0をデ－タをクリア

		NOP
		GOTO		f_counter

;---------------------------------------------------------------------------------------------------------------------------

dp_on		BSF		STATUS,5	;バンク1

		MOVLW		000H		;rb.0-rb.7ピンをout に !rb,#00000000b
		MOVWF		TRISB		;trisb
		BCF		STATUS,5	;バンク0
		RETURN



;---------------------------------------------------------------------------------------------------------------------------
; 100Hz/10Hzのモ－ドの判断をする


dp_off		BSF		STATUS,5	;バンク1
		MOVLW		00FH		;rb.0-rb.3ピンをIN に !rb,#00001111b
		MOVWF		TRISB		;trisb
		BCF		STATUS,5	;バンク0

		BSF		PORTB,7		;TC4511 A=B=C=D=1 15としてa-g=Lにする
		BSF		PORTB,6		;TC4511 A=B=C=D=1 15としてa-g=Lにする
		BSF		PORTB,5		;TC4511 A=B=C=D=1 15としてa-g=Lにする
		BSF		PORTB,4		;TC4511 A=B=C=D=1 15としてa-g=Lにする

		NOP
		NOP
		MOVF		PORTB,W		;W←portb PORTBのRB0,RB1,RB2,RB3ﾃﾞ-ﾀ取り込み
						;(RB7)(RB6)(RB5)(RB4)(RB3)(RB2)(RB1)(RB0)
						;  0    0    0    0    1    1    1    1     RB0～RB3ｽｲｯﾁOFFの場合
						; OUT  OUT  OUT  OUT  I N  I N  I N  I N

		ANDLW		00FH		;portb4-7 masking　(RB7)(RB6)(RB5)(RB4) 0 に　(RB3)(RB2)(RB1)(RB0) 1 に

						;(RB7)(RB6)(RB5)(RB4)(RB3)(RB2)(RB1)(RB0)
						;  0    0    0    0    1    1    1    1  　 比較DATA ANDLW
						;  0    0    0    0    1    1    1    1     入力DATA RB0～RB3ｽｲｯﾁOFFの場合
						; OUT  OUT  OUT  OUT  I N  I N  I N  I N
						;  0    0    0    0    1    1    1    1     DATA RB0～RB7比較結果

						;　     A B 
						;　AND  0 0  0
						;　AND  1 0  0
						;　AND  0 1  0
						;　AND  1 1  1

		MOVWF		mode		;portb4-7 RB0,RB1,RB2,RB3 はスイッチがONの所が 0 に DATA　RB4,RB5,RB6,RB7 は 0 に

						;(RB7)(RB6)(RB5)(RB4)(RB3)(RB2)(RB1)(RB0)
						;  0    0    0    0    1    1    1    1     DATA RB0～RB7比較結果を　mode に書き込む

		MOVLW		001H
		MOVWF		wait_cn
		CALL		wait_ms
		RETURN

;---------------------------------------------------------------------------------------------------------------------------

c_main025	CLRF		vfo_0
		CLRF		vfo_1
		CLRF		vfo_2
		CLRF		vfo_3

		CLRWDT
		CLRF		TMR0		;カウンタTMR0をクリア

		BSF		STATUS,5	;バンク1


		MOVLW		018H		;ra.3ピンをIN=high impedance/TMR0の開始

;---------------------------------------------------------------------------------------------------------------------------
;     ゲートタイム開始 　（開始→終了）時間をストップウォッチで測定して250mｓになるようにプログラムを変更
;    　　　　　　　　　　　　　すれば、いろいろな水晶発振子や水晶発振器が使用できます。たぶん？	 8cycle
;---------------------------------------------------------------------------------------------------------------------------
		MOVWF		TRISA		;trisA						| 1cycle
		BCF		STATUS,5	;バンク0						| 1cycle
		NOP				;						| 1cycle
		NOP				;						| 1cycle
		CALL	t250sec		;							| 2cycle
		BSF		STATUS,5	;1	バンク1					| 1cycle
		MOVLW		010H		;1	ra.3ピンをout;TMR0の停止			| 1cycle
		MOVWF		TRISA		;1	trisA	ここまで 3cycle
;----------------------------------------------------------------------------------------------------------------------------
;     ゲートタイム終了
;----------------------------------------------------------------------------------------------------------------------------

		BCF		TRISA,3		;1

		BCF		STATUS,5	;バンク0

		BCF		PORTA,3
		CALL		dl5		;overflow check after last check

		NOP
		MOVF		TMR0,W		;TMR0のdataをvfo[1]に
		MOVWF		vfo_1

		INCF		vfo_0,F
toggle		DECF		vfo_0,F
		BCF		PORTA,3		;port Ra4のトグル
		BSF		PORTA,3
		NOP
		NOP

		MOVF		TMR0,W
		SUBWF		vfo_1,W		;vfo[1]-TMR0=0であれば Z=1
		BTFSC		STATUS,2
		GOTO		toggle
		DECF		vfo_0,F		;vfo[0]への prescaler値の取り込み完。
		RETURN

;---------------------------------------------------------------------------------------------------------------------------
;  総ステップ数　－　１０　　残りのステップ数を　t250sec　で作る
;　
; 				t250sec						    ;104+(1+1+1+1+1+1+1+1)+(1+1+1)+(799874)+1=799990 steps
; Breakpoint →			MOVLW		021H		;1  1+(33*3cycle+2+2)=104
;						MOVWF		wait_cn		;1
;						CALL		wait_us		;2cycle
;            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;						DECFSZ		cn,F		;1
;						GOTO		display		;2
;
;						NOP						;1
; Breakpoint →			RETURN					;2
;
;  上記の様にブレークポイントを設定すると　RETURN　一つ前の　NOP　までを　カウントする
;  
;  この間のステップ数は　800000-10=799990　です。
;　　t250sec　　のプログラムで　残りの　7999990　ステップを　作ります。
;
;
;　　下記の場合　8ｽﾃｯﾌﾟだけど　ステップを計算しやすくする為？に　t250sec　最後の　RETURN　の2ステップを含めて　10　ステップとします。
;  ******************************************************************************
;	Breakpoint →		MOVWF		TRISA		;trisA						| 1cycle
;						BCF		STATUS,5	;バンク0						| 1cycle
;						NOP				;						| 1cycle
;						NOP				;						| 1cycle
;						CALL		ttt		;						| 2cycle
;						BSF		STATUS,5	;1	バンク1					| 1cycle
;						MOVLW		010H		;1	ra.3ピンをout;TMR0の停止			| 1cycle
;	Breakpoint →		MOVWF		TRISA		;1	trisA	ここまで 3cycle
;   ******************************************************************************
;
;---------------------------------------------------------------------------------------------------------------------------


t250sec
;	103+(1+1+1+1+1+1+1+1)+(1+1+1)+(799874)+1= 799990 steps
;  ---------------- 112　(112　step)　------------------
;  ---------- 104　(104　step)　-------------

		MOVLW		021H		;1  1+(33*3cycle+2+2)=10
		MOVWF		wait_cn		;1
		CALL		wait_us		;2cycle

;  ---------- 8　(8　step)　-------------

		NOP
		NOP

		NOP
		NOP
		NOP
		NOP
		NOP
		NOP

;*************************************************************************
;	残りのステップ　799990　-　3　= 799987 が　display で作るステップ
;  	繰返回数×（6×1065+6+1+2+）-1　なので
;	繰返回数×（6×1065+6+1+2+）-1=799987
;   繰返回数×（6×1065+6+1+2+）=799987-1
;   繰返回数×（6×1065+6+1+2+）=799986
;　　　　　　　　　         繰返回数=799986/（6×1065+6+1+2+）
;                    繰返回数=799986/（6399）
;                    繰返回数=125.01734646...
;
;                     繰返回数は125回とします。
;
;　　ここでのステップ数は　125×（6×1065+6+1+2）-1=799874
;
;		MOVLW		07DH		;1   display 繰り返し回数設定
;		MOVWF		cn			;1
;		NOP						;1
;　　　　　　３ステップを加えます
;　　　　　　799874+3=799877 ｽﾃｯﾌﾟになります。
;
;       RETURN の前の　NOP　1ステップを加えます
;　　　　　　799877+1=799878 ｽﾃｯﾌﾟになります。
;
;　　　　　　残りのステップは？　799990-7998878=112
;
;　　　　　　残り　112　ステップ
;
;*************************************************************************

;  ----------------　(3step)　------------------
		MOVLW		07DH		;1   display 繰り返し回数設定
		MOVWF		cn		;1
		NOP				;1

display
;  ---------------- 125*(6*1065+6+1+2)-1=799874　(799874　step)　------------------
		MOVF		dsp_5,W		;10MHz桁	;1
		BTFSC		mode,0
		CALL		t_fig_dp	;2cycle /3cycle ;2+4
		BTFSS		mode,0
		CALL		t_fig		;2cycle /3cycle ;2+4
		MOVWF		PORTB		;1
		BCF		PORTB,0		;1
		CALL		delay329	;2+1052
		NOP				;1
		BSF		PORTB,0		;1	(=1065)

		MOVF		dsp_4,W		;1MHz桁
		BTFSC		mode,0
		CALL		t_fig		;2cycle /3cycle ;2+4
		BTFSS		mode,0
		CALL		t_fig_dp	;2cycle /3cycle ;2+4
		MOVWF		PORTB		;1
		BCF		PORTB,1		;1
		CALL		delay329	;2+1052
		NOP				;1
		BSF		PORTB,1		;1	(=1065)

		MOVF		dsp_3,W		;100kHz桁
		CALL		t_fig		;2cycle /3cycle ;2+4
		MOVWF		PORTB		;1
		BCF		PORTB,2		;1
		CALL		delay329	;2+1052
		NOP				;1
		BSF		PORTB,2		;1

		MOVF		dsp_2,W		;10kHz桁
		BTFSC		mode,0
		CALL		t_fig_dp	;2cycle /3cycle ;2+4
		BTFSS		mode,0
		CALL		t_fig		;2cycle /3cycle ;2+4
		MOVWF		PORTB		;1
		BCF		PORTA,2		;1
		CALL		delay329	;2+1052
		NOP				;1
		BSF		PORTA,2		;1

		MOVF		dsp_1,W		;1kHz桁
		BTFSC		mode,0
		CALL		t_fig		;2cycle /3cycle ;2+4
		BTFSS		mode,0
		CALL		t_fig_dp	;2cycle /3cycle ;2+4
		MOVWF		PORTB		;1
		BCF		PORTA,1		;1
		CALL		delay329	;2+1052
		NOP				;1
		BSF		PORTA,1		;1

		MOVF		dsp_0,W		;100Hz桁
		CALL		 t_fig		;2cycle /3cycle ;2+4
		MOVWF		PORTB		;1
		BCF		PORTA,0		;1
		CALL		delay329	;2+1052
		NOP				;1
		BSF		PORTA,0		;1

		DECFSZ		cn,F		;1
		GOTO		display		;2

;  ---------------- 1 (799874　step)　------------------
		NOP				;1
;  ---------------- 112 + 3 + 799874 + 1  (799990 step) -----

		RETURN				;2

;---------------------------------------------------------------------------------------------------------------------------





delay329
;		NOP				;1052step

;	[1051steps=328.0 usecのルーチン]

delay328
		MOVLW		0FDH		;1+(252*3cycle+2+2)+3=764
		MOVWF		wait_cn		;1cycle	 |	 	 |
		CALL		wait_us		;2cycle  |      	 |

		MOVLW		05AH		;1+(89*3cycle+2+2)+15=  287
		MOVWF		wait_cn		;1cycle	 |	 	 |
		CALL		wait_us		;2cycle  |      	 |

dl5		MOVF		INTCON,W	;1cycle	 |	 	 |
		MOVWF		overf		;1cycle	 |	 	 |
		BCF		STATUS,0	;1cycle  |		 |
		MOVLW		001H		;1cycle	 |  16cy	 |
		BTFSC		overf,2		;2cycle	 | 		 |
		ADDWF		vfo_2,F		;0	 |		 |
		BTFSC		STATUS,0	;2cycle	 |		 |
		ADDWF		vfo_3,F		;0	 |		 |
		BTFSC		overf,2		;2cycle	 |		 |
		BCF		INTCON,2	;0cycle  |      	 |
		RETURN				;2cycle	 |		 |




calc0						;単なるFreq. counterの計算はここから
		MOVLW		004H		;N:TD7104P 逓倍数x4
		MOVWF		N

		CALL		mult_vN		;x=VFO*N逓倍 。x[3]-x[0]に逓倍後のVFOが入っている.

calc1		MOVF		x_3,W
		MOVWF		val_3
		MOVF		x_2,W
		MOVWF		val_2
		MOVF		x_1,W
		MOVWF		val_1
		MOVF		x_0,W
		MOVWF		val_0
		CALL		dcmain		;16進-10進変換
		RETURN

;---------------------------------------------------------------------------------------------------------------------------

wt15ms		MOVLW		00FH
		MOVWF		wait_cn		; wait 15ms
		GOTO		wait_ms
;---------------------------------------------------------------------------------------------------------------------------

wait_us		DECFSZ		wait_cn,F	;3 steps=1.2μｓのカウント
		GOTO		wait_us
		RETURN

;	[ｍｓオーダーのウェイト]

wt255ms		MOVLW		0FFH
		MOVWF		wait_cn
wait_ms		MOVLW		000H
		MOVWF		wait_cn2
wait_ms1	NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP

		DECFSZ		wait_cn2,F
		GOTO		wait_ms1
		DECFSZ		wait_cn,F
		GOTO		wait_ms
		RETURN

;---------------------------------------------------------------------------------------------------------------------------
;	３２ビットバイナリ→１０進変換
;	valに３２ビットデータを置く。（val[3]:val[2]:val[1]:va[0])
;	dcmainをコールする。	decに答えが格納される。
;	(dec[0]:dec[1]:...:dec[8]:dec[9])   dec[0]が最上位桁でdec[9]が最下位桁
;	変換後valは破壊される。
;	sample:		val	= 00:00:04:D2 h
;			dec	= 00:00:00:00:00:00:01:02:03:04
;                  	dec(0):dec(1):(2):(3):(4):(5):(6):(7):(8):dec(9)
;						(1,234)


dcmain		MOVLW		02AH		; 格納場所初期値
		MOVWF		FSR
		CALL		devide
		CALL		devide
		CALL		devide
		CALL		devide
		CALL		devide

		CALL		devide
		CALL		devide
		CALL		devide
		CALL		devide
		CALL		devide

;						---------------------------------
;						ｾﾞﾛﾌﾞﾗﾝｸの処理
;						---------------------------------
		BTFSC		mode,0		;
		GOTO		ZERO_10
		MOVLW		007H		;Zero Blank処置　最小100Hz表示
		GOTO		ZERO_100
ZERO_10		MOVLW		008H		;Zero Blank処置　最小10Hz表示

ZERO_100
		MOVWF		cn
		MOVLW		020H		; dec[0]格納場所初期値
		MOVWF		FSR
zb1		MOVF		INDF,W
		BTFSS		STATUS,2	;if dec[]=00, then continue, else return
		RETURN
		MOVF		INDF,W
		BTFSC		STATUS,2
		MOVLW		00BH
		MOVWF		INDF
		INCF		 FSR,F
		DECFSZ		cn,F
		GOTO		zb1
		RETURN

;		÷１０サブルーチン
;		１０で除算します

devide		MOVLW		020H
		MOVWF		cn
		CLRF		val_m

devide0		BCF		STATUS,0
		RLF		val_0,F
		RLF		val_1,F
		RLF		val_2,F
		RLF		val_3,F
		RLF		val_m,F

		MOVLW		0F6H
		ADDWF		val_m,W
		BTFSC		STATUS,0
		MOVWF		val_m
		BTFSC		STATUS,0
		INCF		val_0,F
		DECFSZ		cn,F
		GOTO		devide0
		DECF		FSR,F
		MOVF		val_m,W		; 余り
		MOVWF		INDF
		RETURN

;	[end of 10進変換]

;---------------------------------------------------------------------------------------------------------------------------
;	掛け算				x[32bit]=vfo[32bit] * N[8bit]
;	vfoに32ビットデータを置く	（vfo[3]:vfo[2]:vfo[1]:vfo[0]) 
;       Nに 8ﾋﾞｯﾄﾃﾞｰﾀを置く。		N ;  最大  #255です。
;	xに答えが格納される。		（x[3]:x[2]:x[1]:x[0]) 
;	変換後 N は破壊されない。

mult_vN		CLRF		x_3
		CLRF		x_2
		CLRF		x_1
		CLRF		x_0
		MOVLW		008H
		MOVWF		cn

mult0		BTFSS		N,0
		GOTO		mutpas
		MOVF		vfo_0,W
		ADDWF		x_0,F
		MOVLW		001H
		BTFSC		STATUS,0
		ADDWF		x_1,F
		BTFSC		STATUS,0
		ADDWF		x_2,F
		BTFSC		STATUS,0
		ADDWF		x_3,F
		MOVF		vfo_1,W
		ADDWF		x_1,F
		MOVLW		001H
		BTFSC		STATUS,0
		ADDWF		x_2,F
		BTFSC		STATUS,0
		ADDWF		x_3,F
		MOVF		vfo_2,W
		ADDWF		x_2,F
		MOVLW		001H
		BTFSC		STATUS,0
		ADDWF		x_3,F
		MOVF		vfo_3,W
		ADDWF		x_3,F

mutpas		BCF		STATUS,0
		RLF		vfo_0,F
		RLF		vfo_1,F
		RLF		vfo_2,F
		RLF		vfo_3,F
		BTFSC		STATUS,0
		BSF		vfo_0,0
		BCF		STATUS,0
		RRF		N,F
		BTFSC		STATUS,0
		BSF		N,7

		DECFSZ		cn,F
 		GOTO		mult0

		MOVLW		008H
		MOVWF		cn
multrot		BCF		STATUS,0
		RRF		vfo_3,F
		RRF		vfo_2,F
		RRF		vfo_1,F
		RRF		vfo_0,F
		BTFSC		STATUS,0
		BSF		vfo_3,7
		DECFSZ		cn,F
		GOTO		multrot
		RETURN

;		[end of 掛け算]

f_counter	CALL		dp_on
		CALL		c_main025
		CALL		calc0
		BTFSC		mode,0
		GOTO		Hz
		MOVF		dec_2,W		;計算結果　 10MHｚの桁
		MOVWF		dsp_5		;6桁目
		MOVF		dec_3,W		;計算結果 　 1MHｚの桁
		MOVWF		dsp_4		;5桁目
		MOVF		dec_4,W		;計算結果  100kHｚの桁
		MOVWF		dsp_3		;4桁目
		MOVF		dec_5,W		;計算結果   10kHｚの桁
		MOVWF		dsp_2		;3桁目
		MOVF		dec_6,W		;計算結果    1kHｚの桁
		MOVWF		dsp_1		;2桁目
		MOVF		dec_7,W		;計算結果  100Hｚの桁
		MOVWF		dsp_0		;1桁目
		BTFSS		mode,0
		GOTO		MHz

Hz

		MOVF		dec_3,W		;計算結果　  1MHｚの桁
		MOVWF		dsp_5		;6桁目
		MOVF		dec_4,W		;計算結果  100kHｚの桁
		MOVWF		dsp_4		;5桁目
		MOVF		dec_5,W		;計算結果   10kHｚの桁
		MOVWF		dsp_3		;4桁目
		MOVF		dec_6,W		;計算結果    1kHｚの桁
		MOVWF		dsp_2		;3桁目
		MOVF		dec_7,W		;計算結果   100Hｚの桁
		MOVWF		dsp_1		;2桁目
		MOVF		dec_8,W		;計算結果    10Hｚの桁
		MOVWF		dsp_0		;1桁目

MHz
		CALL		dp_off
		GOTO		f_counter

		END
