Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?
30/12/2009 #1

Avatar de Meta

Usando IF ELSE
Hola:

En el MPLAB hay una directiva IF ELSE muy chula para ayudar con el ensamblador. Tengo un código completo que depende de la configuración me funciona para un PIC 16F84A y otro PIC para el 16F88.

Puedo crear dos .asm para cada pic pero prefiero crear uno solo. Se elige la configuración de cada PIC gracias al IF ELSE, lo he visto hacer con un 12F508 y 12F509, lo que no consigo encontrar ese código para ver como era. Sólo desde el MPLAB eliges el tipo de PIC, con el IF ELSE, él solito te genera el .hex adecuado para el PIC específico.

Código:
IF (16F84A == 16F88)

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

    CBLOCK   0x0C        
    TeclaPulsada                    ; Va a guardar el contenido de la tecla pulsada.
    MensajeApuntado                    ; Va a guarda la dirección del mensaje apuntado.
    ENDC
        
    ELSE

    LIST        P=16F88
    INCLUDE        <P16F88.INC>
    __CONFIG _CONFIG1, _CP_OFF & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC
    __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF

    CBLOCK   0x20        
    TeclaPulsada                    ; Va a guardar el contenido de la tecla pulsada.
    MensajeApuntado                    ; Va a guarda la dirección del mensaje apuntado.
    ENDC

    ENDIF
Si alguien sabe como se hace, una ayudita no viene mal.

Saludo.






EDITO:

Ya me salió el truco que es este:
Código:
PROCESADOR    EQU    .1                ; 0=PIC16F88, 1=PIC16F84A. Elige un PIC.
    IF PROCESADOR    

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

    CBLOCK   0x0C        
    TeclaPulsada                    ; Va a guardar el contenido de la tecla pulsada.
    MensajeApuntado                    ; Va a guarda la dirección del mensaje apuntado.
    ENDC
        
    ELSE

    LIST        P=16F88
    INCLUDE        <P16F88.INC>
    __CONFIG _CONFIG1, _CP_OFF & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC
    __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF

    CBLOCK   0x20        
    TeclaPulsada                    ; Va a guardar el contenido de la tecla pulsada.
    MensajeApuntado                    ; Va a guarda la dirección del mensaje apuntado.
    ENDC

    ENDIF
Si quieren intentarlo con más de dos PIC lo intentaremos a ver si nos sale. Esto si que es una comodidad, sólo hay que seleccionar el PIC a usar en el MPLAB y en el mismo código fuente puede seleccionar muchos PIC con solo cambiar un número.

Código:
PROCESADOR    EQU    .1                ; 0=PIC16F88, 1=PIC16F84A. Elige un PIC.
Podemos hacer con varios PIC a ver si cuela.

16F84A
16F627A
16F628A
16F48
16F87
16F88
¿Alguno más?
01/01/2010 #2

Avatar de Vegetal Digital

Respuesta: Usando IF ELSE
no funcionará con un switch?

por ejemplo:
Código:
switch(pic)
{
case 16f84: ( #include...)
case 16f877: (etc...)
case 16f88: (...etc)
}
asi cambiariamos el numero de la variable pic y seleccionamos entre varias opciones.

Saludos
01/01/2010 #3

Avatar de Meta

Respuesta: Usando IF ELSE
Es en ensmblador usando directivas, switch no se incluye o no existe en el MPLAB v43.
01/01/2010 #4

Avatar de Vegetal Digital

Respuesta: Usando IF ELSE
Estoy probando en ccs solamente con if else, por ahora sin éxito. Si logro algo les escribo.
Saludos
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.