;--------------------------------------------------------------------- ; モバイルバッテリのauto power offを解除する ; 定期的に負荷をオンにすることでモバイルバッテリを騙す ; ; 2023.03.11 naka ; 1. I/Oポート ; ; (1). 出力ポート ; GP0: 負荷をオンオフするFETに繋ぐ ; GP1: 時間設定を読むときにHighにする ; (2). 入力ポート ; GP2: 時間設定B dipスイッチ(active low) ; GP3: 時間設定A dipスイッチ(active low) ; ; 2. 時間設定 ; ; A B : ; 0 0 : 30秒 ; 0 1 : 60秒 ; 1 0 : 90秒 ; 1 1 : 120秒 ; ; 3. 動作 ; (1) 電源投入時に時間設定を読む ; (2) 0.5秒間負荷をオンにする ; (3) 設定時間待つ ; (4) (2)に戻る ;--------------------------------------------------------------------- LIST P=PIC10F222 INCLUDE "P10F222.INC" __CONFIG _MCLRE_OFF & _WDT_OFF & _IOFSCS_4MHZ & _MCPU_OFF ;--------------------------------------------------------------------- ; 変数レジスタの定義 ;--------------------------------------------------------------------- CNT1 EQU 09H ; WAIT用カウンタ CNT2 EQU 0AH ; WAIT用カウンタ SW EQU 0BH ; SW状態 TIME EQU 0CH ; 設定時間(秒) SECCNT EQU 0DH ; カウントダウン(秒) ;--------------------------------------------------------------------- ; リセット・割り込み ;--------------------------------------------------------------------- ORG 00H ; リセット時の飛び込み先(本当は1FFH) RESET ;--------------------------------------------------------------------- ; 初期設定 ;--------------------------------------------------------------------- MAIN MOVWF OSCCAL ; 内部OSCのキャリブレーションデータ CLRF ADCON0 ; GP0-1をデジタルI/Oに設定 MOVLW B'00001100' TRIS GPIO ; I/Oを設定 ; CALL CHKTIM ; 時間設定を読む MOVWF TIME MAINLP ; 負荷パルスを発生 MOVLW H'01' MOVWF GPIO ; オン CALL WAIT05S ; 0.5秒待つ MOVLW H'00' MOVWF GPIO ; オフ ; ; カウントダウン MOVF TIME,W MOVWF SECCNT CNTDWNLP CALL WAIT1S DECFSZ SECCNT,F GOTO CNTDWNLP ; GOTO MAINLP ; ;--------------------------------------------------------------------- ; 時間設定を読む ;--------------------------------------------------------------------- CHKTIM MOVLW H'02' ; GP1オン MOVWF GPIO MOVF GPIO,W CLRF GPIO ; GP1オフ MOVWF SW RRF SW,F RRF SW,W ANDLW H'03' MOVWF SW ; MOVLW H'00' SUBWF SW,W BTFSC STATUS,Z RETLW D'30' ; MOVLW H'01' SUBWF SW,W BTFSC STATUS,Z RETLW D'60' ; MOVLW H'02' SUBWF SW,W BTFSC STATUS,Z RETLW D'90' RETLW D'120' ;--------------------------------------------------------------------- ; waitルーチン ;--------------------------------------------------------------------- WAIT1MS ;1ミリ秒(998usec) CALLと合わせて1.000ms MOVLW D'248' ;1cycle MOVWF CNT1 ;1cycle W1MSLP NOP ;1cycle*248 DECFSZ CNT1,F ;1cycle*247+2cycle GOTO W1MSLP ;2cycle*247 GOTO $+1 ;2cycle NOP ;1cycle RETLW D'0' ;2cycle ; WAIT05S ; 約0.5秒 MOVLW D'250' ;1cycle MOVWF CNT2 ;1cycle WAIT05SLP CALL WAIT1MS CALL WAIT1MS DECFSZ CNT2,F GOTO WAIT05SLP RETURN WAIT1S ; 約1秒 MOVLW D'250' ;1cycle MOVWF CNT2 ;1cycle WAIT1SLP CALL WAIT1MS CALL WAIT1MS CALL WAIT1MS CALL WAIT1MS DECFSZ CNT2,F GOTO WAIT1SLP RETURN ;--------------------------------------------------------------------- END ;--------------------------------------------------------------------- ; 終わり ;---------------------------------------------------------------------