Ayuda con PIC16F84A display HOLA con pulsador de off y pulsador de on

Solo he logrado que funcione el pulsador de ON :(

Código:


__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>

CBLOCK 0x0C ; En esta posición empieza la RAM de usuario.
ENDC

#DEFINE LED PORTB,0
#DEFINE START1 PORTA,0
#DEFINE START2 PORTA,1
; ZONA DE CÓDIGOS *******************************************************************

ORG 0
Inicio
bsf STATUS,RP0 ; Acceso al Banco 1.
clrf PORTB ; Las líneas del Puerto B se configuran como salida.
bcf STATUS,RP0 ; Acceso al Banco 0.

Principal
btfss START1
goto Fin
call Retardo_20ms
btfss START2
goto Fin
movlw b'01110110' ; Se muestra la letra H
movwf PORTB
call Retardo_500ms ; Llama al retardo 1 veces.
movlw b'00111111' ; Se muestra la letra O
movwf PORTB
call Retardo_500ms ; Llama al retardo 1 veces.
movlw b'00111000' ; Se muestra la letra L
movwf PORTB
call Retardo_500ms ; Llama al retardo 1 veces.
movlw b'01110111' ; Se muestra la letra A
movwf PORTB
call Retardo_500ms ; Llama al retardo 1 veces.
movlw b'00000000' ; Se muestran los segmentos apagados
movwf PORTB
call Retardo_500ms ; Llama al retardo 1 vez para pausar
Fin goto Principal ; Reinicia el ciclo

INCLUDE <RETARDOS.INC>
END
 

Adjuntos

  • pic.rar
    80.1 KB · Visitas: 2
Será porque no funciona. Casi casi seguro.


Digo yo que explicar que pretendes y como está conectado ayudaría algo. Seguramente.
 
Te funciona el pulsador en ON y te muestra las letras en el display de 7 segmentos?
Como dice Scooter
Será porque no funciona. Casi casi seguro.


Digo yo que explicar que pretendes y como está conectado ayudaría algo. Seguramente.
No me acuerdo muy bien pero para configurar, un puerto, en salidas o entradas tienes que hacerlo en el registro TRISB y en TRISA
Configuras PORTB, pero PORTA?
Cuando vas al registro PORTB ó PORTA, es para que al empezar el programa, estos puertos estén en bajo
Tampoco veo el salto,de linea, de las interrupciones al principio de programa
Hace un salto si el pusador
btfss START1
esta en alto, pero si no esta pulsado?
Todo esto es, sino recuerdo mal
 
Última edición:
Te funciona el pulsador en ON y te muestra las letras en el display de 7 segmentos?
Como dice Scooter

No me acuerdo muy bien pero para configurar, un puerto, en salidas o entradas tienes que hacerlo en el registro TRISB y en TRISA
Configuras PORTB, pero PORTA?
Cuando vas al registro PORTB ó PORTA, es para que al empezar el programa, estos puertos estén en bajo
Tampoco veo el salto,de linea, de las interrupciones al principio de programa
Hace un salto si el pusador
btfss START1
esta en alto, pero si no esta pulsado?
Todo esto es, sino recuerdo mal
Solo me falta el botón OFF para parar la secuencia.
Me funciona el botón ON de esta manera (si pulso el botón ON pues empieza la secuencia HOLA y cuando se mantiene pulsado ON entonces la secuencia se repite hasta que lo deje de presionar):


__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>

CBLOCK 0x0C ; En esta posición empieza la RAM de usuario.
ENDC

#DEFINE LED PORTB,0
#DEFINE START PORTA,0


; ZONA DE CÓDIGOS *******************************************************************

ORG 0
Inicio
bsf STATUS,RP0 ; Acceso al Banco 1.
clrf TRISB ; Las líneas del Puerto B se configuran como salida.
bcf STATUS,RP0 ; Acceso al Banco 0.
clrf TRISA

Principal
btfss START
goto Fin
call Retardo_20ms
btfss START
goto Fin
movlw b'01110110' ; Se muestra la letra H
movwf PORTB
call Retardo_500ms ; Llama al retardo 1 veces.
movlw b'00111111' ; Se muestra la letra O
movwf PORTB
call Retardo_500ms ; Llama al retardo 1 veces.
movlw b'00111000' ; Se muestra la letra L
movwf PORTB
call Retardo_500ms ; Llama al retardo 1 veces.
movlw b'01110111' ; Se muestra la letra A
movwf PORTB
call Retardo_500ms ; Llama al retardo 1 veces.
movlw b'00000000' ; Se muestran los segmentos apagados
movwf PORTB
call Retardo_500ms ; Llama al retardo 1 vez para pausar
Fin goto Principal ; Reinicia el ciclo

INCLUDE <RETARDOS.INC>
END
 
Lo que tienes que hacer es muy fácil el mismo botón al pisarlo debes incrementar una variable.

Inicias en cero obviamente.
Al pisar incrementa.
Al pisar nuevamente debes hacer una comparación para saber si está en 0 o en 1.

Si ya está en uno la variable lapones en cero y apagas.
Si está en 0 no haces nada y prendes.
 
Lo que tienes que hacer es muy fácil el mismo botón al pisarlo debes incrementar una variable.

Inicias en cero obviamente.
Al pisar incrementa.
Al pisar nuevamente debes hacer una comparación para saber si está en 0 o en 1.

Si ya está en uno la variable lapones en cero y apagas.
Si está en 0 no haces nada y prendes.
No entiendo, podrías darme un ejemplo? :c
 
No manejo ASM de pic.
Pero es algo así

Pisa botón

Si contador=0

Prende
Si no "else"
Apaga
Contador =0

Con ASM de pic creo que hay que decrementar el acumulador y hacer un salto condicional.
Para hacer el if
 
Entonces ya empezamos mal.

En el libro Programación del pic16f84a.
Hay un ejemplo de salto condicional.
Es con una resta sub en el acumulador.
Y si se dispara en acarreo o la bandera Z.
Hace el salto condicional.
 
Te adjunto este archivo, en el cual he coloreado el texto, para que lo sigas y puedas orientarte en el resultado
Como bien dice TRILO-BYTE, al utilizar pulsadores, si quieres que el programa no se detenga hasta nuevo evento,
tienes que utilizar alguna variable
No manejo ASM de pic.
Pero es algo así

Pisa botón

Si contador=0

Prende
Si no "else"
Apaga
Contador =0

Con ASM de pic creo que hay que decrementar el acumulador y hacer un salto condicional.
Para hacer el if
Pero si utilizas interruptores no te hará falta la variable, puesto que los interruptores, sino efectúas ninguna maniobra (cambio de estado), tienen memoria
También, como te comento Scooter, se necesitaría saber el conexionado
Espero ser de utilidad
Un Saludo
 

Adjuntos

  • PNG.png
    PNG.png
    164.3 KB · Visitas: 14
Pienso que el programa no es correcto. Intenta definir de manera más clara
#DEFINE PULSADOR_ON PORTA,0
#DEFINE PULSADOR_OFF PORTA,1
Parece que ambos pulsadores llevan al mismo sitio cuando están pulsados ¿No?

Yo ejecuto paso a paso en el simulador y observo la secuencia de ejecución, los registros, etc.
 
Arriba