Duda en programacion de PIC16F84A

#1
solo necesito saber si estoy llamando bien las configuraciones o si tengo algún error lógico en mi programa agradecer su ayuda el programa es el siguiente:

Código:
    LIST p=16F84A
#INCLUDE <p16f84a.inc>


    __CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _XT_OSC
    ERRORLEVEL -302


    ORG 0x0000
    goto Inicio



Inicio
    clrf PORTB
    bsf STATUS,RP0
    clrf TRISB
    movlw b'00001111'
    movwf TRISA
    bcf STATUS,RP0
Principal
    movf PORTA,W
    andlw b'00001111'
    addwf PCL,F
Tabla
    goto Configuracion0
    goto Configuracion1
    goto Configuracion2
    goto Configuracion3
    goto Configuracion4
    goto Configuracion5
    goto Configuracion6
    goto Configuracion7
    goto Configuracion8
    goto Configuracion9
    goto Configuracion10
    goto Configuracion11
    goto Configuracion12
    goto Configuracion13
    goto Configuracion14
    goto Configuracion15
Configuracion0
    movlw b'01100000'
    goto ActivaSalida
Configuracion1
    movlw b'01000001'
    goto ActivaSalida
Configuracion2
    movlw b'01000010'
    goto ActivaSalida
Configuracion3
    movlw b'01000011'
    goto ActivaSalida
Configuracion4
    movlw b'00110100'
    goto ActivaSalida
Configuracion5
    movlw b'00010101'
    goto ActivaSalida
Configuracion6
    movlw b'00100110'
    goto ActivaSalida
Configuracion7
    movlw b'00000111'
    goto ActivaSalida
Configuracion8
    movlw b'01111000'
    goto ActivaSalida
Configuracion9
    movlw b'01011001'
    goto ActivaSalida
Configuracion10
    movlw b'01101010'
    goto ActivaSalida
Configuracion11
    movlw b'01001011'
    goto ActivaSalida
Configuracion12
    movlw b'00111100'
    goto ActivaSalida
Configuracion13
    movlw b'00011101'
    goto ActivaSalida
Configuracion14
    movlw b'00101110'
    goto ActivaSalida
Configuracion15
    movlw b'00001111'
    goto ActivaSalida
ActivaSalida
    movwf PORTB
    goto Principal


    END

Solo es saber si estoy llamando bien mis configuraciones. De antemano gracias.!
 
Última edición por un moderador:

Vick

Moderador
#2
Creo que esta bien, pero:

¿por que lo preguntas?
¿no funciona?

Además te estas complicando la vida, mejor usa una tabla con retlw, más facil...
 
#4
es que no me marca error alguno pero el pic ya programado no me funciona bien.. y si me podrias dar un ejemplo de como usar el retlw vick por favor es que es mi primera vez programando un pic ... GRACIAS...!
 

Vick

Moderador
#5
Ok ya vi un pequeño error en el programa, tienes activado el WDT, desactivalo poniendo WDT_OFF, aunque eso no afectaria el funcionamiento (al menos no de este programa) pero te puede afectar en futuros programas, si no sabes que es estudia un poco el WDT, en todos los programas donde no lo uses debes desactivarlo OK.

Ya verifiqué el programa (en el simulador) y funciona bien, talvez donde tengas algo mal sea en el circuito, trata de subir el circuito que estas usando.

Para usar tablas en ROM es más facil con la instrucción retlw, te dejo algo de tablas en ROM:

http://perso.wanadoo.es/pictob/tecprg.htm#consulta_a_tablas

Si ya estudiaste subrutinas será muy facil entenderlo, aunque claro, como lo estas haciendo también es válido, aunque un poco más largo. Si tienes dudas del uso de tablas con retlw pregunta.

Saludos...
 
#6
vick ya solucione el problema.. estaba en el oscilador me estaba haciendo falso contacto en protoboard pero si funciono bien el mc muchas gracias por tu ayuda y gracias por lo des las subrutinas agredesco mucho tu ayuda..

Saludos..!
 
#8
hola a todos retomando este tema necesito saber como darle un estado de no importa a una configuracion por ejemplo la configuracion 1 que me arroje un 1 en la salida y la configuracion 2 me arroje el mismo valor que tenga el estado anterior por decir selecciono la configuracion 7 y la configuracion 2 tome su valor al igual cuando tome cualquier otra configuracion como ago eso? en resumen como ago que la configuracion 2 tome cualquier valor anterior...!

SALUDOS...!
 

Vick

Moderador
#9
Definiendo un registro auxiliar que guarde la última salida y cuando selecciones la configuración 2 (o cualquier otra que elijas) envíe el valor de ese registro a la salida, que será el de la última configuración seleccionada...
 
#10
Muy buenas comunidad, soy estudiante de Sistemas y nuevo por el foro, he trabajado últimamente con el PIC16F84A montado en un protoboard y haciendo "funcionar" algunos programas con este mismo PIC la duda que tengo es: como funciona el/los programas, que se programaron al PIC, les dejo una pequeña sintaxis, ojala alguien pueda explicarme, led adjunto el programa en el PIC y una imagen con la función que me muestra, saludos comunidad.

Código:
; ZONA DE DATOS **********************************************************************


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

CONSTANTE     EQU     b"01010101"                          
; ZONA DE CODIGOS **********************************************************************

              ORG     0                                   
INICIO                                                    
              bsf           STATUS,RP0                     
              clrf   TRISB                                  
              bcf           STATUS,RP0                     
              movlw  CONSTANTE                             
Principal
              movwf  PORTB                                 
              goto   Principal                              

              END
Saludos.
 

Adjuntos

Última edición por un moderador:
#11
hola no entiendo bien la pregunta,, pero te respondo lo que entendi:

Pregunta: como funciona el/los programas, que se programaron al PIC?

Respuesta: los programas modifican los registros internos del pic y segun la configuracion que tengan estos registros es el comportamiento que va a tener el micro, pudiendo segun el programa que enviaste encender leds por el puerto B
PD: se pueden hacer miles de cosas, Ver Hoja de Datos del pic que estas utilizando

será esta la respuesta a tu pregunta ?? saludos !
 
#12
Bueno realmente seria como funciona el programa en el PIC...
Por ejemplo que funcion me muestra en el protoboard con la instruccion "CONSTANTE EQU b"01010101" " hace que se enciendan los puertos 1? asi como el bsf el clrf, disculpen mi ignorancia pero realmente ando perdido este tema :oops:
 
#13
ahh ok te escribo al lado de cada instruccion lo que hace,pero para entenderlo mejor deberias ir a la hoja de datos del pic:

CONSTANTE EQU b"01010101" ; CONSTANTE = b"01010101"

bsf STATUS,RP0 ; voy al puerto 1 del pic
clrf TRISB ; borro el registro TRISB entonces el puerto B como salida
bcf STATUS,RP0 ; vuelvo al puerto 0 del pic
movlw CONSTANTE ; muevo CONSTANTE = b"01010101" al registro W

movwf PORTB ; muevo W=CONSTANTE = b"01010101" al puertoB que lo habias definido como salida
; entonces pone en 1( 5 volt) los pines que tienen un 1 y a 0 (o volt) los pines que
; tienen un 0
; pines en uno: portb 0,2,4 y 6
; pines en cero: portb 1,3,5 y 7
goto Principal ; repito todo de nuevo

END ; fin del programa

PD: si cambias el valor CONSTANTE = b"01010101" por cualquier otro por ejemplo:
CONSTANTE = b"11111111" encienden todos los leds
CONSTANTE = b"00000000" no enciende ninguno

saludos! :)
 
#14
Muchas gracias, ya todo me esta quedando mas claro, en este caso que pasaria si cambio el valor de la constante por "CONSTANTE EQU d"74"

ORG 0
INICIO
bsf STATUS,RP0
clrf TRISB
movlw b"00011111" ; como interpreta esta instruccion el PIC?
movwf TRISA
bcf STATUS,RP0
Principal
movwf PORTA,W
addlw CONSTANTE ;Aqui agrega la Constante a "w"?
movwf PORTB
goto Principal

Mi duda es saber que es lo que pasa en el Protoboard ya que aqui utilizo el switch, como interpreto el valor 74?

Saludos
 
#15
movlw b"00011111" ; como interpreta esta instruccion el PIC?
Rta: carga b"00011111" en W

addlw CONSTANTE ;Aqui agrega la Constante a "w"?
Rta: Agrega el valor de la constante que en tu caso es d"74"

como interpreto el valor 74?
Rta: tenes que pasar el 74 decimal a binario y ahi ves que pines estaran en 1 y cuales en 0, los que esten en 1 se prenderan los leds y los que esten en 0 quedaran apagados
 
#16
Mi duda es saber que es lo que pasa en el Protoboard ya que aqui utilizo el switch, como interpreto el valor 74?

Saludos
Saludos.
Para que veas como interpreta el microcontrolador los valores numéricos, aquí dejo un sencillo proyecto.
Se trata de programa que muestra en el puerto B, el número binario desde 0 hasta 255 con LEDs
Es algo didáctico que espero pueda servirte como aprendizaje.

bsf STATUS,RP0 ; voy al puerto 1 del pic
clrf TRISB ; borro el registro TRISB entonces el puerto B como salida
bcf STATUS,RP0 ; vuelvo al puerto 0 del pic
movlw CONSTANTE ; muevo CONSTANTE = b"01010101" al registro W
No es puerto, es banco :cool:

Suerte.
 

Adjuntos

Arriba