;電子シャッター PIC16F84A Ver. 0.4 |
;SH16F844.ASM |
;RA4 signal input, RB4 shutter
output , クロック4MHz |
|
|
|
|
LIST P=PIC16F84A |
|
|
INCLUDE "P16F84A.INC" |
|
|
__CONFIG _HS_OSC & _PWRTE_ON & _CP_OFF & _WDT_OFF |
|
|
|
|
CNT1 |
EQU |
0CH |
;400msec wait timer に使用 |
CNT2 |
EQU |
0DH |
;20msec wait timer に使用 |
CNT3 |
EQU |
0EH |
;パルスチェックに使用 |
|
|
|
|
|
ORG |
0 |
|
|
|
|
|
MAIN |
|
|
|
|
BSF |
STATUS,PR0 |
;バンク1に切り替え |
|
CLRF |
TRISB |
ポートBをすべて出力にセット |
|
BCF |
STATUS,PR0 |
バンク0に戻る |
|
BCF |
PORTB,4 |
RB4 を Low |
|
MOVLW |
0H |
|
|
MOVWF |
CNT3 |
;CNT3 をクリア |
|
|
|
|
;メインループ |
|
|
|
LOOP |
|
|
|
TP1 |
BTFSS |
PORTA,4 |
;RA4 が High
の場合次の命令をスキップ |
|
GOTO |
TP1 |
|
|
|
|
|
TP2 |
BTFSC |
PORTA,4 |
;RA4 が 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 |
PORTA,4 |
;RA4 が High
の場合次の命令をスキップ |
|
GOTO |
CHECK |
|
|
BCF |
PORTB,4 |
;RB4 を Low |
|
MOVLW |
0H |
|
|
MOVWF |
CNT3 |
;CNT3 をクリア |
|
GOTO |
LOOP |
|
|
|
|
|
CHECK |
BTFSC |
CNT3,0 |
;CNT3 が 0 なら次の命令をスキップ |
|
GOTO |
SHUTTER |
|
|
INCF |
CNT3,F |
;CNT3 をインクリメント |
|
GOTO |
LOOP |
|
|
|
|
|
SHUTTER |
|
|
|
|
BSF |
PORTB,4 |
;RB4 を High |
|
GOTO |
LOOP |
|
|
|
|
|
;400msec wait timer |
WAIT400 |
|
|
|
|
MOVLW |
064H |
;100 |
|
MOVWF |
CNT1 |
|
TIMLP1 |
NOP |
|
|
|
DECFSZ |
CNT1,F |
|
|
GOTO |
TIMLP1 |
|
|
RETURN |
|
|
|
|
|
|
;20msec wait timer |
WAIT020 |
|
|
|
|
MOVLW |
07H |
;7 |
|
MOVWF |
CNT2 |
|
TIMLP2 |
DECFSZ |
CNT2,F |
|
|
GOTO |
TIMLP2 |
|
|
RETURN |
|
|
|
|
|
|
|
END |
|
|