ローエンドな私とマイコン

PIC10F200 ピン変化ウエイクアップ利用法


30年12月6日
ベースラインでもう1つ有効な機能にSLEEPからのピン変化ウェイクアップがあります。

入力ピンの変化でSLEEPからぬける機能です。
SLEEP命令の次はスリープ状態になります。
SLEEPする前にGPIOの入力ピンを読み込むことが必要です。
bcf GPIO,bcf GPIO,movwf GPIO命令でGPIOレジに入力ピン状態を保存する必要があり、
これをしないでSLEEPすると、直ぐにウェイクアップするそうです。
その後入力ピンの変化によりPCLは0XFFよりスタートします。
OPTIONだけはリセットされるので再設定が必要です。
ピンチェンジウエイクアップの検出はSTATUSのGPWUFが1の時です。
配線は
GPIO2にLEDを接続、GPIO0に1MΩでプルアップ、10uFでプルダウン

サンプルプログラム
;PIC10F200 4MHz
;Pin Change Weak Up TEST
;2018/12/6

#include         "p10F200.inc"
__CONFIG       _WDTE_OFF & _CP_OFF & _MCLRE_ON

;***** 変数宣言
   cblock  0x10
   i
   buf
   endc

;***** プログラム
RES_VECT  CODE    0x0000; processor reset vector
   movwf   OSCCAL; ***** 初期化
   movlw   b'01011111';GPWU有効
   option
   movlw   b'1000'
   tris    GPIO
   btfsc   STATUS,GPWUF
   goto    wakw_up
; initl
   clrf     GPIO
   clrf     buf
wake_up
   movlw  b'100'
   xorwf   buf,W
   movwf  buf
   movwf  GPIO
   movlw   d'10'
   call      delay
   movlw  b'1001'     ; GP0入力ピン
   tris      GPIO
   bcf      GPIO,1     ;GPUIOリード ダミー
   sleep
   nop
   goto    $

delay
   movwf   i
delay1
   nop
   decfsz  i,F
   goto     delay1
   retlw    0

   END