| ;電子シャッター PIC12C509A Ver. 0.4 | |||
| ;SH12C509.ASM | |||
| ;GP3 signal input, GP2 shutter output | |||
| LIST P=PIC12C509A | |||
| INCLUDE "P12C509A.INC" | |||
| __CONFIG _MCLRE_OFF & _CP_OFF & WDT_OFF & IntRC_OSC | |||
| CNT1 | EQU | 07H | ;400msec wait timer に使用 |
| CNT2 | EQU | 08H | ;20msec wait timer に使用 |
| CNT3 | EQU | 09H | ;パルスチェックに使用 |
| ORG | 0 | ||
| MAIN | |||
| MOVLW | 09FH | ;1001 1111 | |
| OPTION | ;OPTION レジスタの設定 | ||
| ;bit7=1 ディセイブル ピン変化によるウェィクアップ(GP0,GP1,GP3) 不使用 | |||
| ;bit6=0 イネーブル 弱プルアップ(GP0,GP1,GP3) 使用 | |||
| ;bit5=0 イネーブル タイマ 0 クロックソース選択ビット 内部命令サイクルクロックを使用 | |||
| ;bit4=1 タイマ 0 ソースエッジ選択ビット High->Low 今回使わないのでどちらでもいい | |||
| ;bit3=1 プリスケーラ割り当てビット 今回 WDT も TMR0 も使わないのでどちらでもいい | |||
| ;bit2-0=111 プリスケーラ・レート選択ビット 今回使わないのでどちらでもいい | |||
| MOVLW | 08H | ;0000 1000 | |
| TRIS | GPIO | ;GP3 を入力に設定 | |
| MOVLW | 00H | ||
| MOVWF | GPIO | ||
| ;メインループ | |||
| LOOP | |||
| TP1 | BTFSS | GPIO,3 | ;GP3 が High の場合次の命令をスキップ |
| GOTO | TP1 | ||
| TP2 | BTFSC | GPIO,3 | ;GP3 が Low の場合次の命令をスキップ |
| GOTO | TP2 | ||
| TP3 | CALL | WAIT400 | ;400msec |
| CALL | WAIT400 | ;800msec | |
| CALL | WAIT400 | ;1200msec | |
| CALL | WAIT400 | ;1600msec | |
| BTFSS | CNT3,0 | ;CNT3 が 0 でない場合次の命令をスキップ | |
| CALL | WAIT020 | ;1620msec | |
| TP4 | BTFSS | GPIO,3 | ;GP3 が High の場合次の命令をスキップ |
| GOTO | CHECK | ||
| BCF | GPIO,2 | ;GP2 を Low | |
| MOVLW | 0H | ||
| MOVWF | CNT3 | ;CNT3 をクリア | |
| GOTO | LOOP | ||
| CHECK | BTFSC | CNT3,0 | ;CNT3 が 0 の場合次の命令をスキップ |
| GOTO | SHUTTER | ||
| INCF | CNT3,F | ;CNT3 をインクリメント | |
| GOTO | LOOP | ||
| SHUTTER | |||
| BSF | GPIO,2 | ;GP2 を High | |
| GOTO | LOOP | ||
| ;400msec wait timer | |||
| WAIT400 | |||
| MOVLW | 064H | ;100 | |
| MOVWF | CNT1 | ||
| TIMLP1 | NOP | ||
| DECFSZ | CNT1,F | ||
| GOTO | TIMLP1 | ||
| RETLW | 0 | ||
| ;20msec wait timer | |||
| WAIT020 | |||
| MOVLW | 07H | ;7 | |
| MOVWF | CNT2 | ||
| TIMLP2 | DECFSZ | CNT2,F | |
| GOTO | TIMLP2 | ||
| RETLW | 0 | ||
| END | |||