Hi;
Here is a program that i wrote in the past.
Code:
'****************************************************************
'* Name : Temporizador 3m p/ Lavar Dentes.BAS *
'* Author : gadelhas *
'* Notice : Copyright (c) 2012 ProSystems *
'* : All Rights Reserved *
'* Date : 01-03-2012 *
'* Version : 1.0 *
'* Notes : Proteus + Circuito com SOT-23 e CR2032 *
'* : 10F222 - Wake from sleep através de IOC no GP3 *
'****************************************************************
@ __config _IOFSCS_4MHZ & _WDT_OFF & _MCLRE_OFF & _CP_OFF & _MCPU_ON
DEFINE OSC 4
'===================SRF AND PINOUT CONFIGURATION - 1-In / 0-Out=================
'76543210
TRISIO = %00001000
GPIO = %00000000
OPTION_REG = %00000000 'OPTION_REG.7 - Wake on change bit 0=Enable
ADCON0 = %00000000 'Analog pins disable
'==================================ALIAS========================================
VAZIO1 VAR GPIO.0
VAZIO2 VAR GPIO.1
LED VAR GPIO.2
MCLR vAR GPIO.3
GPWUF var STATUS.7
'=================================VARIABLES=====================================
I VAR BYTE
C VAR BYTE: C = 0
'================================MAIN LOOP======================================
@ movlw 0x01A ;OSCCAL Value
@ movwf OSCCAL
IF GPWUF = 0 THEN DESLIGA 'Test what caused the Reset
Main:
WHILE MCLR = 0 'If button pressed for 3 seconds, turn on led
PAUSE 100
C = C + 1
IF C = 30 THEN LIGA
WEND
FOR I = 0 TO 119 '~120 Segundos a Piscar de 1 em 1 Segundo
HIGH LED
PAUSE 500
GOSUB VERIFICA
LOW LED
PAUSE 500
GOSUB VERIFICA
NEXT
FOR I = 0 TO 59 '~30 Segundos a Piscar de 0,5 em 0,5 Segundo
HIGH LED
PAUSE 250
LOW LED
PAUSE 250
GOSUB VERIFICA
NEXT
HIGH LED
FOR I = 0 TO 59 '~30 Segundos sempre ligado
PAUSE 500
GOSUB VERIFICA
NEXT
LOW LED
'Sequencia de finalização
HIGH LED: PAUSE 100: LOW LED: PAUSE 100
HIGH LED: PAUSE 100: LOW LED: PAUSE 100
HIGH LED: PAUSE 100: LOW LED: PAUSE 100
DESLIGA:
C = 0
I = GPIO 'Must read GPIO before entering sleep. Read the Datasheet
@ SLEEP
@ NOP
GOTO Main
'================================SUB-ROUTINES===================================
LIGA:
HIGH LED
PAUSE 1000
WHILE MCLR !=0
WEND
LOW LED
GOTO DESLIGA
VERIFICA:
IF MCLR = 0 THEN
C = C + 1
IF C = 6 THEN
'Sequencia de finalização
HIGH LED: PAUSE 100: LOW LED: PAUSE 100
HIGH LED: PAUSE 100: LOW LED: PAUSE 100
HIGH LED: PAUSE 100: LOW LED: PAUSE 100
PAUSE 1000
GOTO DESLIGA
ENDIF
ENDIF
RETURN
END
Bookmarks