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