;電子シャッター 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 |
|
|