list p=12c509 include __config _MCLRE_OFF & _CP_OFF & _WDT_OFF & _IntRC_OSC WAIT1 EQU 07H RESET GOTO START ORG 04H START MOVLW 09FH OPTION MOVLW 08H TRIS GPIO SETUP MOVLW 00H MOVWF GPIO ;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 ;400マイクロsec待つ CALL W100U CALL W100U CALL W100U CALL W100U ;1200マイクロ以下なら出力1 BTFSS GPIO, 3 GOTO OUT1 ;300マイクロsec待つ CALL W100U CALL W100U CALL W100U ;1500マイクロ以下なら出力2 BTFSS GPIO, 3 GOTO OUT2 ;100マイクロsec待つ CALL W100U ;1600マイクロ以下なら出力3 BTFSS GPIO, 3 GOTO OUT3 ;300マイクロsec待つ CALL W100U CALL W100U CALL W100U ;1900マイクロ以下なら出力4 BTFSS GPIO, 3 GOTO OUT4 ;400マイクロsec待つ CALL W100U CALL W100U ;1900マイクロ以上なら出力5 GOTO OUT5 ;出力のテーブル OUT1 MOVLW 01H MOVWF GPIO GOTO LOOP1 OUT2 MOVLW 02H MOVWF GPIO GOTO LOOP1 OUT3 MOVLW 04H MOVWF GPIO GOTO LOOP1 OUT4 MOVLW 10H MOVWF GPIO GOTO LOOP1 OUT5 MOVLW 20H MOVWF GPIO GOTO LOOP1 ;100マイクロsecのウエイトルーチン W100U MOVLW 17H MOVWF WAIT1 W1 NOP DECFSZ WAIT1, F GOTO W1 NOP NOP NOP RETLW 00H END