TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: marvicdigital en 26 de Septiembre de 2008, 13:59:50

Título: Registro Sleep, ayuda por favor
Publicado por: marvicdigital en 26 de Septiembre de 2008, 13:59:50
Hola, a todos.
Tengo un problema con el PIC 12F508 y con el registro Sleep, tengo esta lineas en asm:
Configuro los puertos asi: GP0, GP1,GP2,GP4 como salidas y GP3 Y GP5 entradas.

movlw   b'00101000'
tris        gpio
movlw   b'01000000'    ; configuro despertar con cambio de estado en gp0,gp1 y gp3
option 
clrf        gpio
bsf        gpio,3
sleep
nop
nop
goto      inicio
..
..
..
.

El problema es que se queda en sleep asi cambie de estado en el  gpio 3 (pin 4) con un pulsador, si borro la linea de sleep el programa funciona normalmente. Que hago mal? es que en el PDF y en microchip no encuentro como usar bien este registro, se supone que para salir de este modo debe ser por una interrupción y con cambio de estado en uno de los puertos GPIO (0,1,3)..

Agradezco sus explicaciones y ayuda.

Saludos
Título: Re: Registro Sleep, ayuda por favor
Publicado por: sander en 26 de Septiembre de 2008, 14:53:54
Lo que pasa es que este dispositivo se resetea cuando se despierta , lo que tienes que hacer es revisar la causa del reset antes de poner la intruccion SLEEP y si el reset se debe a un cambio en algun pin saltarte la intruccion SLEEP, el bit que indica si el reset se produjo por un cambio de estado en un pin es el GPWUF que se encuentra en el registro STATUS

Entonces tendrias algo asi
Código: ASM
  1. btfss    STATUS,GPWUF         ;GPWUF == 1? , reset por cambio de estado?
  2. sleep                                   ;No => dormimos
  3.                                            ;Si => atendemos al boton presionado
  4. ;Codigo para atender el boton
  5. bcf       STATUS,GPWUF         ;GPWUF = 0, porque ya atendimos al reset
  6. goto     inicio


Saludos
Título: Re: Registro Sleep, ayuda por favor
Publicado por: marvicdigital en 26 de Septiembre de 2008, 23:52:24
Lo que pasa es que este dispositivo se resetea cuando se despierta , lo que tienes que hacer es revisar la causa del reset antes de poner la intruccion SLEEP y si el reset se debe a un cambio en algun pin saltarte la intruccion SLEEP, el bit que indica si el reset se produjo por un cambio de estado en un pin es el GPWUF que se encuentra en el registro STATUS

Entonces tendrias algo asi
Código: ASM
  1. btfss    STATUS,GPWUF         ;GPWUF == 1? , reset por cambio de estado?
  2. sleep                                   ;No => dormimos
  3.                                            ;Si => atendemos al boton presionado
  4. ;Codigo para atender el boton
  5. bcf       STATUS,GPWUF         ;GPWUF = 0, porque ya atendimos al reset
  6. goto     inicio


Saludos

Muchas gracias, ese era el problema..de verdad mil gracias.

Saludos