wake on serial input example, you would need to add code to eliminate floating inputs and disable unused "modules" to get the
absolute minimum power use.
this wakes on any serial input and goes back to sleep if an "A" is not received
Code:
;16f628a #CONFIG
__config _HS_OSC & _WDT_OFF & _PWRTE_OFF & _MCLRE_ON & _BODEN_ON & _LVP_OFF & DATA_CP_OFF & _CP_OFF
#ENDCONFIG
include "dt_ints-14.bas"
DEFINE OSC 8
RCSTA = $90 ' Enable serial port & continuous receive
TXSTA = $20 ' Enable transmit, BRGH = 0
SPBRG = 12 ' 9600 Baud @ 8MHz, 0.16%
asm
INT_LIST macro
INT_HANDLER RX_INT , _RX, asm,NO
endm
INT_CREATE
ENDASM
wsave var byte $20 system
wsave1 var byte $a0 system ; If device has RAM in bank1
wsave2 var byte $120 system ; If device has RAM in bank2
LED VAR PORTB.7
TRISB=%01111111 'Make RB0 input
BUFF var byte
FLAG var byte
CMCON=7
FLAG=0
LED=1
PAUSE 500
HSEROUT["READY",13,10]
@ int_enable RX_INT
Main:
LED=0
@ SLEEP
LED=1
IF (FLAG) THEN
GOSUB somewhere
ENDIF
PAUSE 50
Goto Main
Somewhere:
HSEROUT["I got an A", 13,10]
FLAG=0
RETURN
RX:
asm
MOVLW "A"
BANKSEL RCREG
SUBWF RCREG,W
BTFSS STATUS,Z
GOTO EXT
BANKSEL _FLAG
BSF _FLAG,0
EXT
BANKSEL 0
INT_RETURN
endasm
Bookmarks