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