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