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

Temas similares

24/02/2011 #1

Avatar de Meta

Compilar código asm depende de la versión
Hola:

Quiero comentar y saber sus sugerencias. Hace tiempo hice un proyecto muy fácil para aprender bien como se maneja un PIC, no recuerdo con que versión del MPLAB lo hice. Me han confirmado otros usaurios por correo eletrcónico que lo han logrado compilar sin ningún problema con MPLAB v8.10. Lo he intentado con el MPLAB 8.63 y me da errores que puedes ver abajo.

----------------------------------------------------------------------
Release build of project `F:\COSAS\PIC16F84A\PIC\SENPIR\SENPIR.disposable_m cp' started.
Language tool versions: MPASMWIN.exe v5.39, mplink.exe v4.38, mplib.exe v4.38
Fri Feb 25 03:35:19 2011
----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Deleted file "F:\COSAS\PIC16F84A\PIC\SENPIR\SENPIR.mcs".
Clean: Done.
Executing: "C:\Program Files (x86)\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F84A "SENPIR.ASM" /l"SENPIR.lst" /e"SENPIR.err"
Error[115] F:\COSAS\PIC16F84A\PIC\SENPIR\SENPIR.ASM 103 : Duplicate label ("RB6" or redefining symbol that cannot be redefined)
Error[115] F:\COSAS\PIC16F84A\PIC\SENPIR\SENPIR.ASM 107 : Duplicate label ("RB7" or redefining symbol that cannot be redefined)
Halting build on first failure as requested.
----------------------------------------------------------------------
Release build of project `F:\COSAS\PIC16F84A\PIC\SENPIR\SENPIR.disposable_m cp' failed.
Language tool versions: MPASMWIN.exe v5.39, mplink.exe v4.38, mplib.exe v4.38
Fri Feb 25 03:35:24 2011
----------------------------------------------------------------------
BUILD FAILED
El código fuente de abajo funciona con el MPLAB v8.10.
Código:
;¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬Senpir.asm¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬
;
;        PROGRAMA:         "Senpir". Luz por detector de movimiento y crepuscular.
;        AUTOR:             Ángel Acaymo Martín González
;        E-MAIL;            metaconta@gmail.com
;        PROCESADOR:        PIC16F84A
;        FRECUENCIA:        4 MHz
;        VERSIÓN:        1.0
;        DESCRIPCIÓN:
;
;         Programa de un interruptor con sensor movimiento y de luz solar: Si es de noche,
;        mientras el sensor de movimiento (PIR) detecta la presencia de alguien 
;        entorno a 6 metros, activa o se    pone a 1 la entrada RA3 y la lámpara
;        se enciende. En caso de que sea de día detectado por la LDR, nunca se enciende 
;        la lámpara. En la otra opción, cuando la LDR detecta la noche o falta de Sol,
;        la lámpara se enciende, cuando sea de día, la lámpara se apaga.
;        En los microinterruptores puedes activar el tiempo que tarda en apagarse la 
;        lámpara después de ser detectado por el sensor Pir y de noche de un máximo
;        una hora y treinta y cinco minutos.
;
;¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬

; DATOS ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬
    LIST        P=16F84A
    INCLUDE        <P16F84A.INC>
    __CONFIG    3FF1
    __idlocs    0001                ; ID, versión del programa.

    CBLOCK  0x0C
    ENDC

#DEFINE        Led_verde    PORTA,0        ; Led verde indica opción LDR seleccionada.
#DEFINE        Led_rojo    PORTA,1        ; Led rojo indica opción PIR seleccionada.
#DEFINE        Led_azul    PORTA,2        ; Led azul indica que el Relé está activado.
#DEFINE        lámpara        PORTA,3        ; lámpara.
#DEFINE        PIR            PORTB,1        ; Sensor PIR.
#DEFINE        LDR            PORTB,3        ; Sensor LDR.
#DEFINE        Int_RB4        PORTB,4        ; Interruptor RB4.
#DEFINE        Int_RB5        PORTB,5        ; Interruptor RB5.
#DEFINE        Int_RB6        PORTB,6        ; Interruptor RB6.
#DEFINE        Int_RB7        PORTB,7        ; Interruptor RB7.

; EEPROM ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬

    ORG        0x2100                    ; Comienza en la direccoón 0 de la memoria EERPOM.
                                    ; Datos nombre del archivo, versión del programa
                                    ; y dirección del correo electrónico.
    DE    "Senpir.asm. v1.0. 25-03-2009. metaconta@gmail.com", 0x00
                                
; CÓDIGOS ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬

    ORG     0
Inicio
    bsf        STATUS,RP0                ; Accede al Banco 1.
    clrf    PORTA                    ; Puerto A como salidas.
    movlw    b'11111111'                ; Las 8 líneas del puerto B se configura como entradas.
    movwf    PORTB
    bcf        STATUS,RP0                ; Accede al Banco 0.
    clrf    PORTA                    ; Supuestamente la lámpara y Led apagadas.    

Opcion_principal
    btfss    Int_RB4                    ; ¿Bit 4 del PORTB es "1"? ¿Int_RB4 activado?
    goto    Opcion_LDR                ; No, activa modo LDR.
    goto    Opcion_PIR                ; Sí, activa modo PIR.

; INTERRUPTOR CREPUSCULAR LDR ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬

Opcion_LDR
    bcf        Led_rojo                ; Se apaga el Led rojo.                            
    bsf        Led_verde                ; Enciende Led verde indicando modo LDR activado.
    btfss    LDR                        ; ¿La entrada LDR es igual a 1?, ¿LDR en oscuridad?
    goto    Apaga_la_lámpara        ; No, la LDR está iluminada por el Sol. La lámpara se apaga.
Enciende_la_lámpara
    call    Retardo_20_seg            ; Espera 20 segundos para confirmar la oscuridad.
    btfss    LDR                        ; ¿Entrada es igual a 1?, ¿LDR aún en oscuridad?
    goto    Opcion_principal        ; No, sale fuera.
    bsf        lámpara                    ; Sí, enciende la lámpara.
    bsf        Led_azul                ; Led_azul activo.
    goto    Opcion_principal
Apaga_la_lámpara
    call    Retardo_20_seg            ; Espera 20 segundos para confirmar la oscuridad.
    btfsc    LDR                        ; ¿Entrada es = 0?, ¿LDR sigue iluminada por luz del sol?
    goto    Opcion_principal        ; No, sale fuera.
    bcf        lámpara                    ; Sí, apaga lámpara.
    bcf        Led_azul                ; Led_azul indica que la lámpara está apagada.
    goto    Opcion_principal

; DETECTOR DE MOVIMIENTO ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬

Opcion_PIR    
    bcf        Led_verde                ; Apaga el Led verde de aviso.
    bsf        Led_rojo                ; Enciende Led rojo avisando que está activado el modo PIR.
    btfss    LDR                        ; ¿La entrada LDR es igual a 1?, ¿LDR en oscuridad?
    goto    lámpara_OFF                ; No.
    btfss    PIR                        ; ¿La entrada PIR es igual a 1?, ¿PIR ha detectado presencia?
    goto    lámpara_OFF                ; No, no ha detectado presencia o movimiento.
lámpara_ON
    bsf        lámpara                    ; Sí, enciende la lámpara.
    bsf        Led_azul                ; Led_azul activo.
    btfss    Int_RB5                    ; ¿Bit 5 del PORTB es igual a 1?, ¿Activado el interruptor RB5?
    goto    RB6                        ; No, salta a la línea siguiente.
    call    Retardo_5_min            ; Tiempo lámpara encendida 5 minutos.
RB6
    btfss    Int_RB6                    ; ¿Bit 6 del PORTB es igual a 1?, ¿Activado el interruptor RB6?
    goto    RB7
    call    Retardo_30_min            ; Tiempo lámpara encendida 30 minutos.
RB7
    btfss    Int_RB7                    ; ¿Bit 7 del PORTB es igual a 1?, ¿Activado el interruptor RB7?
    goto    Opcion_principal
    call    Retardo_1_hora            ; Tiempo lámpara encendida 1 hora.
    goto    Opcion_principal
lámpara_OFF
    bcf        lámpara                ;     Apaga lámpara.
    bcf        Led_azul                ; Apaga Led_azul.
    goto    Opcion_principal

; SUBRUTINAS ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬

; Retardo de 20 segundos ................................................................
    cblock
    ret_00
    ret_01
    ret_02
    Nulo
    endc

Retardo_20_seg
            ;19999992 ciclos
    movlw    0xB5
    movwf    ret_00
    movlw    0x99
    movwf    ret_01
    movlw    0x2C
    movwf    ret_02
Retardo_20_seg_0
    decfsz    ret_00, f
    goto    $+2
    decfsz    ret_01, f
    goto    $+2
    decfsz    ret_02, f
    goto    Retardo_20_seg_0

            ;4 ciclos
    goto    $+1
    goto    $+1

            ;4 ciclos (incluyendo call)
    return

; Retardo de 5 minutos ..................................................................
    cblock
    ret_05
    ret_06
    ret_07
    ret_08
    endc

Retardo_5_min
            ;299999995 ciclos
    movlw    0x54
    movwf    ret_05
    movlw    0xA1
    movwf    ret_06
    movlw    0xFD
    movwf    ret_07
    movlw    0x02
    movwf    ret_08
Retardo_5_min_0
    decfsz    ret_05, f
    goto    $+2
    decfsz    ret_06, f
    goto    $+2
    decfsz    ret_07, f
    goto    $+2
    decfsz    ret_08, f
    goto    Retardo_5_min_0

            ;1 ciclo
    nop

            ;4 ciclos (incluyendo call)
    return

; Retardo de 30 minutos .................................................................
    cblock    
    ret_09
    ret_10
    ret_11
    ret_12
    endc

Retardo_30_min
            ;1799999989 ciclos
    movlw    0xFE
    movwf    ret_09
    movlw    0xC2
    movwf    ret_10
    movlw    0xEC
    movwf    ret_11
    movlw    0x0C
    movwf    ret_12
Retardo_30_min_0
    decfsz    ret_09, f
    goto    $+2
    decfsz    ret_10, f
    goto    $+2
    decfsz    ret_11, f
    goto    $+2
    decfsz    ret_12, f
    goto    Retardo_30_min_0

            ;7 ciclos
    goto    $+1
    goto    $+1
    goto    $+1
    nop

            ;4 ciclos (incluyendo call)
    return

; Retardo de 1 hora .....................................................................
    cblock
    ret_13
    ret_14
    ret_15
    ret_16
    endc

Retardo_1_hora
            ;3599999989 ciclos
    movlw    0xFE
    movwf    ret_13
    movlw    0x84
    movwf    ret_14
    movlw    0xD8
    movwf    ret_15
    movlw    0x18
    movwf    ret_16
Retardo_1_hora_0
    decfsz    ret_13, f
    goto    $+2
    decfsz    ret_14, f
    goto    $+2
    decfsz    ret_15, f
    goto    $+2
    decfsz    ret_16, f
    goto    Retardo_1_hora_0

            ;7 ciclos
    goto    $+1
    goto    $+1
    goto    $+1
    nop

            ;4 ciclos (incluyendo call)
    return

    END
Esto no lo sabía, con razón ahora entiendo mejor el motivo que el fabricante publica las varias versiones del MPLAB muy antiguas y no tan antiguas.

http://www.microchip.com/stellent/id...cName=en023073

¿Alguna curiosidad, comentario, etc?

Saludo.
24/02/2011 #2
Moderador

Avatar de Chico3001

RB6 y RB7 en las lineas 103 y 107 ya estan declaradas por el compilador.. asi que necesitas cambiar las etiquetas por otra cosa....
24/02/2011 #3

Avatar de Meta

Hola:

Ya lo se para la próxima, antes no me pasaba.

Gracias por la respuesta muy clara.
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.