;電子シャッター
PIC16F84A @4MHz Ver. 0.2 |
;sh16f842.asm |
|
|
LIST |
P-PIC16F84A |
|
|
INCLUDE |
"P16F84A.INC" |
|
|
__CONFIG _HS_OSC & _PWRTE_ON
& _CP_OFF & _WDT_OFF |
|
|
|
;コンフィギュレーションビットをソースの中に記述 |
|
|
|
;4MHz セラロックを使用するので _HS_OSC
を指定 |
|
|
|
;パワー ON
リセットを有効にするので _PWRTE_ON を指定 |
|
|
|
;コードプロテクトを無効にするので
_CP_OFF を指定 |
|
|
|
;ウォッチドッグタイマーを無効にするので
_WDT_OFF を指定 |
|
|
|
|
CNT1 |
EQU |
0CH |
;0.4msec timer で使用 |
CNT2 |
EQU |
0DH |
;1600msc のパルス幅が 4
回連続したか確認用 |
|
|
|
|
|
ORG |
0 |
|
|
|
|
|
MAIN |
|
|
|
|
BSF |
STATUS, RP0 |
;バンク 1 に切り替え |
|
CLRF |
TRISB |
;PORTB をすべて出力にセット |
|
BCF |
STATUS, RP0 |
;バンク 0 に戻る |
|
BCF |
PORTB, 4 |
;RB4 を Low に(SHUTTER出力用) |
|
MOVLW |
0H |
|
|
MOVWF |
CNT2 |
;CNT2 をクリア(念のため) |
|
|
|
|
;メインループ |
|
|
|
LOOP |
|
|
|
TP1 |
|
|
|
|
BTFSS |
PORTA, 4 |
;RA4 が High なら次をスキップ |
|
GOTO |
TP1 |
|
TP2 |
|
|
|
|
BTFSC |
PORTA, 4 |
;RA4 が Low なら次をスキップ |
|
GOTO |
TP2 |
|
TP3 |
|
|
;1600msec 待ち |
|
CALL |
WAIT04 |
|
|
CALL |
WAIT04 |
|
|
CALL |
WAIT04 |
|
|
CALL |
WAIT04 |
|
TP4 |
|
|
|
|
BTFSS |
PORTA, 4 |
;RA4 が Low なら次へ |
|
GOTO |
CHECK |
|
|
MOVLW |
0H |
|
|
MOVWF |
CNT2 |
;CNT4 レジスタを 0 クリア |
|
GOTO |
LOOP |
|
|
|
|
|
CHECK |
|
|
|
|
BTFSC |
CNT2, 2 |
;CNT2 が 4 でなければ次をスキップ |
|
GOTO |
SHUTTER |
|
|
INCF |
CNT2, F |
;CNT2 をインクリメント |
|
GOTO |
LOOP |
|
|
|
|
|
SHUTTER |
|
|
|
|
BSF |
PORTB, 4 |
;RB4 を High |
|
GOTO |
LOOP |
|
|
|
|
|
;0.4msec timer |
|
|
|
WAIT04 |
|
|
|
|
MOVLW |
064H |
;100 |
|
MOVWF |
CNT1 |
|
TIMLP2 |
|
|
|
|
NOP |
|
|
|
DECFSZ |
CNT1, F |
|
|
GOTO |
TIMLP2 |
|
|
RETURN |
|
|
|
|
|
|
|
END |
|
|