Ver tema anterior :: Ver tema siguiente |
Autor |
Mensaje |
Meta modder
País: Sexo: Registrado: 20 enero 2008 Mensajes: 202 Ubicación: http://electronica-pic.blogspot.com
|
Publicado: Jue, 21 Ago 2008 6:39 pm Asunto: Pulsador para un 16F84 |
|
|
Hola:
Se hacer con un PIC 16F84A apagar y encender un led con un interruptor. No me sale hacerlo con un pulsador. Mi idea es con un pulsador si lo pulso se enciende un led y si lo dejo de pulsar siga encendido, luego al volver a pulsarlo que se apague.
Código: | ORG 0 ; El programa comienza en la dirección 0 de memoria de
Inicio ; programa.
bsf STATUS,RP0 ; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1.
clrf PORTB ; Las líneas del Puerto B se configuran como salidas.
movlw b'11111111'
movwf PORTA ; Las líneas del Puerto A se configuran como entradas.
bcf STATUS,RP0 ; Pone a 0 el bit 5 de STATUS. Acceso al Banco 0.
clrf PORTB
clrf PORTA
Principal
btfss PORTA,0 ; ¿Bit 0 del PORTA es "1"?
goto hola
bsf PORTB,7
goto Principal
hola
bcf PORTB,7
goto Principal |
|
|
Volver arriba |
|
|
TheGameMaster modder
País: Sexo: Registrado: 28 julio 2007 Mensajes: 1148
|
Publicado: Jue, 21 Ago 2008 7:44 pm Asunto: |
|
|
Buenas Meta
tienes un pequeño problema con los pulsadores: Los rebotes; sol los picos que hay cuando pulsas hasta que se estabiliza la señal.
Se pueden correguir por software.
Tu lo que quieres es encender un led por un pulsador:
Código: |
Principal
call Retardo_20ms ;espera 20ms para ke pase el rebote
btfss PORTA,0 ; ¿Bit 0 del PORTA es "1"?
goto Principal ;no pulsado
goto Enciende
Enciende
bsf PORTB,7
goto Principal
END
include <Retardos> ; tendras q copiar la libreria de retardos del librito morado jeje
|
DADO DE BAJA |
|
Volver arriba |
|
|
Meta modder
País: Sexo: Registrado: 20 enero 2008 Mensajes: 202 Ubicación: http://electronica-pic.blogspot.com
|
Publicado: Jue, 21 Ago 2008 7:55 pm Asunto: |
|
|
Gracias, lo de retardo lo se.
Quiero hacer que en un mismo pulsador encender y apagar el led. Cosa que el libro morado no te viene.
jejejjejeje
Gracias de nuevo. |
|
Volver arriba |
|
|
TheGameMaster modder
País: Sexo: Registrado: 28 julio 2007 Mensajes: 1148
|
Publicado: Jue, 21 Ago 2008 8:00 pm Asunto: |
|
|
vale
Código: |
Principal
PulsadorEnciende
call Retardo_20ms ;espera 20ms para ke pase el rebote
btfss PORTA,0 ; ¿Bit 0 del PORTA es "1"?
goto PulsadorApaga ;no pulsado
goto Enciende
PulsadorApaga
call Retardo_20ms ;espera 20ms para ke pase el rebote
btfss PORTA,0 ; ¿Bit 0 del PORTA es "1"?
goto PulsadorEnciende ;no pulsado
goto Apaga
Enciende
bsf PORTB,7
goto Principal
Apaga
bcf PORTB,7
goto Principal
END
include <Retardos> ; tendras q copiar la libreria de retardos del librito ;morado jeje |
el pulsador tiene ke activarse por +Vcc(5v) y tienes ke mantenerl la patilla siempre a un nivel negativo, con una resistencia (para evitar el corto) de 10k vale. Me imagino ke lo tienes asiDADO DE BAJA |
|
Volver arriba |
|
|
Meta modder
País: Sexo: Registrado: 20 enero 2008 Mensajes: 202 Ubicación: http://electronica-pic.blogspot.com
|
Publicado: Jue, 21 Ago 2008 8:15 pm Asunto: |
|
|
Parece que si pulso se enciende y desde que deje de pulsar se apaga. Espero que no pase eso a lo plan de un timbre de una casa.
Voy a examinarlo bien y te comento. |
|
Volver arriba |
|
|
TheGameMaster modder
País: Sexo: Registrado: 28 julio 2007 Mensajes: 1148
|
Publicado: Jue, 21 Ago 2008 8:23 pm Asunto: |
|
|
Código: |
Principal
PulsadorEnciende
call Retardo_20ms ;espera 20ms para ke pase el rebote
btfss PORTA,0 ; ¿Bit 0 del PORTA es "1"?
goto PulsadorApaga ;no pulsado
goto Enciende
PulsadorApaga
call Retardo_20ms ;espera 20ms para ke pase el rebote
btfss PORTA,0 ; ¿Bit 0 del PORTA es "1"?
goto PulsadorEnciende ;no pulsado
goto Apaga
Enciende
bsf PORTB,7
call Retardo_500ms
goto Principal
Apaga
bcf PORTB,7
call Retardo_500ms
goto Principal
END
include <Retardos> ; tendras q copiar la libreria de retardos del librito ;morado jeje |
meti 500ms para ke sueltes el pulsador jejeDADO DE BAJA |
|
Volver arriba |
|
|
Meta modder
País: Sexo: Registrado: 20 enero 2008 Mensajes: 202 Ubicación: http://electronica-pic.blogspot.com
|
Publicado: Vie, 22 Ago 2008 12:27 pm Asunto: |
|
|
No he probado el tuyo, pero he utilizado este método manejando el STATUS,Z. Aún así voy a probar el tuyo.
Los retardos ya se los pondré.
Código: |
ORG 0 ; El programa comienza en la dirección 0 de memoria de
Inicio ; programa.
bsf STATUS,RP0 ; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1.
clrf PORTB ; Las líneas del Puerto B se configuran como salidas.
movlw b'00011111'
movwf PORTA ; Las líneas del Puerto A se configuran como entradas.
bcf STATUS,RP0 ; Pone a 0 el bit 5 de STATUS. Acceso al Banco 0.
Principal
btfss PORTA,0
goto Loco
goto Principal
Loco
btfsc STATUS,Z ; ¿Es = 0?
goto Enciende
goto Apaga
Enciende
bcf STATUS,Z
bsf PORTB,7
goto Principal
Apaga
bsf STATUS,Z
bcf PORTB,7
goto Principal
END
|
|
|
Volver arriba |
|
|
Meta modder
País: Sexo: Registrado: 20 enero 2008 Mensajes: 202 Ubicación: http://electronica-pic.blogspot.com
|
Publicado: Vie, 22 Ago 2008 12:55 pm Asunto: |
|
|
Probando en Proteus ni en MPLAB 8.14 funciona tu código. |
|
Volver arriba |
|
|
TheGameMaster modder
País: Sexo: Registrado: 28 julio 2007 Mensajes: 1148
|
Publicado: Vie, 22 Ago 2008 3:32 pm Asunto: |
|
|
Meta escribió: | Probando en Proteus ni en MPLAB 8.14 funciona tu código. |
eee bueno lo he echo de cabeza, pero en el proteus funciona mal con leds, hay ke ponerle retardos pa ke funcionen.
yo lo probare yo.
salu2!DADO DE BAJA |
|
Volver arriba |
|
|
TheGameMaster modder
País: Sexo: Registrado: 28 julio 2007 Mensajes: 1148
|
Publicado: Vie, 22 Ago 2008 6:27 pm Asunto: |
|
|
mmm
Meta tienes mal el codigo:
la operacion btfss es una operacion de salto y no afecta a ningun flag, como el Z, ya que este se enciende (o se pone a 1) cuando alguna operacion matemetica es 0.
es decir
Loco
btfsc STATUS,Z ; ¿Es = 0?
goto Enciende
goto Apaga
no te funcionaraDADO DE BAJA |
|
Volver arriba |
|
|
Kaisermart modder
País: Sexo: Registrado: 14 junio 2006 Mensajes: 611
|
|
Volver arriba |
|
|
Meta modder
País: Sexo: Registrado: 20 enero 2008 Mensajes: 202 Ubicación: http://electronica-pic.blogspot.com
|
Publicado: Sab, 23 Ago 2008 3:55 am Asunto: |
|
|
Pruébalo en el proteus.
Y eso que no incluí antirrebotes.
Código: | :020000040000FA
:10000000831686011F3085008312051C08280528E9
:1000100003190B280E2803118617052803158613CC
:020020000528B1
:02400E00F13F80
:00000001FF |
|
|
Volver arriba |
|
|
TheGameMaster modder
País: Sexo: Registrado: 28 julio 2007 Mensajes: 1148
|
Publicado: Sab, 23 Ago 2008 3:57 am Asunto: |
|
|
si pegas el codigo del mplab mejor, ke no soy como Neo en matrix xD!
jejeDADO DE BAJA |
|
Volver arriba |
|
|
Meta modder
País: Sexo: Registrado: 20 enero 2008 Mensajes: 202 Ubicación: http://electronica-pic.blogspot.com
|
Publicado: Sab, 23 Ago 2008 4:40 am Asunto: |
|
|
Es el mismo de arriba. Pruébalo en Proteus, en el MPLAB parece que no funciona como uno quiere, pero ponlo en el Proteus y funciona, eso si, no he incluido retardos,,,
Código: |
ORG 0 ; El programa comienza en la dirección 0 de memoria de
Inicio ; programa.
bsf STATUS,RP0 ; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1.
clrf PORTB ; Las líneas del Puerto B se configuran como salidas.
movlw b'00011111'
movwf PORTA ; Las líneas del Puerto A se configuran como entradas.
bcf STATUS,RP0 ; Pone a 0 el bit 5 de STATUS. Acceso al Banco 0.
Principal
btfss PORTA,0
goto Loco
goto Principal
Loco
btfsc STATUS,Z ; ¿Es = 0?
goto Enciende
goto Apaga
Enciende
bcf STATUS,Z
bsf PORTB,7
goto Principal
Apaga
bsf STATUS,Z
bcf PORTB,7
goto Principal
END
|
|
|
Volver arriba |
|
|
TheGameMaster modder
País: Sexo: Registrado: 28 julio 2007 Mensajes: 1148
|
Publicado: Sab, 23 Ago 2008 2:42 pm Asunto: |
|
|
vamos a ver Meta, es imposible ke funcione, por varias razones:
- el flag Z del registro Status no se ve afectado por un cambio en el puerto de entrada tanto A como B y por la instruccion BTFSS. Este (Z) solo cambia cuando una operacion aritmetica es 0. Por ejemplo yo lo utilizo para controlar contadores:
Código: |
CUENTA
incf CONTADOR,f ;incremento contador
movlw b'00001111' ;muevo un literal al W
subfw CONTADOR,w ;resto el literal del W con el registro CONTADOR
btfss SATUS,Z ;miro si Z es = a 1
goto CUENTA ;sin Z no es 1 sigue incrementando
goto OTRA_COSA ;si Z = 1 sale del bucle y hace otra cosa
|
Z se debe de borrar por soft: bcf STATUS,Z
Mira en el libro al final uno de los apendices q es donde viene les 35 instrucciones y donde veras ke la instruccion BTFSS no acepta a Z.
Por lo tanto probé tu codigo en proteus y el led parpadea solo. Ensamble tu codigo con Mplab 8.14 Código: |
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84a
INCLUDE <P16F84A>
ORG 0 ; El programa comienza en la dirección 0 de memoria de
Inicio ; programa.
bsf STATUS,RP0 ; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1.
clrf PORTB ; Las líneas del Puerto B se configuran como salidas.
movlw b'00011111'
movwf PORTA ; Las líneas del Puerto A se configuran como entradas.
bcf STATUS,RP0 ; Pone a 0 el bit 5 de STATUS. Acceso al Banco 0.
Principal
btfss PORTA,0
goto Loco
goto Principal
Loco
btfsc STATUS,Z ; ¿Es = 0?
goto Enciende
goto Apaga
Enciende
bcf STATUS,Z
bsf PORTB,7
goto Principal
Apaga
bsf STATUS,Z
bcf PORTB,7
goto Principal
END
|
Prueba el mio que si funciona al 100%
Código: |
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84a
INCLUDE <P16F84A>
ORG 0
goto Inicio
Inicio
bsf STATUS,RP0 ; Acceso banco 1.
clrf PORTB ; Las líneas del Puerto B se configuran como salidas.
movlw b'00011111'
movwf PORTA ; Las líneas del Puerto A se configuran como entradas.
bcf STATUS,RP0 ; Acceso banco 0.
Principal
PulsadorEnciende
call Retardo_20ms ;espera 20ms para ke pase el rebote
btfss PORTA,0 ; ¿Bit 0 del PORTA es "1"?
goto PulsadorApaga ;no pulsado
goto Enciende
PulsadorApaga
call Retardo_20ms ;espera 20ms para ke pase el rebote
btfss PORTA,0 ; ¿Bit 0 del PORTA es "1"?
goto PulsadorEnciende ;no pulsado
goto Apaga
Enciende
bsf PORTB,7
call Retardo_500ms
goto Principal
Apaga
bcf PORTB,7
call Retardo_500ms
goto Principal
INCLUDE <RETARDOS>
END
; ===================================================================
|
vamos yo estoy aki pa echarte una mano, si tienes algun problema con los pics en Ensamblador preguntame, ke fijo te sabre ayudar. Te lo digo porke me se el libro de memoria, no es coña, y a los pic 16f84a ya se me han kedado pequeños en memoria y recursos.
Si quieres saber sobre mis proyectos preguntame.
Venga animo y no te desesperes.
Salu2!DADO DE BAJA |
|
Volver arriba |
|
|
|