;shutter1.asm |
|
|
|
|
|
LIST |
P=12C509 |
|
|
INCLUDE |
<P12C509.INC> |
|
|
|
|
;変数のレジスタへの割り当て設定 |
WAIT1 |
EQU |
07H |
;07H 〜 1FH とバンク切り替えにより 30H 〜 3FHが |
|
|
|
;汎用レジスタとして使える (25 + 16) @12C509 |
|
|
|
|
RESET |
|
|
|
|
GOTO |
START |
;ラベル START へジャンプ |
|
ORG |
04H |
|
|
|
|
|
START |
|
|
|
|
MOVLW |
09FH |
;1001 1111 を W レジスタにロード |
|
OPTION |
|
;W レジスタの内容を OPTION レジスタに転送 |
|
|
|
;bit 7: ウェイクアップ(GP0,GP1,GP3) = Disable |
|
|
|
;bit 6: 弱プルアップ(GP0,GP1,GP3) = Enable |
|
|
|
;bit 5: タイマ 0 クロックソース選択ビット =
内部 |
|
|
|
;bit 4: タイマ 0 ソースエッジ選択ビット = High
から Low |
|
|
|
;bit 3: プリスケーラ割り当てビット = WDT
へ割り当て |
|
|
|
;bit 2-0: プリスケーラ・レート選択ビット |
|
|
|
;以上マニュアル記載 今のところよくわからない |
|
|
|
;設定しないと 1111 1111 に初期設定されている |
|
MOVLW |
08H |
;0000 1000 を W レジスタにロード |
|
TRIS |
GPIO |
;TRIS レジスタに書き込んで GP3 つまり |
|
|
|
4 PIN を入力に設定 |
|
|
|
|
SETUP |
|
|
|
|
MOVLW |
00H |
;0000 0000 を W レジスターにロード |
|
MOVWF |
GPIO |
;GPIO レジスタをクリア |
|
|
|
|
;100μsec 以上の Low
があるかチェック
(最初のパルスはここで取り込みを拒否) |
LOOP1 |
|
|
|
|
BTFSC |
GPIO, 3 |
;GP3 が 0 なら次をスキップ |
|
GOTO |
LOOP1 |
;GP3 が 1 なら LOOP1 へ |
|
CALL |
W100U |
;サブルーチンコール |
|
BTFSC |
GPIO, 3 |
GP3 が 0 なら次をスキップ |
|
GOTO |
LOOP1 |
;1 なら LOOP1 へ |
|
|
|
|
;パルスの立ち上がり待ち (次の立ち上がりまでここで待機) |
CHECK1 |
|
|
|
|
BTFSS |
GPIO, 3 |
;GP3 が 1 なら次をスキップ |
|
GOTO |
CHECK1 |
;GP3 が 0 なら CHECK1 へ |
|
|
|
|
;800μsec 待つ (パルスが立ち上がったら
800μsec カウント) |
|
CALL |
W100U |
;サブルーチンコール |
|
CALL |
W100U |
|
|
CALL |
W100U |
|
|
CALL |
W100U |
|
|
CALL |
W100U |
|
|
CALL |
W100U |
|
|
CALL |
W100U |
|
|
CALL |
W100U |
|
|
|
|
|
;High を確認 (立ち上がりパルスがまだあるかチェックしてなければ戻る) |
|
BTFSS |
GPIO, 3 |
;GP3 が 1 なら次をスキップ |
|
GOTO |
CHECK1 |
;GP3 が 0 なら CHECK1 へ |
|
|
|
|
;1100μsec 待つ |
|
CALL |
W100U |
;サブルーチンコール |
|
CALL |
W100U |
|
|
CALL |
W100U |
|
|
CALL |
W100U |
|
|
CALL |
W100U |
|
|
CALL |
W100U |
|
|
CALL |
W100U |
|
|
CALL |
W100U |
|
|
CALL |
W100U |
|
|
CALL |
W100U |
|
|
CALL |
W100U |
|
|
|
|
|
;1900μsec なら OUT1900 へ |
|
BTFSS |
GPIO, 3 |
;GP3 が 1 なら次をスキップ |
|
GOTO |
LOOP1 |
;GP3 が 0 なら LOOP1 へ |
|
|
|
|
;出力 |
|
|
|
OUT1900 |
|
|
|
|
MOVLW |
04H |
;000 0100 を W レジスタにロード |
|
MOVWF |
GPIO |
;GP4 を High に |
|
GOTO |
LOOP1 |
|
|
|
|
|
;100μsec のウエイトルーチン |
W100U |
|
|
|
|
MOVLW |
17H |
;17H(23) を W レジスタにロード |
|
MOVWF |
WAIT1 |
;W レジスタの内容を WAIT1 レジスタに格納 |
W1 |
NOP |
|
|
|
DECFSZ |
WAIT1, F |
;WAIT1 - 1 を WAIT1 に、WAIT1 = 0
なら次をスキップ |
|
GOTO |
W1 |
;WAIT1 が 1 なら W1 へ |
|
NOP |
|
|
|
NOP |
|
|
|
NOP |
|
|
|
RETLW |
00H |
;W レジスタに 00H をセットしてリターン |
|
|
|
|
|
END |
|
|