;+を1番ピンに−を8番ピンに信号線を4番ピンに接続 ;フルハイ〜ニュートラルまでの間(1500μsec以下)6番ピンをHi ;ニュートラル〜ブレーキまでの間(1500μsec以上)5番ピンをHi LIST P=PIC12F509 ;プロセッサの種類を指定 INCLUDE "P12F509.inc" ;プロセッサのインクルードファイルを指定 __config _MCLRE_OFF & _CP_OFF & _WDT_OFF & _IntRC_OSC ;外部リセットを使用しない ;コードプロテクトしない ;ウォッチドッグタイマを使用しない ;内蔵クロックを使用する WAIT1 EQU 07H RESET GOTO START ORG 04H START MOVLW 09FH OPTION MOVLW 08H ;B'0000 1000' TRIS GPIO ;2,3,5,6,7番ピンを出力。4番ピンを入力にする。 SETUP MOVLW 00H ;B'0000 0000' MOVWF GPIO ;出力をすべてLoにする ;################ここからプログラムの開始################# ;100マイクロsec以上のLOがあるかチェック LOOP1 BTFSC GPIO, 3 GOTO LOOP1 CALL W100U BTFSC GPIO, 3 GOTO LOOP1 ;パルスの立ち上がり待ち CHECK1 BTFSS GPIO, 3 GOTO CHECK1 ;800マイクロsec待つ CALL W100U CALL W100U CALL W100U CALL W100U CALL W100U CALL W100U CALL W100U CALL W100U ;HIでなければ異常なのでLOOP1に戻る BTFSS GPIO, 3 GOTO CHECK1 ;700マイクロsec待つ CALL W100U CALL W100U CALL W100U CALL W100U CALL W100U CALL W100U CALL W100U ;1500マイクロ以下なら出力1 BTFSS GPIO, 3 GOTO OUT1 ;1500マイクロ以上なら出力2 GOTO OUT2 ;出力のテーブル OUT1 MOVLW 02H MOVWF GPIO GOTO LOOP1 OUT2 MOVLW 04H MOVWF GPIO GOTO LOOP1 ;100マイクロsecのウエイトルーチン W100U MOVLW 17H MOVWF WAIT1 W1 NOP DECFSZ WAIT1, F GOTO W1 NOP NOP NOP RETLW 00H END