Autor Tema: LCD 7seg con teclado binario, ayudaaaa  (Leído 2955 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Watek

  • PIC10
  • *
  • Mensajes: 14
LCD 7seg con teclado binario, ayudaaaa
« en: 20 de Abril de 2020, 11:37:28 »
Buenas gente,

soy nuevo en la programacion Pic!! Estoy intentando programar un pic16f84a para que muestre un número en un display conectado al Puerto B, a traves de unos botones de estado lógico conectados al Puerto A.
No encuentro ni consigo ninguna instrución tipo: "si PORTA == W"
Mi código es el siguiente:

Código: [Seleccionar]
List p=16f84a
#include <p16f84a.inc>
__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_ON & _CP_OFF
org     0x00
   
    zero  equ b'00111111'
    one   equ b'00000110'
    two   equ b'01011011'
    three equ b'01001111'
    four  equ b'01100110'
    five  equ b'01101001'
    six   equ b'01111101'
    seven equ b'01111111'
    nine  equ b'01101111'
   
    bZero  equ b'00000'
    bOne   equ b'00001'
    bTwo   equ b'00010'
    bThree equ b'00011'
    bFour  equ b'00100'
    bFive  equ b'00101'
    bSix   equ b'00110'
    bSeven equ b'00111'
   
 

BSF     STATUS,RP0
MOVLW     b'11111'
MOVWF     TRISA
CLRF     TRISB
BCF     STATUS,RP0
   
    START
    CALL     TESTif0
    CALL     TESTif1
    CALL     TESTif2
    CALL     TESTif3
    CALL     TESTif4
    CALL     TESTif5
    CALL     TESTif6
    CALL     TESTif7
    GOTO     START
   
    TESTif0
    BTFSC PORTA,bZero
    MOVLW zero
    BTFSC PORTA,bZero
    MOVWF PORTB
    RETURN
   
    TESTif1
    BTFSC PORTA,bOne
    MOVLW one
    BTFSC PORTA,bOne
    MOVWF PORTB
    RETURN
   
    TESTif2
    BTFSC PORTA,bTwo
    MOVLW two
    BTFSC PORTA,bTwo
    MOVWF PORTB
    RETURN
   
    TESTif3
    BTFSC PORTA,bThree
    MOVLW three
    BTFSC PORTA,bThree
    MOVWF PORTB
    RETURN
   
    TESTif4
    BTFSC PORTA,bFour
    MOVLW four
    BTFSC PORTA,bFour
    MOVWF PORTB
    RETURN
   
    TESTif5
    BTFSC PORTA,bFive
    MOVLW five
    BTFSC PORTA,bFive
    MOVWF PORTB
    RETURN
   
    TESTif6
    BTFSC PORTA,bSix
    MOVLW six
    BTFSC PORTA,bSix
    MOVWF PORTB
    RETURN
   
    TESTif7
    BTFSC PORTA,bSeven
    MOVLW seven
    BTFSC PORTA,bSeven
    MOVWF PORTB
    RETURN
   
    END


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:LCD 7seg con teclado binario, ayudaaaa
« Respuesta #1 en: 20 de Abril de 2020, 12:30:58 »
Si tu problema es este:

Citar
si PORTA == W

Entonces:
Perdiendo W, pero no debería haber problemas, ya que ese registro es de trabajo:

Usando una OR Exclusiva, si son iguales queda W en 0
Código: ASM
  1. XORWF PORTA, W
  2. BTFSS STATUS, Z
  3. GOTO  NOIGUAL
  4. GOTO  IGUAL

ó

Restando. Si es igual a 0
Código: ASM
  1. SUBWF PORTA, W
  2. BTFSS STATUS, Z
  3. GOTO  NOIGUAL
  4. GOTO  IGUAL

Desconectado Watek

  • PIC10
  • *
  • Mensajes: 14
Re:LCD 7seg con teclado binario, ayudaaaa
« Respuesta #2 en: 20 de Abril de 2020, 18:23:05 »
Muchas gracias KILLERJC, sí, eso buscaba.

He puesto algo asi:

Código: [Seleccionar]
MOVFW     dir0
XORWF     PORTA, W
BTFSS     STATUS,Z
CALL     IMP0

MOVFW     dir1
XORWF     PORTA, W
BTFSS     STATUS,Z
CALL     IMP1

En "dirx" tengo almacenados los números a comparar desde el Puerto A, los impx son funciones que devuelven el numero por el Puerto B.

Por alguna razón me sigue sin funcionar, pero creo que es un problema del circuito simulado... o de alguna otra parte del código.


Repito, gracias.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:LCD 7seg con teclado binario, ayudaaaa
« Respuesta #3 en: 20 de Abril de 2020, 18:35:09 »
Acordate que el BTFSS salta la instruccion cuando la bandera Z esta en 1... Si queres que salte cuando este en 0, entonces es BTFSC


Ademas podes tener otro problema.
« Última modificación: 20 de Abril de 2020, 20:33:33 por KILLERJC »

Desconectado Watek

  • PIC10
  • *
  • Mensajes: 14
Re:LCD 7seg con teclado binario, ayudaaaa
« Respuesta #4 en: 20 de Abril de 2020, 19:03:54 »
Si, disculpa, eso ya estaba corregido al instante de publicar la anterior respuesta, copie mal del portapapeles.

El display se vuelve loco en la simulación.

Por otra parte MOVWF copia de W a File y MOVFW copia de File a W? esto es asi o me lo acabo de inventar?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:LCD 7seg con teclado binario, ayudaaaa
« Respuesta #5 en: 20 de Abril de 2020, 19:35:13 »
En realidad solo existe la instrucción MOVF y MOVWF (lo podes ver en el datasheet)

Recordando que MOVF puede ir a F o W... Es decir:

Código: ASM
  1. MOVF registro, F

Lo mueve al mismo lugar (como para actualizar las banderas)
PERO debido a justamente lo que comentas, el compilador tambien acepta la "pseudo-instruccion" (instruccion no real que luego se reemplaza por la real) MOVFW. Por ejemplo:

Código: ASM
  1. MOVFW registro

Se transforma al compilarse en:

Código: ASM
  1. MOVF registro, W

Hay mas pseudo-instrucciones que acepta el compilador. Aunque por ahi no es recomendable basarse en ellas. Ya que solo algunos PICs lo soportan.

http://ww1.microchip.com/downloads/en/DeviceDoc/33014L.pdf (Pagina 320)
Y vas a ver que solo algunos PICs lo soportan : 12-BIT/14-BIT SPECIAL INSTRUCTION MNEMONICS
Y tambien en cuales se convierten.


Citar
El display se vuelve loco en la simulación.

Podes llegar a tener otros problemas, pero en la simulacion usualmente lo mejor es sacarle el delay para mostrarlo..
« Última modificación: 20 de Abril de 2020, 20:34:20 por KILLERJC »

Desconectado Watek

  • PIC10
  • *
  • Mensajes: 14
Re:LCD 7seg con teclado binario, ayudaaaa
« Respuesta #6 en: 21 de Abril de 2020, 07:35:59 »
Muchas gracias KILLERJC, muy útiles tus respuestas.


Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re:LCD 7seg con teclado binario, ayudaaaa
« Respuesta #7 en: 01 de Mayo de 2020, 21:05:08 »
Que tal Watek,

Espero te encuentres bien. El siguiente código es otra forma de realizar la tarea de tu circuito de una manera más eficiente y con el código más pequeño. Espero te sirva en tu proceso de aprendizaje.

Código: [Seleccionar]
LIST P=PIC16F84A
INCLUDE <P16F84A.INC>


__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_ON & _CP_OFF

org     0x00
GOTO INICIO

BANCO0      MACRO
            BCF     STATUS,RP0
            BCF     STATUS,RP1
            ENDM

BANCO1      MACRO
            BSF     STATUS,RP0
            BCF     STATUS,RP1
            ENDM

TABLA ADDWF PCL,F
RETLW b'00111111' ;Print "0"
RETLW b'00000110' ;Print "1"
RETLW b'01011011' ;Print "2"
RETLW b'01001111' ;Print "3"
RETLW b'01100110' ;Print "4"
RETLW b'01101101' ;Print "5"
RETLW b'01111101' ;Print "6"
RETLW b'00000111' ;Print "7"
RETLW b'01111111' ;Print "8"
RETLW b'01101111' ;Print "9"
RETLW b'01110111' ;Print "A"
RETLW b'01111100' ;Print "b"
RETLW b'00111001' ;Print "C"
RETLW b'01011110' ;Print "d"
RETLW b'01111001' ;Print "E"
RETLW b'01110001' ;Print "F"
           
INICIO BANCO1
MOVLW H'00'
MOVWF TRISB
BANCO0
INI
MOVF PORTA,W
CALL TABLA
MOVWF PORTB
GOTO INI
END

 

* Capture.JPG
(104.61 kB, 937x546 - visto 371 veces)


saludos,

elreypic