
;******************************************************
;
;　　　　レヴロガー04
;
;	01/09/21 Masashi Kawanishi
;	PIC16F84：20MHz用(1cycle=0.2us)
;
;	電源入れて20秒間の後計測開始
;	はじめの1秒の間にSW押すとセンサー調整モード
;	調整モード中にもう一回押すとRS232Cデータ送信モード
;	データ送信モード：
;	　9600bps, 8bit, 1stopbit
;	　パリティーなし、フロー制御なし
;	　テキストデータが0000番地から順に流れてくる
;
;	10msおきに30回Gセンサーのパルスを測定、
;	タイマ0で測定した回転数を記録(+10ms)
;	それぞれの値をすべて16ビットデータで順に
;	EEPROMに書きこみ
;	
;	ピンアサイン
;	RA1 <- Gセンサーパルス (1がON 0がOFF）
;	RB5 -> LED　（1でOFF　0でON）
;	RA4 <- 回転センサー入力 (1で暗　0で明）
;	RB4 <- プッシュSW (1でOFF　0でON） 
;	RB1 -> RS232C送信
;	RB2 <- RS232C受信
;	RA3 -> SCLK
;	RA2 <-> SDA

;
;******************************************************

	LIST	P=PIC16F84A
	INCLUDE	"P16F84A.INC"

;******************************
;  変数レジスタ定義
;******************************

eeprom		equ	0CH	; eeprom bit buffer
bycnt		equ	0DH	; eeprom byte counter
addrl		equ	0EH	; eeprom address(low)
addrh		equ	0FH	; eeprom address(high)
datai		equ	10H	; eeprom data input
datao		equ	11H	; eeprom data output 1st byte
datao2		equ	12H	; eeprom data output 2nd byte
slave		equ	15H	; eeprom slave address
txbuf		equ	16H	; eeprom transmit buffer
count		equ	17H	; eeprom bit counter
bcount		equ	18H	; bcount

CNTa		equ	19H	; Time counter
CNTb		equ	1AH
CNTc		equ	1BH
CNTd		equ	1CH
CNTe		equ	1DH
CNTf		equ	1EH	; fは汎用

SENDT		equ	1FH		; ウェイト時間調整用
BITW		equ	20H		; ビット数
TXDATA		equ	21H		; 送信データ（８ビット)

DISBUF		equ	22H		;RSキャラクタ送信用


cyclecnt		equ	24H	;測定サイクルカウンター
tmcnth		equ	26H	;サイクル内タイムカウンター(10 or 20ms)上位
tmcntl		equ	27H	;サイクル内タイムカウンター(10 or 20ms)下位

adcnth		equ	28H	;書き込みアドレスカウンタ上位
adcntl		equ	29H	;書きこみアドレスカウンタ下位

plscnth		equ	2AH	; パルスカウンタ上位
plscntl		equ	2BH	; パルスカウンタ下位

;*******************************
;　ビット定義他
;*******************************

di		equ	7	;eeprom input bit
do		equ	6	;eeprom output bit
sdata		equ	2	;serial EE data line (port_a )
sclk		equ	3	;serial EE clock line (port_a)
ackf		equ	5	; acknowledge fail LED (port_b)

BTIME		equ	D'170'	; 9600bps @20MHz

	org	0

;********************
;　ポートセット、初期化
;********************

	bsf	STATUS, RP0
	movlw	b'00010010'	;RA set : port 1,4 for input, other output
	movwf	TRISA
	movlw	b'00010100'	;RB set : Port 2,4 for input 
	movwf	TRISB
	movlw	b'11101000'	; pullup off, clk=RA4, たち上がりエッジ, 
				; プリスケーラなし
	movwf	OPTION_REG
	bcf	STATUS, RP0

	movlw	b'00000000'
	movwf	PORTA		;
	movlw	b'00000010'
	movwf	PORTB		;RS232C初期化, LED off


; ■■■■■■■■■■■■■■■■■■■■
; テスト用サブルーチン
; ■■■■■■■■■■■■■■■■■■■■

	goto	MENU1
test1
	bcf	PORTB,5	; LED点灯
	call	TIM1S
	bsf	PORTB,5
	call	TIM1S
	goto	test1	

;*******************************
;　　メインルーチン
;*******************************

MENU1		;1秒間SWが押されたか監視、おされたら調整モードへ
		; その間はLEDが早く（100ms周期で）点滅

		movlw	0AH		; set 10
		movwf	CNTf

MENU2		MOVLW	0AH		; set 10
		MOVWF	CNTe
		bcf	PORTB, 5	; LED点灯

MENU3		CALL	TIME5M		;
		BTFSS	PORTB,4		; SWが1（off）だったらスキップ
		GOTO	SNSADJ		; onだったらセンサー調整モードへ		
		DECFSZ	CNTe,F
		GOTO	MENU3

		MOVLW	0AH		; set 10
		MOVWF	CNTe
		bsf	PORTB, 5	; LED消灯

MENU4		CALL	TIME5M		;
		BTFSS	PORTB,4		; SWが1（off）だったらスキップ
		GOTO	SNSADJ		; onだったらセンサー調整モードへ		
		DECFSZ	CNTe,F
		GOTO	MENU4

		decfsz	CNTf, f
		goto	MENU2

;*********　測定モード　********************

	bcf	PORTB, 5	; LED点灯

	MOVLW	13H		; set 19
	MOVWF	CNTf

T_LP9	MOVLW	64H		; set 100
	MOVWF	CNTe

	bcf	PORTB, 5	; LED点灯

T_LP10	call	TIME5M
	decfsz	CNTe, f
	goto	T_LP10

	MOVLW	64H		; set 100
	MOVWF	CNTe

	bsf	PORTB, 5	; LED消灯

T_LP11	call	TIME5M
	decfsz	CNTe, f
	goto	T_LP11

	DECFSZ	CNTf, F
	GOTO	T_LP9

	;*******19秒待った後(計20秒）測定開始*******

MEAMAIN0

	movlw	80H
	movwf	adcnth		; アドレス最上位bitはeeprom上で無視される
				; 32ｋbyte超えた時にオーバーフローするようにセット
	clrf	adcntl

	clrf	TMR0
	bcf	INTCON, T0IF	; タイマ0クリア　

MEAMAIN1
	movlw	1EH		; cyclecnt＝30
	movwf	cyclecnt		; 30回Gパルス測定、その後サーボパルス、回転を記録


MEAMAIN2
	movlw	0D9H		
	movwf	tmcnth
	movlw	0AFH
	movwf	tmcntl		; 10000カウント(10ms)+で0000Hになるように
				; 1カウント1us
				; カウント外stepが955（191us) : 10000-191= 9809カウントで0000
				; 65536-9809 = 55727 = D9AFH

	clrf	plscnth		; パルスカウンタのクリア
	clrf	plscntl

; ***  Gパルス計測開始　**********

Gsens0
	btfss	PORTA, 1
	goto	Gsens1		; パルスがlowになったらGsens1へ

	; パルスがハイなので待つ
	incf	tmcntl, f		; ワンサイクル2us
	incfsz	tmcntl, f		; 0になったらスキップ
	goto	tm1

	; 下位が0になった
	incfsz	tmcnth, f
	goto	tm2

	; 10ms 経過してしまった
	goto	Gsens4		; 仕方ないので書きこみ処理へ

tm1	; tmcntl減算、オーバーフローなし
	nop
	nop
tm2	goto	Gsens0

Gsens1
	btfsc	PORTA, 1
	goto	Gsens2		; パルスがhighになったらGsens2へ

	; パルスがローなので待つ
	incf	tmcntl, f		; ワンサイクル2us
	incfsz	tmcntl, f		; 0になったらスキップ
	goto	tm3

	; 下位が0になった
	incfsz	tmcnth, f
	goto	tm4

	; 10ms 経過してしまった
	goto	Gsens4		; 仕方ないので書きこみ処理へ

tm3	; tmcntl減算、オーバーフローなし
	nop
	nop
tm4	goto	Gsens1

Gsens2	;**** Gパルス計測開始 ****

	btfss	PORTA, 1
	goto	Gsens3		; パルスがlowになったらGsens3へ

	incf	plscntl, f		; ワンサイクル2us
	incfsz	plscntl, f		; 0になったらスキップ
	goto	tm5

	; 下位が0になった
	incfsz	plscnth, f
	goto	tm6

	; 65ms 経過してしまった
	goto	Gsens4		; 仕方ないので書きこみ処理へ

tm5	; tmcntl減算、オーバーフローなし
	nop
	nop
tm6	goto	Gsens2

Gsens3	;*** 計測後10ms経過まで待ち ***
	
	movf	plscntl, w
	addwf	tmcntl, f
	btfsc	STATUS, C
	incf	tmcnth, f
	movf	plscnth, w
	addwf	tmcnth, f
	btfsc	STATUS, C
	goto	Gsens4		; オーバーフローしたので書きこみ処理へ

Gsens31
	bsf	tmcntl, 0		; +1、必ず奇数になるように
	incfsz	tmcntl, f
	goto	tm8		; オーバーフローしなかったらtm8へ

	incfsz	tmcnth, f
	goto	tm9		; オーバーフローしなかったらtm9へ

	goto	Gsens4		; オーバーフローしたので書きこみ処理へ

tm8	nop
	nop
tm9	nop
	nop
	goto	Gsens31

Gsens4				; 書きこみ処理
	movf	adcnth, w		
	movwf	addrh
	movf	adcntl, w
	movwf	addrl
	movf	plscnth, w
	movwf	datao
	movf	plscntl, w
	movwf	datao2		

	call	EEPWT		; subroutine EEPWT=907steps 

	clrf	plscnth		
	clrf	plscntl

	incf	adcntl, f
	incfsz	adcntl, f		;アドレスカウンター下位がオーバーフローしたら次をスキップ
	goto	EEP3		;下位オーバーフローせず(6)
	incfsz	adcnth, f		;下位がオーバーフローしたので上位+1、さらにオーバーフローしたら次をスキップ
	goto	EEP4		;上位オーバーフローせず(8)

ENDLOOP			;上位もオーバーフロー
	bcf	PORTB,5		;LED点灯
	call	TIM1S		;
	bsf	PORTB,5		;LED消灯
	call	TIM1S
	goto	ENDLOOP	;無限ループ

EEP3	nop
	nop			; 		
EEP4
	nop
	nop
	nop
	nop
	decfsz	cyclecnt, f
	goto	MEAMAIN2	; 30回 X 10ms測定するまでループ
				; カウント外step 6+9+8+18+907+7 = 955= 191us
; *******　サーボパルス計測　***********

; *****　ここまででGパルス300ms　********

; *************　回転数記録　************
;			
;				カウント外ステップ =940steps = 188us
				; (33+907 = 940)
				; 10ms(50000steps)まで残り9812us(49060steps)
	nop
	nop
	movlw	0D9H		; 65536-9812 = 55724
	movwf	tmcnth		;  = 0D9ACH
	movlw	0ACH
	movwf	tmcntl

tm20	incf	tmcntl, f
	incfsz	tmcntl, f
	goto	tm21

	incfsz	tmcnth, f
	goto	tm22

	goto	RW1

tm21	nop
	nop
tm22	nop
	nop
	goto	tm20

RW1	movf	TMR0, W
	movwf	plscntl

	clrf	TMR0
	bcf	INTCON, T0IF	; タイマ0クリア

	movf	adcnth, w		
	movwf	addrh
	movf	adcntl, w
	movwf	addrl
	clrf	datao
	movf	plscntl, w
	movwf	datao2		

	call	EEPWT		; subroutine EEPWT=907steps 	

	clrf	plscnth		
	clrf	plscntl

	incf	adcntl, f
	incfsz	adcntl, f		;アドレスカウンター下位がオーバーフローしたら次をスキップ
	goto	EEP23		;下位オーバーフローせず(6)
	incfsz	adcnth, f		;下位がオーバーフローしたので上位+1、さらにオーバーフローしたら次をスキップ
	goto	EEP24		;上位オーバーフローせず(8)

ENDLOOP3			;上位もオーバーフロー
	bcf	PORTB,5		;LED点灯
	call	TIM1S		;
	bsf	PORTB,5		;LED消灯
	call	TIM1S
	goto	ENDLOOP3	;無限ループ

EEP23	nop
	nop			; 		
EEP24	goto	MEAMAIN1
	
	

; ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


;*********　センサー感度調整モード　************

SNSADJ		call	TIME5M		;5ms待ち
		btfss	PORTB, 4	;SWがおされていたら(0)戻る
		goto	SNSADJ

		call	TIME5M
		call	TIME5M
		call	TIME5M
		call	TIME5M
		call	TIME5M
		call	TIME5M

		btfss	PORTB, 4
		goto	SNSADJ		

SENSOR2	btfss	PORTB, 4	;スイッチが押されていなかったら(1)スキップ
		goto	DATTMT		;おされたらデータ送信モードへ

		BTFSS	PORTA,4		;現在センサが1(暗）だったら次をスキップ
		GOTO	SENSOR3
		BSF	PORTB, 5		;LED消灯
		GOTO	SENSOR2
SENSOR3	BCF	PORTB, 5		;LED点灯
		GOTO	SENSOR2

;*********　データ送信モード　**********

DATTMT
	nop
	bsf	PORTB, 1		;232C初期化
	call	TIM1S

TMT0	btfsc	PORTB, 2
	goto	TMT0

	clrf	addrl
	movlw	80H
	movwf	addrh


TMT1	call	EEPRD		; datai に読み出し

	movlw	0F0H
	andwf	datai ,w		;datai上位をWに抽出
	movwf	DISBUF
	swapf	DISBUF, f
	movlw	0AH
	subwf	DISBUF,w		;DISBUF - 0AH ...DISBUF<=09HのときC=0
	btfsc	STATUS, C	;DISBUF<09Hのとき次をスキップ
	goto	DISB1
	movlw	30H		;DISBUF <= 09H
	addwf	DISBUF, f	
	goto	DISB2
DISB1	movlw	37H		;DISBUF => 0AH
	addwf	DISBUF, f
DISB2
	movf	DISBUF, w
	movwf	TXDATA
	call	RSTRANS	;RS232C出力

	movlw	0FH
	andwf	datai ,w		;datai下位をWに抽出
	movwf	DISBUF
	movlw	0AH
	subwf	DISBUF,w		;DISBUF - 0AH ...DISBUF<=09HのときC=0
	btfsc	STATUS, C	;DISBUF<09Hのとき次をスキップ
	goto	DISB3
	movlw	30H		;DISBUF <= 09H
	addwf	DISBUF, f	
	goto	DISB4
DISB3	movlw	37H		;DISBUF => 0AH
	addwf	DISBUF, f
DISB4
	movf	DISBUF, w
	movwf	TXDATA
	call	RSTRANS	;RS232C出力

	btfss	addrl, 0		;アドレス下位の0ビット目が1の場合（奇数アドレス）次をスキップ
	goto	TMT2		;偶数アドレスの場合CRを出力せずに次のアドレスへ

				; 改行はCR(0DH)+LF(0AH)
	movlw	0DH		; CR
	movwf	TXDATA
	call	RSTRANS	;RS232C出力
	movlw	0AH		; LF
	movwf	TXDATA
	call	RSTRANS	;RS232C出力

TMT2	incfsz	addrl, f		;アドレス下位+1、オーバーフローで次をスキップ
	goto	TMT1		;オーバーフローなしでループ
	incfsz	addrh, f		;アドレス上位+1、オーバーフローで次をスキップ
	goto	TMT1		;オーバーフローなしでループ

TMT3				;addrがオーバーフロー
	bcf	PORTB, 5		;LED点灯
	call	TIM1S		;
	bsf	PORTB, 5		;LED消灯
	call	TIM1S
	goto	TMT3		;無限ループ



;****************************************
;　write サブルーチン(4byte)
;	アドレス : addrh, addrl
;	データ : datao, datao2, datao3, datao4
;****************************************

EEPWT	movlw	b'10100000'	;スレーブアドレス=0, write mode(1)
	movwf	slave

	call	BSTART		;generate start bit	;(25)

;****** data transmit **********

	movf	slave,w		; move slave address(26)
	movwf	txbuf		; into transmit buffer
	call	TX		; and send it        			;
	movf	addrh,w		; move word address(h)
	movwf	txbuf		; into transmit buffer
	call	TX		; and send it
	movf	addrl,w		; move word address(l)
	movwf	txbuf		; into transmit buffer
	call	TX		; and send it         
	movf	datao,w		; move data byte(1st)
	movwf	txbuf		; to tranmit buffer
	call	TX		; and transmit it
	movf	datao2,w		; move data byte(2nd)
	movwf	txbuf		; to tranmit buffer
	call	TX		; and transmit it		; 45+(169*5)=890

;****** stop bit 発生 *******

	bcf	PORTA, sdata	; make sure data line is low
	nop
	nop
	nop
	bsf	PORTA, sclk	; set clock high
	nop
	nop    
	nop
	bsf	PORTA, sdata	; data goes high while clock high
				; for stop bit
	nop			; (900)
	nop
	bcf	PORTA, sclk	; set clock low again
	nop
	nop
	nop

; **** End of stop bit ****

	retlw	0		; (907)


;*******************************
;　read サブルーチン
;	アドレス : addrh, addrl
;	データ : datai
;*******************************

EEPRD	
	call	BSTART		;generate start bit

;****** data transmit & recieve **********

	movlw	b'10100000'	; get slave address (write mode)
	movwf	txbuf		; into transmit buffer
	call	TX		; and send it        
	movf	addrh,w		; move word address(h)
	movwf	txbuf		; into transmit buffer
	call	TX		; and send it
	movf	addrl,w		; move word address(l)
	movwf	txbuf		; into transmit buffer
	call	TX		; and send it

	call	BSTART		;generate start bit

	movlw	b'10100001'	; get slave address (read mode)
	movwf	txbuf		; into transmit buffer
	call	TX		; and send it  

	call	RX

;****** stop bit 発生 *******

	bcf	PORTA, sdata	; make sure data line is low
	nop
	nop
	nop
	bsf	PORTA, sclk	; set clock high
	nop
	nop    
	nop
	bsf	PORTA, sdata	; data goes high while clock high
				; for stop bit
	nop
	nop
	bcf	PORTA, sclk	; set clock low again
	nop
	nop
	nop

; **** End of stop bit ****

	retlw	0

; **********************************
; ****** Transmit data subroutine *******
; **********************************
;
TX
	movlw	.8		;(1)
	movwf	count		; set the #bits to 8
;
TXLP
	bcf	eeprom,do	; assume bit out is low
	btfsc	txbuf, 7		; is bit out really low?
	bsf	eeprom,do	; otherwise data bit =1

;** bit out ***
	btfss	eeprom,do	; check for state of data bit to xmit
	goto	bitlow		; 
	bsf	PORTA, sdata	; set data line high 
	goto	clkout		; go toggle the clock

bitlow	bcf	PORTA, sdata	; output a low bit     
	nop			;Time adjustment
clkout	bsf	PORTA, sclk	; set clock line high
	nop
	nop
	nop
	nop
	bcf	PORTA, sclk	; return clock line low
;** End of bit out ***

	rlf	txbuf, F		; rotate txbuf left
	decfsz	count, F		; 8 bits done?
	goto	TXLP		; no - go again

;** bit in ***
	bsf	eeprom,di		; assume input bit is high

	bsf	STATUS, RP0
	movlw	b'00010110'	; make sdata an input line
	movwf	TRISA
	bcf	STATUS, RP0

	bsf	PORTA, sclk	; set clock line high
	nop			; just sit here a sec
	nop
	nop
	nop
	nop                    ;
	btfss	PORTA, sdata   	; read the data bit
	bcf	eeprom, di	; input bit was low
	bcf	PORTA,  sclk    	; set clock line low
	nop

	bsf	STATUS, RP0
	movlw	b'00010010'	; make sdata an output line
	movwf	TRISA
	bcf	STATUS, RP0
;** End of bit in ***

	nop
	btfsc	eeprom,di		; check ack bit
	bsf	PORTB, ackf	; set acknowledge fail LED if no ack
	retlw	0

;*******************************
;**** Receive data routine *********
;*******************************

RX
	clrf	datai		; clear input buffer
	movlw	.8		; set # bits to 8
	movwf	count
	bcf	STATUS,0		; make sure carry bit is low
RXLP	rlf	datai, F		; rotate datai 1 bit left

	;** bit in ***
	bsf	eeprom,di		; assume input bit is high

	bsf	STATUS, RP0
	movlw	b'00010110'	; make sdata an input line
	movwf	TRISA
	bcf	STATUS, RP0

	bsf	PORTA, sclk	; set clock line high
	nop			; just sit here a sec
	nop
	nop
	nop
	nop                    ;
	btfss	PORTA, sdata   	; read the data bit
	bcf	eeprom, di	; input bit was low
	bcf	PORTA,  sclk    	; set clock line low
	nop

	bsf	STATUS, RP0
	movlw	b'00010010'	; make sdata an input line
	movwf	TRISA
	bcf	STATUS, RP0
	;** End of bit in ***

	btfsc	eeprom,di
	bsf	datai,0		 ; set bit 0 if necessary
	decfsz	count, F		; 8 bits done?
	goto	RXLP		; no, do another
	bsf	eeprom,do	; set ack bit = 1

	;** bit out ***
	btfss	eeprom,do	; check for state of data bit to xmit
	goto	bitlow2		; 
	bsf	PORTA, sdata	; set data line high 
	goto	clkout2		; go toggle the clock

bitlow2	bcf	PORTA, sdata	; output a low bit     
	nop			;Time adjustment
clkout2	bsf	PORTA, sclk	; set clock line high
	nop
	nop
	nop
	nop
	bcf	PORTA, sclk	; return clock line low
	;** End of bit out ***

	retlw   0

;****** start bit Subroutine (21steps) *******

BSTART	bsf	PORTA, sdata	; make sure data is high
	nop
	bcf	PORTA, sclk	; make sure clock is low
	nop
	bsf	PORTA, sclk	; set clock high
	nop
	nop
	nop
	nop
	nop
	bcf	PORTA, sdata	; data line goes low during
				; high clock for start bit
	nop
	nop
	nop
	nop
	nop			; timing adjustment
	bcf	PORTA, sclk	; start clock train
	nop
	nop

	retlw	0

;****** End of start bit ********

;************************************************
;*            RS232C transmit routine                               *
;*               input TXDATA                                           *
;************************************************

RSTRANS
		BCF	PORTB, 1

		MOVLW	BTIME
		MOVWF	SENDT

TRANS10		DECFSZ	SENDT,F
		GOTO	TRANS10
		MOVLW	08H
		MOVWF	BITW
		NOP

TRANS0		RRF	TXDATA,F
		NOP

		BTFSS	STATUS,C	; データ出力（ＬＳＢから）
		BCF	PORTB, 1
		BTFSC	STATUS,C
		BSF	PORTB, 1

		MOVLW	BTIME
		MOVWF	SENDT
		
TRANS11		DECFSZ	SENDT,F
		GOTO	TRANS11

		DECFSZ	BITW,F
		GOTO	TRANS0

		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		BSF	PORTB, 1
		MOVLW	BTIME
		MOVWF	SENDT

TRANS12		DECFSZ	SENDT,F		; ＳＴＯＰビット分ウェイト
		GOTO	TRANS12

		RETLW	00H



;*********************************
;  タイマーサブルーチン
;	TIME10  :10usec
;	TIME100 :100usec
;	TIME1M  :1msec
;	TIME5M  :5msec
;	TIM1S   :1sec
;*********************************

TIME100					;100usec
		MOVLW	9H		
		MOVWF	CNTa		
T_LP1		CALL	TIME10		;2+(2+50+3)*9-1=496		
		DECFSZ	CNTa,F
		GOTO	T_LP1
		NOP
		NOP
		RETURN			;500*0.2=100usec

TIME10					;10usec
		MOVLW	0FH 		
		MOVWF	CNTb		
T_LP2		DECFSZ	CNTb,F		;2+3*15-1=46		
		GOTO	T_LP2
		NOP
		NOP		
		RETURN			;46+4=50, 50*0.2=10usec

TIME1M					;1msec (approx.)
		MOVLW	0AH
		MOVWF	CNTc
T_LP3		CALL	TIME100		;2+(500+5)*10-1=5051
		DECFSZ	CNTc,F
		GOTO	T_LP3
		RETURN			;5053 (=1.0106msec)

TIME5M					;5msec(about)
		MOVLW	32H
		MOVWF	CNTd
T_LP4		CALL	TIME100		;2+(500+5)*50-1=25251
		DECFSZ	CNTd,F
		GOTO	T_LP4
		RETURN			;25253 (=5050.6usec)

TIM1S
		MOVLW	0C8H		;set 200
		MOVWF	CNTe
T_LP5		CALL	TIME5M		;2+(25253+5)*200-1=5051601
		DECFSZ	CNTe,F
		GOTO	T_LP5
		RETURN			;5051603 (=1,010,320.6usec)

		END


