;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;		ＰＩＣ　ＳＴＡＲＴ　Ｐｒｏｇｒａｍ　０３
;
;		アナログＩ／Ｏポートを使ってみる
;		ＡＤＣとボリウムでＤＡＣ出力周波数変化させてみる
;
;		PIC16F1705 32MHZ 内部発振
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    LIST	P=PIC16F1705
    INCLUDE	P16F1705.INC

;
;CONFIGURATION WORD 1(ADDRESS:8007H)
;					設定
;bit13		FCMEN	0	Fail-Safe Clock Monitor
;						1=有効,0=無効
;bit12		IESO	0	内部･外部切替スイッチモード
;						1=有効,0=無効
;bit11		CLKOUTEN 1	クロックアウトイネーブルビット
;						1=無効　RA4I/O使用可
;						0=有効　FoscがCLKPUTピンに出力される
;bit10-9	BOREN	00	ブラウンアウト設定
;						11=有効
;						10=スリープ時以外有効
;		___			00=無効
;bit8		CPD		1	データメモリプロテクション
;			__			1=無効,0=有効
;bit7		CP		1	プログラムメモリプロテクション　
;						1=無効,0=有効
;bit6		MCLRE	0	RA3/MCLRピン選択ビット
;			_____		1=MCLR有効,0=RA3有効(Digital input)
;bit5		PWRTE	0	power_up timer　使います。
;						1=無効,0=有効
;bit4-3		WDTE	00	Watchdog Timer
;						11=有効
;						10=ランニング中に有効、スリープ中は無効
;						01=レジスタによるコントロール
;						00=無効
;bit2-0		FOSC	010	発振器選択ビット
;						111=ECH:外部クロック入力（4-32MHZ)、RA4I/O可
;						110=ECM:外部クロック入力（0.5-4MHZ)、RA4I/O可
;						101=ECL:外部クロック入力（0-0.5MHZ)、RA4I/O可
;						100=INTOSC:内部発振、RA4-RA5I/O可
;						011=EXTRC:外部RC発振、RA4I/O可、RA5不可
;						010=HS：外部発振子、I/O不可
;						001=XT：　〃
;						000=LP：　〃
;
;bit	15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
;data    0  0  0  0  1  0  0  1  1  0  0  0  0  1  0  0
;
;
	__CONFIG _CONFIG1,	B'0000100110000100'
;
;CONFIGURATION WORD 2(ADDRESS:8008H)マニュアル52ページ
;					設定
;bit13		LVP		0	低電圧プログラミング設定
;						1=有効
;			_____		0=無効、高電圧必要
;bit12		DEBUG	1	インサーキット･デバッガ モード設定
;						1=無効
;						0=有効、RA0-1をデバッガに使用
;bit11				0	Unimplemented
;bit10		BORV	0	ブラウンアウト･リセット電圧選択ビット（Vbor参照)
;						1=低電圧で動作
;						0=高電圧で動作
;bit9		STVREN	0	スタック･オーバーフロー･リセット設定
;						1=有効
;						0=無効
;bit8		PLLEN	0	PLL設定
;						1=4xPLL有効
;						0=4xPLL無効
;bit7       ZCDDIS  1   ZCDディセーブルビット
;                       1=ZCDを無効にする、ZCDCONで有効可
;                       0=ZCDを常に有効にする
;bit6-3					Unimplemented:read as 1
;bit2		PPS1WAY 0   PPSLOCKビット単方向セット･イネーブルビット
;                       1=ロック解除シーケンスを実行後に1度だけ解除できる
;                       0=ロック解除シーケンスを実行すると何度でも解除できる
;bit1-0		WRT		11	フラッシュメモリ プロテクション設定
;						11=無効
;						10=0h-1FFh有効、200H?1FFFHはPMCONで制御可
;						01=0h-FFFh有効、1000H?1FFFHはPMCONで制御可
;						00=0h-1FFFh有効、PMCON制御不可
;
;bit	15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
;data    0  0  0  1  0  0  0  0  1  1  1  1  1  0  1  1
;
;
    __CONFIG _CONFIG2,	B'0001000011111011'



;		ワークエリア定義
;
;		BANK0	20h-7Fh
;

;ウエイトルーチン内専用ワーク
cnt0		equ		020h		;時間待ちルーチン用専用ワーク
cnt1		equ		021h
cnt2		equ		022h
cnt3		equ		023h
;汎用ローカルワーク
tmp0		equ		024h		;サブルーチン内限定汎用ワーク
tmp1		equ		025h		;移動した場合、破壊されること有
tmp2		equ		026h
tmp3		equ		027h
;汎用広域ワーク
wrk0		equ		028h        ;演算用広域汎用ワーク
wrk1		equ		029h
wrk2		equ		02ah
wrk3		equ		02bh
;ADC広域ワーク
ADC_DATA	equ		038h
;DAC用広域ワーク(共通RAM領域)
DCX			equ		070h		;DAC X軸進行カウンタ
DCM			equ		071h		;DAC X軸分解能設定
DCR         equ     072h        ;TMR0リスタート情報
;
			ORG		0h			;リセットベクタ
			goto	init
			ORG		04h			;割り込みベクタ

;
;		ＰＩＣ１６Ｆ１７０５　３２ＭＨＺ
;       ＤＡＣ割込み処理ルーチン　Ｖｅｒ１．０
;
;       使用ワーク
;		DCR     TMR0リスタートデータ
;       DCX     X軸カウンタ
;       DCM     X軸分解能設定値
;       FSR1    DAC書込みデータテーブルアドレス
;
;		割込み発生から割込みベクタまで3サイクル程度（同期割込み）
;       FSRxはコアレジスタなので、自動で PUSH-POPされる
;       よって、割り込み終了後、元の設定値に戻る

INT
			movlb	02h			;DACレジスタ存在バンク
			incf	DCX,F		;X軸カウンタ
			movf	DCX,W
			addwf	FSR1L,F		;データアドレス設定(割込み終了後、元に戻る)
			movf	INDF1,W		;データテーブルから読み込み
			movwf	DAC1CON1	;DAC1へ書込み
			movf	DCM,W		;X軸分解能設定値
			xorwf	DCX,W
			btfsc	STATUS,Z
			clrf	DCX			;X軸カウンタリセット
;			TMR0リスタート処理
INTOUT		movlb	0h
            movf	DCR,W		;TMR0リスタート情報
			movwf	TMR0		;TMR0書込み、2cycの不感時間有
			bcf		INTCON,TMR0IF
			retfie				;




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;			PIC16F1705　イニシャライズ
;
;		OSCCON(BANK1　099H) 
;			bit7	SPLLEN	ソフトウエアPLL設定ビット
;							1 = 4xPLL有効
;							0 = 4xPLL無効(リセット後)
;			＊コンフィグレーションワードPLLEN=1の時、この設定は無視される。
;			bit6-3	IRCF	内部発振器クロック選択ビット
;							000x = 31KHZ LF
;							0010 = 31.25KHZ MF
;							0011 = 31.25KHZ HF
;							0100 = 62.5KHZ MF
;							0101 = 125KHZ MF
;							0110 = 250KHZ MF
;							0111 = 500KHZ MF（デフォルト）
;							1000 = 125kHZ HF
;							1001 = 250kHZ HF
;							1010 = 500kHZ HF
;							1011 = 1MHZ HF
;							1100 = 2MHZ HF
;							1101 = 4MHZ HF
;							1110 = 8MHZ or 32MHZ HF
;							1111 = 16MHZ HF
;			bit2			Unimplemented
;			bit1-0	SCS		システムクロック選択ビット
;							1x = 内部発振器
;							01 = タイマ1発振器
;							00 = FOSCで指定された発振器(リセット後)
;			(注)詳細はマニュアルあるいは当局HP内解説を参照
;							HF=HFINTOSC（16MHZ)
;							MF=MFINTOSC(500KHZ)
;							LF=LFINTOSC(32KHZ)
;
;
;			32MHZ内部発振設定
;		コンフィグレーションワード1		FOSC=100
;		OSCCON				SCS=00
;		OSCCON				IRCF=1110
;		OSCCON				SPLLEN=1(#1)
;		コンフィグレーションワード2		PLLEN=1(#1)
;						(#1)設定はどちらかでOKだが、PLLEN=1とすると、
;							OSCCONのSPLLEN=0の設定は無効となる。
;							また、8MHZのHFINTOSCは選択の余地が無い。
;
;		PORTA(BANK0　00CH）
;			bit7-6	Unimplemented(read=0)
;			bit5-4	RA5-4	デジタルI/O、アナログ入力
;			bit3	RA3		デジタルInputのみ
;			bit2	RA2-1	デジタルI/O、アナログ入力
;			bit0	RA0		デジタル･アナログI/O,DAコンバータ出力
;
;		PORTC(BANK0　00EH）
;			bit7-6	Unimplemented(read=0)
;			bit5-0	RC5-0	デジタルI/O、アナログ入力
;
;		TRISA(BANK1　08CH)
;			bit7-6	Unimplemented(read=0)
;			bit5-4	RA5-4	1=入力、0=出力
;			bit3	RA3		常に1
;			bit2	RA2-0	1=入力、0=出力
;
;		TRISC(BANK1　08EH)
;			bit7-6	Unimplemented(read=0)
;			bit5-4	RA5-0	1=入力、0=出力
;
;		LATA(BANK2　10CH)　データラッチレジスタ
;			bit7-6	Unimplemented(read=0)
;			bit5-4	RA5-4	出力データ保持
;			bit3	Unimplemented(read=0)
;			bit2	RA2-0	出力データ保持
;		（このラッチデータはTRISAレジスタ設定で各ピンに反映される）
;
;		LATC(BANK2　10EH)　データラッチレジスタ
;			bit7-6	Unimplemented(read=0)
;			bit5-4	RC5-0	出力データ保持
;		（このラッチデータはTRISCレジスタ設定で各ピンに反映される）
;
;
;		ANSELA(BANK3　18CH)
;			bit7-5	Unimplemented(read=0)
;			bit4	ANSA3/RA4	アナログ/デジタル選択ビット
;								1=アナログ入力
;								0=デジタルI/O
;			bit3	Unimplemented(read=0)
;			bit2-0	ANSA2-0/RA2-0アナログ/デジタル選択ビット
;								1=アナログ入力
;								0=デジタルI/O
;			＊デフォルトでは、すべて1(アナログ入力)となっている
;
;		ANSELC(BANK3　18EH)
;			bit7-6	Unimplemented(read=0)
;			bit5-0	ANSC5-0/RC5-0アナログ/デジタル選択ビット
;								1=アナログ入力
;								0=デジタルI/O
;			＊デフォルトでは、すべて1(アナログ入力)となっている
;
;
;		WPUA(BANK4　20CH)　ポートAプルアップ設定ビット
;			bit7-6	Unimplemented(read=0)
;			bit5-0			1=PORTA各ビットプルアップ有効
;					 _____	0=PORTA各ビットプルアップ無効
;					*WPUENビットが有効の時のみ、設定有効となる。
;
;		WPUC(BANK4　20EH)　ポートCプルアップ設定ビット
;			bit7-6	Unimplemented(read=0)
;			bit5-0			1=PORTC各ビットプルアップ有効
;					 _____	0=PORTC各ビットプルアップ無効
;					*WPUENビットが有効の時のみ、設定有効となる。
;
;		FVRCONレジスタ(BANK2　117H)
;			bit7	FVREN	FVRイネーブルビット
;							1=有効
;                           0=無効
;			bit6	FVRRDY	FVR準備フラグビット(#1)書込み不可
;							1=使用可能
;                           0=使用不可能あるいは禁止されている
;			bit5	TSEN	温度表示器イネーブルビット
;							1=有効
;                           0=無効
;			bit4	TSRNG	温度表示器測定レンジ選択ビット
;							1=High Range:Vout=VDD-4VT
;							0=Low Range:Vout=VDD-2VT
;			bit3-2	CDAFVR	コンパレータとDACへのFVR電圧選択ビット
;							11 = FVR出力　4x(4.096V)#2
;							10 = FVR出力　2x(2.048V)#2
;							01 = FVR出力 1x(1.024V)
;							00 = FVR出力OFF
;			bit1-0	ADFVR	ADCへのFVR電圧選択ビット
;							11 = FVR出力　4x(4.096V)#2
;							10 = FVR出力　2x(2.048V)#2
;							01 = FVR出力 1x(1.024V)
;							00 = FVR出力OFF
;
;							#1)16F1705/16F1709では常に"1"
;							#2)FVR電圧出力はVDDを超える事は出来ない
;
;		DAC1CON0レジスタ(BANK2　118H)
;		bit7	DACEN	DAC1イネーブルビット　P156 Fig17-1参照
;						1=許可
;						0=禁止
;		bit6	Unimplemented(read=0)
;		bit5	DAC1OE1	DAC1電圧出力1イネーブルビット
;						1=DAC1出力電圧をDACOUT1ピンにも出力される
;						0=DAC1出力電圧をDACOUT1ピンから切り離す
;		bit4	DAC1OE2	DAC1電圧出力2イネーブルビット
;						1=DAC1出力電圧をDACOUT2ピンにも出力される
;						0=DAC1出力電圧をDACOUT2ピンから切り離す
;		bit3-2	DAC1PSS	DAC1 正入力接続選択ビット
;						00 = VDD
;						01 = VREF+ピン(RA1)
;						10 = FVRバッファ2出力
;						11 = 使用不可
;		bit1	Un		Read as '0'
;       bit0    DAC1NSS DAC1 負入力選択ビット
;                       1=VREF-ピン(RA0)
;                       0=GND
;
;		ADCON0レジスタ(BANK1　09EH)
;		bit7	Unimplemented(read=0)
;		bit6-2	CHSx	アナログチャンネル入力選択ビット
;						11111 = FVRバッファ1出力
;						11110 = DAC_OUTPUT
;						11101 = 温度インジケータ
;						11100 = FVRバッファ2出力
;						11011 = 予約 未接続
;                              ?
;                       01100 = 予約 未接続
;						01011 = AN11
;						01010 = AN10
;						01001 = AN9
;						01000 = AN8
;						00111 = AN7
;						00110 = AN6
;						00101 = AN5
;						00100 = AN4
;						00011 = AN3
;						00010 = AN2
;						00001 = AN1
;						00000 = AN0
;		bit1	GO/DONE	A/D変換ステータスビット
;						1=変換開始指令（1にすると変換動作開始）
;						0=変換完了(変換完了すると0になる）
;		bit0	ADON	A/D変換ステータスビット
;						1=A/Dコンバータ動作
;						0=A/Dコンバータ停止
;
;		ADCON1レジスタ(BANK1　09EH)
;		bit7	ADFM	変換結果格納指定
;						1=右詰
;						0=左詰め
;		bit6-4	ADCS	A/D変換クロック選択ビット
;						111 = Frc
;						110 = Fosc/64
;						101 = Fosc/16
;						100 = Fosc/4
;						011 = Frc
;						010 = Fosc/32
;						001 = Fosc/8
;						000	= Fosc/2
;		bit3-2	Unimplemented(read=0)
;		bit1-0	ADPREF	参照正電圧指定
;						11 = 内部FVRモジュール
;						10 = 外部VREF+ピン (RA1)
;						01 = Reserved
;						00 = VDD
;
;
;       オペアンプ制御レジスタ(OPA1,OPA2)
;       OPAxCON(BANK10 0511H,0515H)
;		bit7	OPAxEN	OPAxイネーブルビット
;						1=有効
;						0=無効
;		bit6	OPAxSP  オペアンプ速度/消費電力選択ビット
;                       1=高GBWPモードで動作
;                       0=低GBWPモードで動作
;		bit5	Unimplemented(read=0)
;		bit4	OPAxUG	オペアンプ ユニティゲイン選択ビット
;						1=OPA出力を反転入力に接続。
;                         OPAxIN-ピンは汎用I/Oとして使用できる
;						0=反転入力をOPAxIN-ピンに接続する
;		bit3-2	Unimplemented(read=0)
;		bit1-0	OPAxCH	非反転チャンネル選択ビット
;						11 = 非反転入力にFVRバッファ2出力を接続
;						10 = 非反転入力にDAC_outputを接続
;						11 = 非反転入力にOPAxIN+を接続
;
;		OPTION_REG(BANK1　095H)
;					_____
;			bit7=1	WPUEN	プルアップ グローバル設定ビット
;							0=有効,1=無効
;			bit6=0	INTEDG	INTピン割り込み信号エッジ
;							1=↑
;							0=↓
;			bit5=0	TMR0CS	TMR0クロックソース選択ビット
;							1=外部入力RA2/T0CKI
;							0=内部システムクロック(Fosc/4)
;			bit4=1	TMR0SE	TMR0ソースエッジ選択ビット
;							1=RA4/T0CKIピンが↑の時インクリメント
;							0=RA4/T0CKIピンが↓の時インクリメント
;			bit3=0	PSA		プリスケーラ割当ビット
;							1=WDT
;							0=TMR0
;			bit2-0	PS		プリスケーラ分周比
;										000 1/2
;										001	1/4
;										010	1/8
;										011	1/16
;										100	1/32
;										101	1/64
;										110	1/128
;										111	1/256
;
;		INTCONレジスタ(#2)　コア　00BH
;			bit7	GIE		全割込制御
;							1許可、0禁止
;			bit6	PEIE	周辺装置割込制御
;							1許可、0禁止
;			bit5	TMR0IE	タイマ0割込許可制御
;							1許可、0禁止
;			bit4	INTE	RA2外部割込許可制御
;							1許可、0禁止
;			bit3	IOCIE	I/Oポート状態変化割込許可制御
;							1許可、0禁止
;			bit2	TMR0IF	タイマ0割込みフラグ(#1)
;							1オーバーフロー
;							0オーバーフローなし
;			bit1	INTF	RA2外部割込みフラグ(#1)
;							1割込み発生
;							0割込み発生なし
;			bit0	IOCIF	I/Oポート状態変化割込フラグ(#1)
;							1割込発生
;							0割込無
;
;							#1)ソフトウエアでリセット必要
;							#2)初期値=0なので、初期設定で0設定する必要は無い
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

init
;			各レジスタ初期設定(PIC16F1705)
			movlb	0h			;BANK0
			movlw	020h		;00100000B
			movwf	INTCON		;全割込みOFF、タイマ0割込みON
			clrf	PORTA		;Init PORT
			clrf	PORTC
			;クロック
			movlb	01h			;BANK１
			movlw	0f0h		;1111000B
			movwf	OSCCON		;内部発振器は8MHZに設定
								;4xPLL=ON
			;TMR0およびプルアップ
			movlw	088H		;10001000b
			movwf	OPTION_REG	;プルアップOFF
								;割込みエッジ↓
								;クロックソース内部（Fosc/4）
								;TMR0カウントエッジ↓
								;プリスケーラ割当→WDT
								;プリスケーラ分周1/2にセット
			;10ビットADC
			movlw	020h		;00100000B
			movwf	ADCON1		;左詰め、基準電圧VDD
								;ADCクロック　Fosc/32=1us(32MHZ)
			;I/Oポート(TRIS→BANK1、ANSEL→BANK3)
			movlw	03Fh		;00111111B
			movwf	TRISA		;RA0-5入力
			movlw	03Fh		;00111111B
			movwf	TRISC		;RC0-5入力
			movlb	03h			;BANK3
			movlw	00h			;00000000B
			movwf	ANSELA		;RA0-5=デジタル
			movlw	0Ch			;00001100B
			movwf	ANSELC		;RC0,1,4,5=デジタル、RC2,3=アナログ
;
			;FVR(BANK2)
			movlb	02h			;BANK2
			movlw	084h		;10000100B
			movwf	FVRCON		;FVRイネーブル
								;DACとCPSに1.24V
								;ADCにはOFF

			;8ビットDAC(BANK2)
			movlw	088h		;10001000B
			movwf	DAC1CON0	;DAC1イネーブル
			movlb	0h			;基準電圧はFVR
                                 ;DACOUTピン切り離し

			;オペアンプ２(BANK10)
			movlb	0ah			;BANK10
			movlw	0d2h		;11010010B
			movwf	OPA2CON		;OPA2イネーブル
								;高GBWPモード、ユニティゲイン
								;OPA1出力を反転入力に接続(電圧バッファ）
								;非反転入力にDAC1出力を接続
;			注意	オペアンプ出力ピンもアナログ入力に設定する事

			;初期設定終了
			clrf	BSR

;
;		メインプログラム
;
coldst
;
			movlw	LOW TBL64
			movwf	FSR1L
			movlw	HIGH TBL64
			movwf	FSR1H		;FSR1=TBL64
			movlw	.64
			movwf	DCM			;Ｘ軸分解能は６４
			call	GET_ADC6	;8bitのADC値を取得
			call	SET_DAC_DATA;DAC1ワークに値設定
			bsf		INTCON,GIE	;割込み許可
mloop		;メインループ
			call	GET_ADC6
;			movf	ADC_DATA,W
			call	SET_DAC_DATA
			call	wait50m
			goto	mloop

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;
;			Ａ／Ｄ変換サブルーチン
;
;		結果格納方法		ADFM=0/左詰め/ADRESHのみ取得
;		出力データ			ADC_DATA
;
;		ADCON0レジスタ（BANK1　09DH)
;		bit7	Unimplemented(read=0)
;		bit6-2	CHSx	アナログチャンネル指定
;						00000 = AN0/RA0
;						00001 = AN1/RA1
;						00010 = AN2/RA2
;						00011 = AN3/RA3
;						00100 = AN4/RC0
;						00101 = AN5/RC1
;						00110 = AN6/RC2
;						00111 = AN7/RC3
;						01000 = Reserved.No channel connected
;						    ・
;						11100 = Reserved.No channel connected
;						11101 = 温度表示器(#4)
;						11110 = DAC出力(#2)
;						11111 = FVRバッファ1出力(#3)
;		bit1	GO/DONE	A/D変換ステータスビット
;						1=変換開始指令（１にすると変換動作開始）
;						0=変換完了(変換完了すると０になる）
;		bit0	ADON	A/D変換ステータスビット
;						1=A/Dコンバータ動作
;						0=A/Dコンバータ停止
;
;		(#2)ADC入力はDAC出力に接続される。
;		(#3)ADC入力はFVRバッファ1に接続される。
;		(#4)ADC入力は温度表示モジュール出力に接続される。
;
;		ADCON1レジスタ(BANK1　09EH)
;		bit7	ADFM	変換結果格納指定
;						1=右詰
;						0=左詰め
;		bit6-4	ADCS	A/D変換クロック選択ビット
;						000	= Fosc/2
;						001 = Fosc/8
;						010 = Fosc/32
;						011 = Frc
;						100 = Fosc/4
;						101 = Fosc/16
;						110 = Fosc/64
;						111 = Frc
;		bit3-2	Unimplemented(read=0)
;		bit1-0	ADPREF	参照正電圧指定
;						00 = VDD
;						01 = Reserved
;						10 = 外部VREF+ (RA1)
;						11 = 内部FVRモジュール
;
;		使用ワーク		;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

GET_ADC6
			movlb	01h
			movlw	019h		;00011001b
								;左詰め、基準電圧VDD、
								;AN6(RC2)選択、ADON_ON
			movwf	ADCON0		;電圧サンプリング開始
			call	wait10u		;サンプリング電圧安定化待ち
			call	wait10u
			movlb	01h
			bsf		ADCON0,GO	;A/D変換開始指令
aloop
			btfsc	ADCON0,GO	;A/D変換完了待ち
			goto	aloop		;GO=0ならば次へ
			movf	ADRESH,W	;データ上位8bit
			bcf		ADCON0,ADON	;A/DコンバータOFF
			movlb	0h
			movwf	ADC_DATA	;上位8bit保存
			return				;Wreg=ADC_DATA

;
;		DAC制御用設定
;
;		TBLアドレス（今回はTBL64固定、COLDSTで設定）
;		周期カウンタリロード値(DCM=64固定値、COLDSTで設定)
;		TMR0リロード値(DCR=ADC_DATA)、F0H-FFH=EFHとする
;
SET_DAC_DATA
			movwf	tmp0
			sublw	0efh		;W=K-W
			btfsc	STATUS,C
			bra		sdd2
			movlw	0f0h
			movwf	DCR
			return
sdd2		movf	tmp0,W
			movwf	DCR
			return


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;			遅延時間サブルーチン	32MHZ用
;
;		1cycle	= 0.125us
;		使用レジスタ	= cnt2,cnt3
;		BSR		=0(BANK0)
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

wait100u						;呼び出しも含めて、100us
								;call is 2cycles
			clrf	BSR
			movlw	09h			;1
			movwf	cnt2		;1
			movlb	0h
;			nop
			nop					;3
w100u		nop					;
			call	wait10u		;10*9=90us(ここだけ命令ステップを数えない）
			decfsz	cnt2,F		;4*8+3=31cycles
			goto	w100u
			return				;2+5+31+2=40cycles=20us

wait50u							;呼び出しも含めて、50us
			call	wait25u
wait25u							;呼び出しも含めて、25us
			clrf	BSR
			call	wait10u
			call	wait10u
			movlw	0bh			;5us=0.125us*40cycles
			movwf	cnt2		;
w25u		decfsz	cnt2,F		;ループ 2+10*3+2=34cycles
			goto	w25u
;			nop
			nop
			return				;2+34+2+2=40cycles=5us

wait5m							; 5ms
			clrf	BSR
			movlw	05h
			movwf	cnt2
w5m			call	wait1m
			decfsz	cnt2,F
			goto	w5m
			return

wait10m							; 10ms
			clrf	BSR
			movlw	d'10'
			movwf	cnt2
w10m		call	wait1m
			decfsz	cnt2,F
			goto	w10m
			return

wait20m							; 20ms
			clrf	BSR
			movlw	d'20'
			movwf	cnt2
w20m		call	wait1m
			decfsz	cnt2,F
			goto	w20m
			return
wait50m							; 50ms
			clrf	BSR
			movlw	d'50'
			movwf	cnt2
w50m		call	wait1m
			decfsz	cnt2,F
			goto	w50m
			return

wait100m						; 100ms
			clrf	BSR
			movlw	d'100'
			movwf	cnt2
w100m		call	wait1m
			decfsz	cnt2,F
			goto	w100m
			return

wait500m						; 500ms
			clrf	BSR
			movlw	05h
			movwf	cnt3
w500m		call	wait100m
			decfsz	cnt3,F
			goto	w500m
			return

wait1s							; 1s
			clrf	BSR
			movlw	d'10'
			movwf	cnt3
w1s			call	wait100m
			decfsz	cnt3,F
			goto	w1s
			return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;			1ms 基本ウェイト
;			呼び出しを含めて1msとなる。
;
;		clock	= 32MHz(0.03125usec)
;		1cycle	= 0.125usec
;		1ms		= 0.125usec * 8000cycles
;
;			使用変数　cnt0,cnt1
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
wait1m
			clrf	BSR
			movlw	08h
			movwf	cnt0		;
;			外周ループ
w1m0		movlw	0c7h		;199d
			movwf	cnt1		;
;			内周ループ
w1m1		nop					;
			nop					;5cycles*cnt1
			decfsz	cnt1,F		;2+5*198+4=996c/s
			goto	w1m1		;
;
			decfsz	cnt0,F		;
			goto	w1m0		;2+7*999+998=7993cycles
			nop
			return					;other=(3+4)cycles
									;Total 8000*0.125us=1ms


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;			10us 基本ウェイト
;			呼び出し（call　w10u)も含めて、10usとなる。
;
;		clock	= 32MHZ(0.03125us)
;		1cycle	= 0.125us
;		10us	= 0.125us * 80cycles
;		使用変数　cnt0,cnt1
;		'goto','call','return'は2サイクル消費する
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

wait10u
			clrf	BSR
			movlw	018h		;18H=24
			movwf	cnt0		;
w10u0		decfsz	cnt0,F		;3*23+2=71
			goto	w10u0		;
			nop
			nop
			return				;2+3+71+2+2=80cycles

wait05u
			clrf	BSR
			movlw	0bh			;5us=0.125us*40cycles
			movwf	cnt0		;
w05u0		decfsz	cnt0,F		;ループ 2+3*10+2=34cycles
			goto	w05u0
;			nop
			nop
			return				;2+34+2+2=40cycles=5us

wait02u
			clrf	BSR
			movlw	04h			;2us=0.125us*16cycles
			movwf	cnt0		;
w02u0		decfsz	cnt0,F		;2+3*3+2+1+2=16cycles
			goto	w02u0
;			nop
			return				;
wait01u
			clrf	BSR			;1us=0.125us*8cycles
			nop					;2+4+2=8cycles
			nop
			nop
			return

;
;以下データエリア　0800HからのPAGE01を使用


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;			DAC1用疑似サイン波データテーブル
;                           Ver1.0 JUL/2015 JA0QON
;
;	注意		FSR1にアクセスするアドレスを設定
;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;       X軸=16用　FSR1=8800H
TBL16       ORG     0800h
			DW      00h		;0
			DW      0ah		;1
			DW      025h	;2
			DW      04eh	;3
			DW      07fh	;4
			DW      0b0h	;5
			DW      0d9h	;6
			DW      0f4h	;7

			DW      0feh	;8
			DW      0f4h	;9
			DW      0d9h	;A
			DW      0b0h	;B
			DW      07fh	;C
			DW      04eh	;D
			DW      025h	;E
			DW      0ah		;F
			DW      00h		;10



;       X軸=32用　FSR1=8820H
TBL32       ORG		0820h
			DW      00h		;0
			DW      02h		;1
			DW      0ah		;2
			DW      015h	;3
			DW      025h	;4
			DW      038h	;5
			DW      04eh	;6
			DW      066h	;7
			DW      07fh	;8
			DW      098h	;9
			DW      0b0h	;A
			DW      0c6h	;B
			DW      0d9h	;C
			DW      0e9h	;D
			DW      0f4h	;E
			DW      0fch	;F

			DW      0feh	;10
			DW      0fch	;11
			DW      0f4h	;12
			DW      0e9h	;13
			DW      0d9h	;14
			DW      0c6h	;15
			DW      0b0h	;16
			DW      098h	;17
			DW      07fh	;18
			DW      066h	;19
			DW      04eh	;1A
			DW      038h	;1B
			DW      025h	;1C
			DW      015h	;1D
			DW      0ah		;1E
			DW      02h		;1F
			DW      00h		;20

;       X軸=64用　FSR1=8850H
TBL64       ORG     0850h
			DW      00h		;00
			DW      01h     ;01
			DW      02h		;02
			DW      05h		;03
			DW      0ah     ;04
			DW      0fh     ;05
			DW      015h    ;06
			DW      01dh	;07
			DW      025h	;08
			DW      02eh	;09
			DW      038h	;0A
			DW      043h	;0B
			DW      04eh	;0C
			DW      05ah	;0D
			DW      066h	;0E
			DW      073h	;0F

			DW      07fh	;10
			DW      08bh	;11
			DW      098h	;12
			DW      0a4h	;13
			DW      0b0h	;14
			DW      0bbh	;15
			DW      0c6h	;16
			DW      0d0h	;17
			DW      0d9h	;18
			DW      0e1h	;19
			DW      0e9h	;1A
			DW      0efh	;1B
			DW      0f4h	;1C
			DW      0f9h	;1D
			DW      0fch    ;1E
			DW      0fdh	;1F

			DW      0feh	;20
			DW      0fdh	;21
			DW      0fch	;22
			DW      0f9h	;23
			DW      0f4h	;24
			DW      0efh	;25
			DW      0e9h	;26
			DW      0e1h	;27
			DW      0d9h	;28
			DW      0d0h	;29
			DW      0c6h	;2A
			DW      0bbh	;2B
			DW      0b0h	;2C
			DW      0a4h	;2D
			DW      098h	;2E
			DW      08bh	;2F

			DW      07fh	;30
			DW      073h	;31
			DW      066h	;32
			DW      05ah	;33
			DW      04eh	;34
			DW      043h	;35
			DW      038h	;36
			DW      02eh	;37
			DW      025h	;38
			DW      01dh	;39
			DW      015h	;3A
			DW      0fh 	;3B
			DW      0ah     ;3C
			DW      05h     ;3D
			DW      02h		;3E
			DW      01h     ;3F
			DW      0h		;40


;       X軸=128用　FSR1=8900H
TBL128      ORG     0900h
			DW      00h		;00
			DW      00h     ;01
			DW      01h		;02
			DW      01h		;03
			DW      02h     ;04
			DW      04h     ;05
			DW      05h     ;06
			DW      07h 	;07
			DW      0ah 	;08
			DW      0ch 	;09
			DW      0fh 	;0A
			DW      012h	;0B
			DW      015h	;0C
			DW      019h	;0D
			DW      01dh	;0E
			DW      021h	;0F

			DW      025h	;10
			DW      02ah    ;11
			DW      02eh	;12
			DW      033h	;13
			DW      038h    ;14
			DW      03eh    ;15
			DW      043h    ;16
			DW      049h	;17
			DW      04eh	;18
			DW      054h	;19
			DW      05ah	;1A
			DW      060h	;1B
			DW      066h	;1C
			DW      06ch	;1D
			DW      073h	;1E
			DW      078h	;1F

			DW      07fh	;20
			DW      085h	;21
			DW      08bh	;22
			DW      092h	;23
			DW      098h	;24
			DW      09eh	;25
			DW      0a4h	;26
			DW      0aah	;27
			DW      0b0h	;28
			DW      0b5h	;29
			DW      0bbh	;2A
			DW      0c0h	;2B
			DW      0c6h	;2C
			DW      0cbh	;2D
			DW      0d0h    ;2E
			DW      0d4h	;2F

			DW      0d9h	;30
			DW      0ddh	;31
			DW      0e1h	;32
			DW      0e5h	;33
			DW      0e9h	;34
			DW      0ech	;35
			DW      0efh	;36
			DW      0f2h	;37
			DW      0f4h	;38
			DW      0f7h	;39
			DW      0f9h	;3A
			DW      0fah	;3B
			DW      0fch	;3C
			DW      0fdh	;3D
			DW      0fdh    ;3E
			DW      0feh	;3F

			DW      0feh	;40
			DW      0feh	;41
			DW      0feh	;42
			DW      0fdh	;43
			DW      0fch	;44
			DW      0fah	;45
			DW      0f9h	;46
			DW      0f7h	;47
			DW      0f4h	;48
			DW      0f2h	;49
			DW      0efh	;4A
			DW      0ech	;4B
			DW      0e9h	;4C
			DW      0e5h	;4D
			DW      0e1h	;4E
			DW      0ddh	;4F

			DW      0d9h	;50
			DW      0d4h	;51
			DW      0d0h	;52
			DW      0cbh	;53
			DW      0c6h	;54
			DW      0c0h	;55
			DW      0bbh	;56
			DW      0b5h	;57
			DW      0b0h	;58
			DW      0aah	;59
			DW      0a4h	;5A
			DW      09eh	;5B
			DW      098h	;5C
			DW      092h	;5D
			DW      08bh	;5E
			DW      085h	;5F

			DW      07fh	;60
			DW      078h	;61
			DW      073h	;62
			DW      06ch	;63
			DW      066h	;64
			DW      060h	;65
			DW      05ah	;66
			DW      054h	;67
			DW      04eh	;68
			DW      049h	;69
			DW      043h	;6A
			DW      03eh 	;6B
			DW      038h    ;6C
			DW      033h    ;6D
			DW      02eh	;6E
			DW      02ah    ;6F

			DW      025h	;70
			DW      021h	;71
			DW      01dh	;72
			DW      019h	;73
			DW      015h	;74
			DW      012h	;75
			DW      0fh 	;76
			DW      0ch 	;77
			DW      0ah 	;78
			DW      07h 	;79
			DW      05h 	;7A
			DW      04h 	;7B
			DW      02h     ;7C
			DW      01h     ;7D
			DW      01h		;7E
			DW      0h      ;7F
			DW      0h		;80


            END



