;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;		リニアライザ　ＰＩＣＬＩＮ　設定　１
;
;				ＪＡ０ＱＯＮ
;
;		入力電圧によるアナログ電流計制御プログラム
;		
;
;		回路設定1　高周波ミリワット計用
;		入力検波電圧値を補正後、リニアな電流値に変換
;
;		想定ハードウエア
;		負荷抵抗　50Ω、1SS99による倍電圧検波
;		検波後負荷は100KΩ
;		発生電圧を直接PICに入力
;		PIC出力は電流計100uA、1mAを想定
;
;		内部動作
;		ADCで０～２Ｖを取得し、00H～FFHに変換
;		設定に合わせリニアライズ補正
;		デューティー比０～２５５／２５５までのPWMを発生
;		その後はLPFで直流化、DCAメータを振らせる
;
;		PIC12F1822 32MHZ（内部オシレータ）
;		データ直線化サブルーチン　設定１　Ver1.0
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



		LIST	P=PIC12F1822
		INCLUDE	P12F1822.INC

;		
;CONFIGURATION WORD 1(ADDRESS:8007H)マニュアル50ページ
;					設定
;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	100	発振器選択ビット
;						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  １  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					Unimplemented
;bit10		BORV	0	ブラウンアウト･リセット電圧選択ビット（Vbor参照)
;						1=低電圧で動作
;						0=高電圧で動作
;bit9		STVREN	0	スタック･オーバーフロー･リセット設定
;						1=有効
;						0=無効
;bit8		PLLEN	0	PLL設定
;						1=4xPLL有効
;						0=4xPLL無効
;bit7-5					Unimplemented
;bit4					Reserved
;bit3-2					Unimplemented
;bit1-0		WRT		11	フラッシュメモリ プロテクション設定（EECONレジスタ参照)
;						11=無効
;						10=0h-1FFh有効
;						01=0h-3FFh有効
;						00=0h-7FFh有効
;
;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  0  0  0  0  0  0  1  1
;
;
	__CONFIG _CONFIG2,	B'0001000000000011'

;


;		ワークエリア定義
;
;		BANK0	20h-7Fh
;
;		使用していないのもあります
;

hex0		equ		020h		;取得HEXデータ
hex1		equ		021h		;
hex2		equ		022h
hex3		equ		023h
cnt0		equ		024h		;時間待ちルーチン用
cnt1		equ		025h
cnt2		equ		026h
cnt3		equ		027h
tmp0		equ		028h		;雑用
tmp1		equ		029h
flg			equ		02ah		;エラー＆設定フラグ
mode		equ		02bh		;実行モード設定
TMC			equ		02ch		;タイマオーバーフローカウンタ
CY			equ		02dh		;1周期長設定用0-255
CYC			equ		02eh		;1周期長カウンタ
CYW			equ		02fh		;1周期内パルス幅カウンタ
DCO			equ		030h		;DAC逐次設定データ
IDC			equ		031h		;
FRQ0		equ		032h		;周波数設定データ
FRQ1		equ		033h
;

;			リセットベクタ
			ORG		0h
			goto	init
			
;			割込みベクタ
;			あるいは、このまま割込み処理領域
;			今回は使用しない
			ORG		04h
			goto	init

;			データ領域に指定
;			読込専用
;
			org		0100h
			
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;			データ補正テーブル　設定01　Ver1.0
;
;	設定01	ＲＦ負荷50Ω、1SS99倍電圧検波、検波負荷100KΩ
;			プリアンプ　無
;			フルスケール　10mW
;			FVR=2.048V　8mV/digit
;			ADC値によりPWM値を取得します。
;			PWM出力　24(18H)/％（表示mW）
;			240(F0H)=100％　255(FFH)=126％
;
;	その他		暇を見て精度アップします、Ver.Noに注意
;			有用データは下位8ビットで上位6ビットは使用しません。
;
;入力電力(dBm)	計算値(mW）	検波電圧(mV)	電流出力（％）
;	１０			１０．００		１６４３			１００
;	　９			　７．９４		１４４４			　７９
;	　８			　６．３１		１２６７			　６３
;	　７			　５．０１		１１１０			　５０
;	　６			　３．９８		　９６９　　　　　　　　　　　　　４０
;	　５			　３．１６		　８４３　　　　　　　　　　　　　３２
;	　４			　２．５１		　７３３　　　　　　　　　　　　　２５
;	　３			　２．００		　６９３　　　　　　　　　　　　　２０
;	　２			　１．５８		　５５７　　　　　　　　　　　　　１６
;	　１			　１．２６		　４８２　　　　　　　　　　　　　１３
;
;	　０			　１．００		　４１７　　　　　　　　　　　　　１０
;	－１			　０．７９		　３５９　　　　　　　　　　　　　　８
;	－２			　０．６３		　３０９　　　　　　　　　　　　　　６
;	－３			　０．５０		　２６５　　　　　　　　　　　　　　５
;	－４			　０．４０		　２２７　　　　　　　　　　　　　　４
;	－５			　０．３２		　１９３　　　　　　　　　　　　　　３
;	－６			　０．２５		　１６３　　　　　　　　　　　　　　２．５
;	－７			　０．２０		　１２４　　　　　　　　　　　　　　２．０
;	－８			　０．１６		　１０５　　　　　　　　　　　　　　１．６
;	－９			　０．１３		　　８８　　　　　　　　　　　　　　１．３
;
;	－１０			　０．１００		　　７４　　　　　　　　　　　　　　１．０
;	－１１			　０．０７９		　　６２　　　　　　　　　　　　　　０．８
;	－１２			　０．０６３		　　５１　　　　　　　　　　　　　　０．６
;	－１３			　０．０５０		　　４２　　　　　　　　　　　　　　０．５
;	－１４			　０．０４０		　　３４　　　　　　　　　　　　　　０．４
;	－１５			　０．０３２		　　２８　　　　　　　　　　　　　　０．３
;	－１６			　０．０２５		　　２３　　　　　　　　　　　　　　
;	－１７			　０．０２０		　　２０　　　　　　　　　　　　　　０．2
;	－１８			　０．０１６		　　１６　　　　　　　　　　　　　　０．２
;	－１９			　０．０１３		　　１３　　　　　　　　　　　　　　０．１
;	－２０			　０．０１０		　　１０　　　　　　　　　　　　　　０．１
;
;
;				
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

TBL01
;					PWM値	　想定ADC値　想定出力％
			DW		00h		;ADC 00H　un
			DW		00h		;ADC　01H　0.1%
			DW		00h		;ADC　02H　0.2%
			DW		01h		;ADC　03H　0.25%
			DW		01h		;ADC　04H　0.3%
			DW		01h		;ADC　05H　0.5%
			DW		01h		;ADC　06H　0.6%
			DW		02h		;ADC　07H　
			DW		02h		;ADC　08H　0.8%
			DW		02h		;ADC　09H　1.0%
			DW		03h		;ADC　0AH　
			DW		03h		;ADC　0BH　1.3%
			DW		04h		;ADC　0CH　0096
			DW		04h		;ADC　0DH　0104
			DW		04h		;ADC　0EH　0112
			DW		04h		;ADC　0FH　0120

			DW		05h		;ADC　10H　0128
			DW		05h		;ADC　11H　0136
			DW		05h		;ADC　12H　0144
			DW		06h		;ADC　13H　0152
			DW		06h		;ADC　14H　0160
			DW		06h		;ADC　15H　0168
			DW		07h		;ADC　16H　0176
			DW		07h		;ADC　17H　0184
			DW		08h		;ADC　18H　3.2%
			DW		08h		;ADC　19H　3.4%
			DW		09h		;ADC　1AH　3.6%
			DW		09h		;ADC　1BH　3.8%
			DW		0ah		;ADC　1CH　4.0%
			DW		0ah		;ADC　1DH　4.2%
			DW		0bh		;ADC　1EH　4.4%
			DW		0bh		;ADC　1FH　4.6%

			DW		0ch		;ADC 20H　4.8%
			DW		0ch		;ADC　21H　5.0%
			DW		0ch		;ADC　22H　5.2%
			DW		0dh		;ADC　23H　5.4%
			DW		0dh		;ADC　24H　5.6%
			DW		0eh		;ADC　25H　5.8%
			DW		0eh		;ADC　26H　6.0%
			DW		0fh		;ADC　27H　6.3%
			DW		010h	;ADC　28H　6.5%
			DW		010h	;ADC　29H　6.7%
			DW		011h	;ADC　2AH　7.0%
			DW		012h	;ADC　2BH　7.3%
			DW		012h	;ADC　2CH　7.6%
			DW		013h	;ADC　2DH　7.9%
			DW		014h	;ADC　2EH　8.2%
			DW		014h	;ADC　2FH　8.5%

			DW		015h	;ADC 30H　8.8%
			DW		016h	;ADC　31H　9.1%
			DW		017h	;ADC　32H　9.4%
			DW		017h	;ADC　33H　9.7%
			DW		018h	;ADC　34H　10.0%　0dBm
			DW		019h	;ADC　35H　10.33
			DW		01ah	;ADC　36H　10.66
			DW		01ah	;ADC　37H　10.99
			DW		01bh	;ADC　38H　11.32
			DW		01ch	;ADC　39H　11.65
			DW		01dh	;ADC　3AH　11.98
			DW		01eh	;ADC　3BH　12.31
			DW		01eh	;ADC　3CH　12.6%　1dBm
			DW		01fh	;ADC　3DH　12.92
			DW		020h	;ADC　3EH　13.24
			DW		021h	;ADC　3FH　13.56

			DW		021h	;ADC 40H　13.88
			DW		022h	;ADC　41H　14.2
			DW		023h	;ADC　42H　14.52
			DW		024h	;ADC　43H　14.84
			DW		025h	;ADC　44H　15.16
			DW		025h	;ADC　45H　15.48
			DW		026h	;ADC　46H　15.8%　2dBm
			DW		027h	;ADC　47H　16.22
			DW		028h	;ADC　48H　16.64
			DW		029h	;ADC　49H　17.06
			DW		02ah	;ADC　4AH　17.48
			DW		02bh	;ADC　4BH　17.9
			DW		02ch	;ADC　4CH　18.32
			DW		02dh	;ADC　4DH　18.74
			DW		02eh	;ADC　4EH　19.16
			DW		02fh	;ADC　4FH　19.58

			DW		030h	;ADC 50H　20.0%　3dBm
			DW		031h	;ADC　51H　20.42
			DW		032h	;ADC　52H　20.84
			DW		033h	;ADC　53H　21.26
			DW		034h	;ADC　54H　21.68
			DW		035h	;ADC　55H　22.1
			DW		036h	;ADC　56H　22.52
			DW		037h	;ADC　57H　22.94
			DW		038h	;ADC　58H　23.36
			DW		039h	;ADC　59H　23.78
			DW		03ah	;ADC　5AH　24.2
			DW		03bh	;ADC　5BH　24.62
			DW		03ch	;ADC　5CH　25.0%　4dBm
			DW		03eh	;ADC　5DH　25.63
			DW		03fh	;ADC　5EH　26.26
			DW		041h	;ADC　5FH　26.89

			DW		042h	;ADC 60H　27.52
			DW		044h	;ADC　61H　28.15
			DW		045h	;ADC　62H　28.78
			DW		047h	;ADC　63H　29.41
			DW		048h	;ADC　64H　30
			DW		049h	;ADC　65H　30.53
			DW		04bh	;ADC　66H　31.06　5dBm
			DW		04ch	;ADC　67H　31.59
			DW		04dh	;ADC　68H　32.12
			DW		04eh	;ADC　69H　32.65
			DW		050h	;ADC　6AH　33.18
			DW		051h	;ADC　6BH　33.71
			DW		052h	;ADC　6CH　34.24
			DW		053h	;ADC　6DH　34.77
			DW		055h	;ADC　6EH　35.3
			DW		056h	;ADC　6FH　35.83

			DW		057h	;ADC 70H　36.36
			DW		059h	;ADC　71H　36.89
			DW		05ah	;ADC　72H　37.42
			DW		05bh	;ADC　73H　37.95
			DW		05ch	;ADC　74H　38.48
			DW		05eh	;ADC　75H　39.01
			DW		05fh	;ADC　76H　39.54
			DW		060h	;ADC　77H　40.00　6dBm
			DW		061h	;ADC　78H　40.53
			DW		063h	;ADC　79H　41.06
			DW		064h	;ADC　7AH　41.59
			DW		065h	;ADC　7BH　42.12
			DW		066h	;ADC　7CH　42.65
			DW		068h	;ADC　7DH　43.18
			DW		069h	;ADC　7EH　43.71
			DW		06ah	;ADC　7FH　44.24

			DW		06bh	;ADC ８0H　44.77
			DW		06dh	;ADC　81H　45.3
			DW		06eh	;ADC　82H　45.83
			DW		06fh	;ADC　83H　46.36
			DW		071h	;ADC　84H　46.89
			DW		072h	;ADC　85H　47.42
			DW		073h	;ADC　86H　47.95
			DW		074h	;ADC　87H　48.48
			DW		076h	;ADC　88H　49.01
			DW		077h	;ADC　89H　49.54
			DW		078h	;ADC　8AH　50.0%　7dBm
			DW		07ah	;ADC　8BH　50.8
			DW		07ch	;ADC　8CH　51.6
			DW		07eh	;ADC　8DH　52.4
			DW		080h	;ADC　8EH　53.2
			DW		082h	;ADC　8FH　54.0

			DW		084h	;ADC 90H　54.8
			DW		085h	;ADC　91H　55.6
			DW		087h	;ADC　92H　56.4
			DW		089h	;ADC　93H　57.2
			DW		08bh	;ADC　94H　58.0
			DW		08dh	;ADC　95H　58.8
			DW		090h	;ADC　96H　60
			DW		091h	;ADC　97H　60.38
			DW		092h	;ADC　98H　60.76
			DW		093h	;ADC　99H　61.14
			DW		094h	;ADC　9AH　61.52
			DW		095h	;ADC　9BH　61.90
			DW		095h	;ADC　9CH　62.28
			DW		096h	;ADC　9DH　62.66
			DW		097h	;ADC　9EH　63.1%　8dBm
			DW		099h	;ADC　9FH　63.8

			DW		09bh	;ADC A0H　64.5
			DW		09ch	;ADC　A1H　65.2
			DW		09eh	;ADC　A2H　65.9
			DW		0a0h	;ADC　A3H　66.6
			DW		0a1h	;ADC　A4H　67.3
			DW		0a3h	;ADC　A5H　68.0
			DW		0a5h	;ADC　A6H　68.7
			DW		0a7h	;ADC　A7H　69.4
			DW		0a8h	;ADC　A8H　70
			DW		0aah	;ADC　A9H　70.8
			DW		0ach	;ADC　AAH　71.5
			DW		0aeh	;ADC　ABH　72.3
			DW		0afh	;ADC　ACH　73.1
			DW		0b1h	;ADC　ADH　73.9
			DW		0b3h	;ADC　AEH　74.7
			DW		0b5h	;ADC　AFH　75.5

			DW		0b7h	;ADC B0H　76.3
			DW		0b9h	;ADC　B1H　77.1
			DW		0bbh	;ADC　B2H　77.9
			DW		0bdh	;ADC　B3H　78.7
			DW		0beh	;ADC　B4H　79.5%　9dBm
			DW		0c0h	;ADC　B5H　80.0%
			DW		0c2h	;ADC　B6H　80.7
			DW		0c3h	;ADC　B7H　81.4
			DW		0c5h	;ADC　B8H
			DW		0c7h	;ADC　B9H　82.8
			DW		0c8h	;ADC　BAH　83.5
			DW		0cah	;ADC　BBH　84.2
			DW		0cch	;ADC　BCH　84.9
			DW		0cdh	;ADC　BDH　85.6
			DW		0cfh	;ADC　BEH　86.3
			DW		0d1h	;ADC　BFH　87.1

			DW		0d3h	;ADC C0H　88
			DW		0d5h	;ADC　C1H　89
			DW		0d8h	;ADC　C2H　90.0%
			DW		0d9h	;ADC　C3H　90.5%
			DW		0dah	;ADC　C4H　91%
			DW		0ddh	;ADC　C5H　92%
			DW		0dfh	;ADC　C6H　93%
			DW		0e2h	;ADC　C7H　94%
			DW		0e4h	;ADC　C8H　95%
			DW		0e6h	;ADC　C9H　96%
			DW		0e9h	;ADC　CAH　97%
			DW		0ebh	;ADC　CBH　98%
			DW		0eeh	;ADC　CCH　99%　
			DW		0f0h	;ADC　CDH　100%　10dBm
			DW		0f2h	;ADC　CEH　101
			DW		0f5h	;ADC　CFH　102

			DW		0f7h	;ADC D0H　103
			DW		0fah	;ADC　D1H　104
			DW		0fch	;ADC　D2H　105
			DW		0ffh	;ADC　D3H　106
			DW		0ffh	;ADC　D4H　OVER
			DW		0ffh	;ADC　D5H　
			DW		0ffh	;ADC　D6H　1712
			DW		0ffh	;ADC　D7H　1720
			DW		0ffh	;ADC　D8H　1728
			DW		0ffh	;ADC　D9H　1736
			DW		0ffh	;ADC　DAH　1744
			DW		0ffh	;ADC　DBH　1752
			DW		0ffh	;ADC　DCH　1760
			DW		0ffh	;ADC　DDH　1768
			DW		0ffh	;ADC　DEH　1776
			DW		0ffh	;ADC　DFH　1784

			DW		0ffh	;ADC E0H
			DW		0ffh	;ADC　E1H
			DW		0ffh	;ADC　E2H
			DW		0ffh	;ADC　E3H
			DW		0ffh	;ADC　E4H
			DW		0ffh	;ADC　E5H
			DW		0ffh	;ADC　E6H
			DW		0ffh	;ADC　E7H
			DW		0ffh	;ADC　E8H
			DW		0ffh	;ADC　E9H　11dBm
			DW		0ffh	;ADC　EAH
			DW		0ffh	;ADC　EBH
			DW		0ffh	;ADC　ECH
			DW		0ffh	;ADC　EDH
			DW		0ffh	;ADC　EEH
			DW		0ffh	;ADC　EFH

			DW		0ffh	;ADC F0H
			DW		0ffh	;ADC　F1H
			DW		0ffh	;ADC　F2H
			DW		0ffh	;ADC　F3H
			DW		0ffh	;ADC　F4H
			DW		0ffh	;ADC　F5H
			DW		0ffh	;ADC　F6H
			DW		0ffh	;ADC　F7H
			DW		0ffh	;ADC　F8H
			DW		0ffh	;ADC　F9H
			DW		0ffh	;ADC　FAH
			DW		0ffh	;ADC　FBH
			DW		0ffh	;ADC　FCH
			DW		0ffh	;ADC　FDH
			DW		0ffh	;ADC　FEH
			DW		0ffh	;ADC　FFH

;
;	デジタルズームモード用変換データ
;
;	FVR=1.024V（4mV/digit)となります。
;

TBL3

;					PWM値	　想定ADC値　想定出力％
			DW		00h		;ADC 00H　0.0%　-28dBm以下
			DW		01h		;ADC　01H　0.5%　-24dBm（-23~-27)
			DW		02h		;ADC　02H　1.0%　-20dBm（-20~-22)
			DW		03h		;ADC　03H　1.3%　-19dBm
			DW		04h		;ADC　04H　1.6%　-18dBm
			DW		05h		;ADC　05H　2.0%　-17dBm
			DW		06h		;ADC　06H　2.5%　-16dBm
			DW		07h		;ADC　07H　3.0%　
			DW		08h		;ADC　08H　3.2%　-15dBm
			DW		0ah		;ADC　09H　4.0%　-14dBm
			DW		0bh		;ADC　0AH　
			DW		0ch		;ADC　0BH　5.0%　-13dBm
			DW		0eh		;ADC　0CH　
			DW		0fh		;ADC　0DH　6.3%　-12dBm
			DW		010h	;ADC　0EH　
			DW		012h	;ADC　0FH　

			DW		013h	;ADC　10H　7.9%　-11dBm
			DW		015h	;ADC　11H　
			DW		016h	;ADC　12H　
			DW		018h	;ADC　13H　10.0%　-10dBm
			DW		01ah	;ADC　14H
			DW		01ch	;ADC　15H
			DW		01eh	;ADC　16H　12.6　-9dBm
			DW		020h	;ADC　17H
			DW		021h	;ADC　18H
			DW		023h	;ADC　19H
			DW		024h	;ADC　1AH
			DW		026h	;ADC　1BH　15.8%　-8dBm
			DW		028h	;ADC　1CH
			DW		02bh	;ADC　1DH
			DW		02dh	;ADC　1EH
			DW		030h	;ADC　1FH　20.0%　-7dBm

			DW		031h	;ADC 20H　20.51%
			DW		032h	;ADC　21H　21.02%
			DW		034h	;ADC　22H　21.53%
			DW		035h	;ADC　23H　22.04%
			DW		036h	;ADC　24H　22.55%
			DW		037h	;ADC　25H　23.06%
			DW		039h	;ADC　26H　23.57%
			DW		03ah	;ADC　27H　24.08%
			DW		03bh	;ADC　28H　24.59%
			DW		03ch	;ADC　29H　25.1%　-6dBm
			DW		03eh	;ADC　2AH　25.94%
			DW		040h	;ADC　2BH　26.78%
			DW		042h	;ADC　2CH　27.62%
			DW		044h	;ADC　2DH　28.46%
			DW		046h	;ADC　2EH　29.3%
			DW		048h	;ADC　2FH　30.14%

			DW		04ah	;ADC 30H　30.98%
			DW		04ch	;ADC　31H　31.8%　-5dBm
			DW		04fh	;ADC　32H　32.8%
			DW		051h	;ADC　33H　33.8%
			DW		054h	;ADC　34H　34.8%
			DW		056h	;ADC　35H　35.8
			DW		058h	;ADC　36H　36.8
			DW		05bh	;ADC　37H　37.8
			DW		05dh	;ADC　38H　38.8
			DW		060h	;ADC　39H　39.8　-4dBm
			DW		062h	;ADC　3AH　40.82
			DW		064h	;ADC　3BH　41.84
			DW		067h	;ADC　3CH　42.86
			DW		069h	;ADC　3DH　43.88
			DW		06ch	;ADC　3EH　44.9
			DW		06eh	;ADC　3FH　45.92

			DW		071h	;ADC 40H　46.94
			DW		073h	;ADC　41H　47.96
			DW		076h	;ADC　42H　48.98
			DW		078h	;ADC　43H　50.0　-3dBm
			DW		07bh	;ADC　44H　51.19
			DW		07eh	;ADC　45H　52.38
			DW		081h	;ADC　46H　53.57
			DW		083h	;ADC　47H　54.76
			DW		086h	;ADC　48H　55.95
			DW		089h	;ADC　49H　57.14
			DW		08ch	;ADC　4AH　58.33
			DW		08fh	;ADC　4BH　59.52
			DW		092h	;ADC　4CH　60.71
			DW		095h	;ADC　4DH　61.9
			DW		097h	;ADC　4EH　63.1　-2dBm
			DW		09bh	;ADC　4FH　64.46

			DW		09eh	;ADC 50H　65.82
			DW		0a1h	;ADC　51H　67.18
			DW		0a4h	;ADC　52H　68.54
			DW		0a8h	;ADC　53H　69.9
			DW		0abh	;ADC　54H　71.26
			DW		0aeh	;ADC　55H　72.62
			DW		0b2h	;ADC　56H　73.98
			DW		0b5h	;ADC　57H　75.34
			DW		0b8h	;ADC　58H　76.7
			DW		0bbh	;ADC　59H　78.06
			DW		0bfh	;ADC　5AH　79.4　-1dBm
			DW		0c2h	;ADC　5BH　80.77
			DW		0c5h	;ADC　5CH　82.14
			DW		0c8h	;ADC　5DH　83.51
			DW		0cch	;ADC　5EH　84.88
			DW		0cfh	;ADC　5FH　86.25

			DW		0d2h	;ADC 60H　87.62
			DW		0d6h	;ADC　61H　88.99
			DW		0d9h	;ADC　62H　90.36
			DW		0dch	;ADC　63H　91.73
			DW		0dfh	;ADC　64H　93.1
			DW		0e3h	;ADC　65H　94.47
			DW		0e6h	;ADC　66H　95.84
			DW		0e9h	;ADC　67H　97.21
			DW		0edh	;ADC　68H　98.58
			DW		0f0h	;ADC　69H　100.0　0dBm
			DW		0f4h	;ADC　6AH　101.63
			DW		0f8h	;ADC　6BH　103.26
			DW		0fch	;ADC　6CH　104.89
			DW		0ffh	;ADC　6DH　106.52
			DW		0ffh	;ADC　6EH　108.15　OVER
			DW		0ffh	;ADC　6FH　109.78

			DW		0ffh	;ADC 70H　111.41
			DW		0ffh	;ADC　71H　113.04
			DW		0ffh	;ADC　72H　114.67
			DW		0ffh	;ADC　73H　116.3
			DW		0ffh	;ADC　74H　117.93
			DW		0ffh	;ADC　75H　119.56
			DW		0ffh	;ADC　76H　121.19
			DW		0ffh	;ADC　77H　122.82
			DW		0ffh	;ADC　78H　124.45
			DW		0ffh	;ADC　79H　126%　1dBm
			DW		0ffh	;ADC　7AH
			DW		0ffh	;ADC　7BH
			DW		0ffh	;ADC　7CH
			DW		0ffh	;ADC　7DH
			DW		0ffh	;ADC　7EH
			DW		0ffh	;ADC　7FH





;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;			PIC12F1822　イニシャライズ
;
;		OSCCON(BANK1　099H) マニュアル69ページ
;			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）　マニュアル126ページ
;			bit7-6	Unimplemented(read=0)
;			bit5-4	RA5-4	デジタルI/O、アナログ入力
;			bit3	RA3		デジタルInputのみ
;			bit2	RA2-1	デジタルI/O、アナログ入力
;			bit0	RA0		デジタル･アナログI/O,DAコンバータ出力
;
;		TRISA(BANK1　08CH)　マニュアル126ページ
;			bit7-6	Unimplemented(read=0)
;			bit5-4	RA5-4	1=入力、0=出力
;			bit3	RA3		常に1
;			bit2-0	RA2-0	1=入力、0=出力
;
;		LATA(BANK2　10CH)　データラッチﾚｼﾞｽﾀ　マニュアル127ページ
;			bit7-6	Unimplemented(read=0)
;			bit5-4	RA5-4	出力データ保持
;			bit3	Unimplemented(read=0)
;			bit2-0	RA2-0	出力データ保持
;							（このラッチデータはTRISAレジスタ設定で各ピンに反映される）
;
;
;		ANSELA(BANK3　18CH)　マニュアル127ページ
;			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(アナログ入力)となっている
;
;
;		WPUA(BANK4　20CH)　ポートAプルアップ設定ビット
;			bit7-6	Unimplemented(read=0)
;			bit5-0			1=PORTA各ビットプルアップ有効
;					 _____	0=PORTA各ビットプルアップ無効
;					*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電圧選択ビット
;							00 = FVR出力OFF
;							01 = FVR出力 1x(1.024V)
;							10 = FVR出力　2x(2.048V)#2
;							11 = FVR出力　4x(4.096V)#2
;			bit1-0	ADFVR	ADCへのFVR電圧選択ビット
;							00 = FVR出力OFF
;							01 = FVR出力 1x(1.024V)
;							10 = FVR出力　2x(2.048V)#2
;							11 = FVR出力　4x(4.096V)#2
;
;							#1)12F1822/16F1823では常に"1"
;							#2)FVR電圧出力はVDDを超える事は出来ない
;
;
;		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モジュール
;
;
;		OPTION_REG(BANK1　095H)　マニュアル177ページ
;					_____
;			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
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	
init
;			各レジスタ初期設定
;			movlw	020h		;00100000B
;			movwf	INTCON		;全割込みOFF、TMR0割込み許可
			movlb	0h			;BANK0
			clrf	PORTA		;Init PORT
			;クロック
			movlb	01h			;BANK１に切替
			movlw	0f0h		;1111000B
			movwf	OSCCON		;内部発振器は8MHZに設定
								;4xPLL=ON
			;TMR0およびプルアップ
			movlw	083H		;10000011b
			movwf	OPTION_REG	;プルアップOFF
								;割込みエッジ↓
								;クロックソース内部（Fosc/4）
								;TMR0カウントエッジ↓
								;プリスケーラ割当→TMR0
								;プリスケーラ分周1/16にセット
			;ADC
			movlw	023h		;00100011B
			movwf	ADCON1		;左詰め、基準電圧FVR
								;ADCクロック　Fosc/32=1us(32MHZ)
			;I/Oポート
			movlw	01ah		;00011010B
			movwf	TRISA		;RA0,2,5は出力、RA1,3,4は入力
			movlb	03h			;BANK3
			movlw	02h			;00000010B
			movwf	ANSELA		;RA1,アナログ
								;RA0,2-5,デジタルI/O
								
			;FVR
			movlb	02h			;BANK2
			movlw	082h		;10000010B
			movwf	FVRCON		;FVRイネーブル
								;DACとCPSはOFF
								;ADCに2.048V
			
;			コールドスタート
			movlb	0h			;BANK0
			bsf		PORTA,5		;モードLED　OFF
        	movlw	0h
        	movwf	FSR1L
			movlw	0ffh		;1サイクルのカウント数初期値セット、0-ffh
			movwf	CY			;1サイクルは最大255分割される
			clrf	CYC			;1サイクル終了ごとにCY値がリロードされる
			clrf	CYW			;パルス幅（％）=（CYW/CY）*100
			clrf	mode
			
;			チューニングモードスイッチチェック
			movlb	03h			;BANK3
			bcf		ANSELA,1	;RA1を臨時にデジタル
			movlb	0h
			btfsc	PORTA,1		;TUNE　JPチェック
			goto	tune		;ポートがHならTUNEモードへ
			movlb	03h			;BANK3
			bsf		ANSELA,1	;RA1,アナログ
			movlb	0h
			bsf		PORTA,0		;警告LED　OFF
;
;		メインルーチン
;
;		ミリワット表示モード
;
main
			call	setmod		;モードチェック及びセット
			call	get_adc		;検波電圧入力
			call	pwmod		;PWM変調出力
			goto	main		;

;
;		動作モード処理
;
;		設定ピン
;		ポートはプルアップ済みなので、H=OFF、L=ON
;		デジタルズーム	PORTA,3
;		オートレンジ		PORTA,4
;
;		modeフラグビット
;		bit7	予約　常に0
;		bit6	予約　常に0
;		bit5	予約　常に0
;		bit4	予約　常に0
;		bit3	予約　常に0
;		bit2	オートレンジON(1)、OFF(0)
;		bit1	dBm表示ON(1)、OFF(0)
;		bit0	デジタルズームON(1)、OFF(0)
;				注）現在はbit0しか使用していない
;
setmod
;			PWMサイクルチェック
			clrw				;CYCゼロチェック
			addwf	CYC,W
			btfss	STATUS,Z	;CYC=0ならモードチェック
			return				;CYCがゼロでないなら何もしない			
;			動作モード振分け
			btfss	PORTA,4		;オートモードチェック
			goto	autoin		;AT時他モードをチェックしない
			clrf	mode		;モードクリア
			btfss	PORTA,3		;ズームモードチェック
			bsf		mode,0		;ズームモードON
			return				;オートOFF
;			PWMサイクルチェック
autoin
;			clrw				;CYCゼロチェック
;			addwf	CYC,W
;			btfss	STATUS,Z	;CYC=0ならオートモード動作
;			return				;CYCがゼロでないなら何もしない			

			btfsc	mode,0		;ズームフラグチェック
			goto	loren
hiren
			movf	hex0,W		;8%を切ったらローレンジへ
			sublw	02dh		;W=K-W
			btfss	STATUS,C	;ボローで無いならレンジ切替	
			return				;ボローなのでレンジ切替無
			;
			bsf		mode,0
			return
loren
			movf	hex0,W		;106%を超えたらハイレンジへ
			sublw	06dh		;W=K-W
			btfsc	STATUS,C	;ボローならレンジ切替
			return				;ボローで無いので、レンジ切替無
			;
			bcf		mode,0
			return

;			
;		チューニングモード
;		PWM出力100％（最大106％）なので、
;		このモードの時に電流計をフルスケールに合わせる
;		終了時は電源OFFとする（無限ループとなっている)
;
tune		;
			movlb	0h
tun01		clrw				;
			addwf	CYC,W		;
			btfss	STATUS,Z	;
			goto	tuning		;			

			movlw	0e9h		;補正出力値100％（条件が違うため）
			movwf	CYW			;パルスON割合カウンタ

tuning		call	pwmod		;			
			goto	tun01


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;			データ直線化サブルーチン　設定１　Ver1.0
;
;
;		入力		hex0	00H-FFH（ADC値）
;		出力		hex1	00H-FFH（PWM値）
;		警告LED	PORTA,0	ON-L、OFF-H
;		ADC設定	FVR=2.048V（ノーマルモード）
;				8mV/digit
;				FVR=1.024V（ズームモード）
;				4mV/digit
;
;		基準は50Ω負荷に発生したＲＦ電圧を倍電圧検波した出力で、
;		ＳＳＧ出力１０ｍＷまでを想定
;		ＳＳＧ１０ｍＷ出力時、倍電圧検波電圧が約１６４０ｍＶ
;		よって、約２Ｖ未満までの入力電圧を変換対象とする。
;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

rev_an
;		アナログメータ　ノーマルモード　10mWフルスケール
;
			movf	hex0,W
			movwf	tmp0
			sublw	0d3h		;W=K-W
			btfss	STATUS,C	;上限越えチェック（106％）
			goto	tmax		;ボローなら上限値
	
        	movlw	081h
        	movwf	FSR1H		;FSR1=TBLアドレス
			movf	tmp0,W		;取得電圧値
			movwf	FSR1L		;ポインタアドレス生成
			movf	INDF1,W		;変換データ取得
			movwf	hex1		;hex1にデータ格納
			bsf		PORTA,0		;警告LED　OFF
			return

rev_az
;		アナログメータ　デジタルズームモード　1mWフルスケール
;
			movf	hex0,W
			movwf	tmp0
			sublw	06dh		;W=K-W
			btfss	STATUS,C	;上限越えチェック
			goto	tmax		;ボローなら上限値

        	movlw	082h
        	movwf	FSR1H		;FSR1=TBLアドレス
			movf	tmp0,W		;取得電圧値
			movwf	FSR1L		;ポインタアドレス生成
			movf	INDF1,W		;変換データ取得
			movwf	hex1		;hex1にデータ格納
			bsf		PORTA,0		;警告LED　OFF
			return

;		上限域、PWM値FFHで固定
tmax
			movlw	0ffh
			movwf	hex1
			bcf		PORTA,0		;警告LED　ON
			return

			
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;
;			Ａ／Ｄ変換サブルーチン
;
;		アナログ入力ポート		RA1/AN1/CH1
;		結果格納方法		ADFM=0/左詰め/ADRESHのみ取得
;		出力データ			hex0
;
;		ADCON0レジスタ（BANK1　09DH)　マニュアル147ページ
;		bit7	Unimplemented(read=0)
;		bit6-2	CHSx	アナログチャンネル指定
;						00000 = AN0/RA0
;						00001 = AN1/RA1
;						00010 = AN2/RA2
;						00011 = AN3/RA3
;						00100 = AN4/RC0(#1)
;						00101 = AN5/RC1(#1)
;						00110 = AN6/RC2(#1)
;						00111 = AN7/RC3(#1)
;						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コンバータ停止
;
;		(#1)PIC16F1823のみ
;		(#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モジュール
;
;		使用ワーク	mode
;				hex0
;				hex1
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;			検波（整流）電圧取得

get_adc
;			PWMサイクルチェック
			clrw				;CYCゼロチェック
			addwf	CYC,W
			btfss	STATUS,Z	;CYC=0ならサンプリング開始
			return				;CYCがゼロでないなら何もしない			

;			モードチェック
			btfsc	mode,0		;mode,0=0ならノーマルモード
			goto	adcmdv1		;mode,0=1ならズームモード

adcmdv2		;ノーマルモード
			movlb	02h			;BANK2
			movlw	082h		;10000010B
			movwf	FVRCON		;FVRイネーブル
								;DACとCPSはOFF
								;ADCに2.048V
			movlb	01h			;BANK1
			movlw	05h			;00000101b
								;左詰め、基準電圧FVR、
								;AN1(RA1)選択、ADON_ON
			movwf	ADCON0		;電圧サンプリング開始
			call	w10u		;サンプリング電圧安定化待ち
			call	w10u
			movlb	01h			;BANK1
			bsf		ADCON0,GO	;A/D変換開始指令
aloopv2
			btfsc	ADCON0,GO	;A/D変換完了待ち 
			goto	aloopv2		;GO=0ならば次へ
			movf	ADRESH,W	;データ上位８ビット
			bcf		ADCON0,ADON	;A/DコンバータOFF
			movlb	0h			;BANK0
			movwf	hex0		;上位８ビットをhex0に保存
;			goto	alpdb1		;デバッグ用

alp01		call	rev_an		;hex0値を補正してhex1に収納
			movf	hex1,W
			movwf	CYW			;パルスON割合
			bsf		PORTA,5		;ZOOM　LED　OFF
			return

adcmdv1		;ズームモード
			movlb	02h			;BANK2
			movlw	081h		;10000001B
			movwf	FVRCON		;FVRイネーブル
								;DACとCPSはOFF
								;ADCに1.024V
			movlb	01h			;BANK1
			movlw	05h			;00000101b
								;左詰め、基準電圧FVR、
								;AN1(RA1)選択、ADON_ON
			movwf	ADCON0		;電圧サンプリング開始
			call	w10u		;サンプリング電圧安定化待ち
			call	w10u
			movlb	01h			;BANK1
			bsf		ADCON0,GO	;A/D変換開始指令
aloopv1
			btfsc	ADCON0,GO	;A/D変換完了待ち 
			goto	aloopv1		;GO=0ならば次へ
			movf	ADRESH,W	;データ上位８ビット
			bcf		ADCON0,ADON	;A/DコンバータOFF
			movlb	0h			;BANK0
			movwf	hex0		;上位８ビットをhex0に保存
;			goto	alpdb1		;デバッグ用

alp02		call	rev_az		;hex0値を補正してhex1に収納
			movf	hex1,W
			movwf	CYW			;パルスON割合
			bcf		PORTA,5		;ZOOM　LED　ON
			return


;			デバッグ用暫定処置　ADC出力とPWM入力を直結
alpdb1		movwf	CYW			;補正処理をせずCYWにロード
			return				;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;			PWM出力コントロール
;
;
;		使用変数
;			1周期長設定カウンタ		CYC	0-255
;			1周期内パルス幅カウンタ		CYW
;
;		使用出力ポート				RA2
;
;		1周期長設定値はCYで固定値
;		1周期内パルスオン時間はCYWで変動値
;		1周期終了判定減算カウンタはCYCで、１周期最初のみCYC=CY
;		１周期内出力ポートON時間＝CYW/CY
;		1周期内出力ポートOFF時間＝（CY-CYW）/CY
;
;
;		想定呼出周期
;			60us以下を想定　60us*255=15300us(約65HZ)
;			呼出周期が長いと、電流計がプルプルします。
;			パルス幅CYWを設定してから呼び出す
;			このルーチンでは時間は管理できず、1周期の時間は呼出ルーチンで決定される
;			よって、基本的に割込み処理ルーチンからの呼出を想定している
;			最長255回呼出されると1周期終了と認識し、次の周期処理をする
;			パルス幅カウンタは指定の回数分の時間ONとし、デクレメントされる
;			パルス幅カウンタがゼロになると1周期終了までOFFとする
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;		電流計を制御するためのPWM変調
pwmod

;		サイクル内かどうかチェック
ckcyc
			clrw				;CYCゼロチェック
			addwf	CYC,W
			btfss	STATUS,Z
			goto	cying		;CYC>0なのでサイクル中処理へ
									
;		サイクル初期化
;
;		一旦初期化すると１サイクルが終了するまで設定変数はリロードされない
;
cyst		movf	CY,W		;1サイクルは最長255カウントされる
			movwf	CYC			;CYCに設定値リロード
			clrw
			addwf	CYW,W
			btfss	STATUS,Z	;movfはZフラグに影響を与える
			goto	prton
prtof		bcf		PORTA,2		;最初からCYC=0なのでPORT=0(OFF)
			return				;何もしないで終了
prton		bsf		PORTA,2		;PORT=1(ON)
			return

;		サイクル処理中
cying		decf	CYC,F		;サイクルカウンタを減算

			clrw				;PWMポート(RA2)処理
			addwf	CYW,W		;CYW値ゼロチェック
			btfsc	STATUS,Z
			return				;CYWがすでに0ならば終了
			decf	CYW,F		;CYWを減算
			btfss	STATUS,Z	;減算結果が↓
			return				;CYW=0でないのでポートONのまま終了
			bcf		PORTA,2		;CYW=0となったのでポートOFF
			return




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;			遅延時間サブルーチン	32MHZ用
;
;		1cycle	= 0.125us
;		使用レジスタ	= cnt2,cnt3
;		BSR		=0(BANK0)
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

wait100u						;呼び出しも含めて、100us
								;call is 2cycles
			movlw	09h			;1
			movwf	cnt2		;1
			movlb	0h
			nop
			nop					;3
w100u		nop					;
			call	w10u		;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
			call	w10u
			call	w10u
			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 
			movlb	0h
			movlw	05h
			movwf	cnt2
w5m			call	w1m
			decfsz	cnt2,F
			goto	w5m
			return

wait10m							; 10ms
			movlb	0h
			movlw	d'10'
			movwf	cnt2
w10m		call	w1m
			decfsz	cnt2,F
			goto	w10m
			return

wait20m							; 20ms
			movlb	0h
			movlw	d'20'
			movwf	cnt2
w20m		call	w1m
			decfsz	cnt2,F
			goto	w20m
			return
wait50m							; 50ms
			movlb	0h
			movlw	d'50'
			movwf	cnt2
w50m		call	w1m
			decfsz	cnt2,F
			goto	w50m
			return

wait100m						; 100ms
			movlb	0h
			movlw	d'100'
			movwf	cnt2
w100m		call	w1m
			decfsz	cnt2,F
			goto	w100m
			return

wait500m						; 500ms
			movlb	0h
			movlw	05h
			movwf	cnt3
w500m		call	wait100m
			decfsz	cnt3,F
			goto	w500m
			return

wait1s							; 1s
			movlb	0h
			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
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
w1m
			movlb	0h
			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サイクル消費する
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

w10u
			movlb	0h
			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
			
;
			END
			
