Autor Tema: error al compilar codigo secuenciador pic 16f84a  (Leído 1293 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado pic_877a

  • PIC16
  • ***
  • Mensajes: 172
error al compilar codigo secuenciador pic 16f84a
« en: 31 de Julio de 2022, 20:26:47 »
saludos amigos
como se acerca tiempo de navidad, decidí realizar un código secuenciador usando pic 16f84a,  tiene como tarea de leer 3 interruptores switch para tener 8 efectos y secuencias diferentes a la salida.

cuando hago la compilación del código, me genera muchos errores,  podrían ayudarme a corregir los errores amigos.
adjunto  las imágenes de lo errores.
:(

include "p16f84a.inc" ;En esta linea se especifica la biblioteca que incluye los registros definidos
radix hex ; Esta linea indica litelares(constantes) expresados en formato hexadecimal


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; igualdades de la CPU y el mapa de memoria;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
reg equ 0x0c
con1 equ 0x0d
con2 equ 0x0e
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;; inicio del programa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

org 0
goto inicio

inicio bsf status,rp0 ; cambio al banco 1 para configurar el pic
movlw 0xff ;puerto A como entrada
movwf trisa; puerto A como entrada
movlw 0x00 ;puerto B como salida
movwf trisb;puerto B como salida
bcf status,rp0 ;cambio al banco 0
clrf portb ;apago los leds a la salida
clrf con1;valor inicial de contador 1 igual a 0x00
clrf con2;valor inicial de contador 2 igual a 0x00

;;;;;;;;;;;;;;;;;;;;;; Lectura del puerto A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
leer movf porta,w
sublw 0x00 ;si el valor del puerto A es 0x00 implemento efecto_uno
btfsc status,z
goto efecto_uno
movf porta,w
sublw 0x01 ;si el valor del puerto A es 0x01 implemento efecto_dos
btfsc status,z
goto efecto_dos
movf porta,w
sublw 0x02 ;si el valor del puerto A es 0x02 implemento efecto_tres
btfsc status,z
goto efecto_tres
movf porta,w
sublw 0x03 ;si el valor del puerto A es 0x03 implemento efecto_cuatro
btfsc status,z
goto efecto_cuatro
movf porta,w
sublw 0x04 ;si el valor del puerto A es 0x04 implemento efecto_cinco
btfsc status,z
goto efecto_cinco
movf porta,w
sublw 0x05 ;si el valor del puerto A es 0x05 implemento efecto_seis
btfsc status,z
goto efecto_seis
movf porta,w
sublw 0x06 ;si el valor del puerto A es 0x06 implemento efecto_siete
btfsc status,z
goto efecto_siete
movf porta,w
sublw 0x07 ;si el valor del puerto A es 0x07 implemento efecto_ocho
btfsc status,z
goto efecto_ocho
goto leer

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_uno movlw 0x09;se coloca literal 9 porque cada efecto tiene 8 secuencias
movwf reg
leo_uno decfsz reg,f
goto fx_uno
goto leer

fx_uno movf reg,w
call tabla_uno
movwf portb
call retardo
goto leo_uno

tabla_uno addwf pcl,f ;;; tabla de secuencia de efecto_uno
return
retlw b'01111111'
retlw b'10111111'
retlw b'11011111'
retlw b'11101111'
retlw b'11110111'
retlw b'11111011'
retlw b'11111101'
retlw b'11111110'


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ACA DEBERIAN IR LOS DEMAS BLOQUES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DE LOS EFECTOS RESTANTES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



retardo decfsz con1,f ;; bloque retardo
goto retardo
decfsz con2,f
goto retardo
return

end
 

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:error al compilar codigo secuenciador pic 16f84a
« Respuesta #1 en: 31 de Julio de 2022, 20:54:17 »
Las instrucciones nunca deberian ir en la columna 1. Solo las etiquetas y algunas otras cosas mas..

Ejemplo:

Código: ASM
  1. inicio bsf status,rp0 ; cambio al banco 1 para configurar el pic
  2. movlw 0xff ;puerto A como entrada
  3. movwf trisa; puerto A como entrada
  4. movlw 0x00 ;puerto B como salida
  5. movwf trisb;puerto B como salida

Deberia ser:

Código: ASM
  1. inicio:
  2.      bsf status,rp0 ; cambio al banco 1 para configurar el pic
  3.      movlw 0xff ;puerto A como entrada
  4.      movwf trisa; puerto A como entrada
  5.      movlw 0x00 ;puerto B como salida
  6.      movwf trisb;puerto B como salida

Por otra parte estas haciendo:

Citar
sublw 0x02 ;si el valor del puerto A es 0x02 implemento efecto_tres
btfsc status,z
goto efecto_tres

Cuando no existe ninguna etiqueta llamada efecto_tres, la unica que posees es efecto_uno

Luego tenes que no encuentra "status","porta" entre otros, eso es un problema con el include p16f84a.inc

Desconectado pic_877a

  • PIC16
  • ***
  • Mensajes: 172
Re:error al compilar codigo secuenciador pic 16f84a
« Respuesta #2 en: 31 de Julio de 2022, 21:03:19 »

podrías por favor  ayudarme a corregir todo el código con los 8 efectos, apenas estoy aprendiendo con el mplab,
gracias

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:error al compilar codigo secuenciador pic 16f84a
« Respuesta #3 en: 31 de Julio de 2022, 21:27:22 »
Realizas los cambios que se te dijo.
Hace:

efecto_uno:
efecto_dos:
efecto_tres:
efecto_cuatro:
efecto_cinco:
    movlw 0x09

Para que puedas compilar y no de te error por los efectos faltantes, en el momento que escribas el código del efecto lo borras de ahí.

Compilas de nuevo
Buscas los errores y warning nuevos. Tratas de solucionarlo. Volves compilar y comenzar todo de nuevo.

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 965
Re:error al compilar codigo secuenciador pic 16f84a
« Respuesta #4 en: 01 de Agosto de 2022, 00:36:16 »
Además de los errores que señala Killerjc,  veo que estás compilando con la opción "Case Sensitive" activada.
Eso hace que en nombres como status,z,trisa...  te dé error pues en el include están definidos en mayúscula.
O bien cancelas esa opción o pasás esos nombres a mayúscula.

Desconectado pic_877a

  • PIC16
  • ***
  • Mensajes: 172
Re:error al compilar codigo secuenciador pic 16f84a
« Respuesta #5 en: 01 de Agosto de 2022, 14:22:53 »
Además de los errores que señala Killerjc,  veo que estás compilando con la opción "Case Sensitive" activada.
Eso hace que en nombres como status,z,trisa...  te dé error pues en el include están definidos en mayúscula.
O bien cancelas esa opción o pasás esos nombres a mayúscula.

he realizado nuevo proyecto y he desactivado las mayúsculas.
nuevo código

 include "p16f84a.inc"   ;En esta linea se especifica la biblioteca que incluye los registros definidos
        radix   hex             ; Esta linea indica litelares(constantes) expresados en formato hexadecimal
        errorlevel -302         ; Turn off banking message

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; igualdades de la CPU y el mapa de memoria;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
reg     equ     0x0c
con1    equ     0x0d
con2    equ     0x0e
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;; inicio del programa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        org     0
        goto    inicio
inicio  bsf     STATUS,RP0      ; cambio al banco 1 para configurar el pic
        movlw   0xff            ;puerto A como entrada
        movwf   trisa           ; puerto A como entrada
        movlw   0x00            ;puerto B como salida
        movwf   trisb           ;puerto B como salida
        bcf     status,rp0      ;cambio al banco 0
        clrf    portb           ;apago los leds a la salida
        clrf    con1            ;valor inicial de contador 1 igual a 0x00
        clrf    con2            ;valor inicial de contador 2 igual a 0x00
;;;;;;;;;;;;;;;;;;;;;; Lectura del puerto A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
leer:
        movf    porta,w
        sublw   0x00            ;si el valor del puerto A es 0x00 implemento efecto_uno
        btfsc   status,z
        goto    efecto_uno
        movf    porta,w
        sublw   0x01            ;si el valor del puerto A es 0x01 implemento efecto_dos
        btfsc   status,z
        goto    efecto_dos
        movf    porta,w
        sublw   0x02            ;si el valor del puerto A es 0x02 implemento efecto_tres
        btfsc   status,z
        goto    efecto_tres
        movf    porta,w
        sublw   0x03            ;si el valor del puerto A es 0x03 implemento efecto_cuatro
        btfsc   status,z
        goto    efecto_cuatro
        movf    porta,w
        sublw   0x04            ;si el valor del puerto A es 0x04 implemento efecto_cinco
        btfsc   status,z
        goto    efecto_cinco
        movf    porta,w
        sublw   0x05            ;si el valor del puerto A es 0x05 implemento efecto_seis
        btfsc   status,z
        goto    efecto_seis
        movf    porta,w
        sublw   0x06            ;si el valor del puerto A es 0x06 implemento efecto_siete
        btfsc   status,z
        goto    efecto_siete
        movf    porta,w
        sublw   0x07            ;si el valor del puerto A es 0x07 implemento efecto_ocho
        btfsc   status,z
        goto    efecto_ocho
        goto    leer
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_uno:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_uno:
        decfsz  reg,f
        goto    fx_uno
        goto    leer
fx_uno:
        movf    reg,w
        call    tabla_uno
        movwf   portb
        call    retardo
        goto    leo_uno
       
tabla_uno:
        addwf pcl,f             ;;; tabla de secuencia de efecto_uno
        return
        retlw   b'01111111'
        retlw   b'10111111'
        retlw   b'11011111'
        retlw   b'11101111'
        retlw   b'11110111'
        retlw   b'11111011'
        retlw   b'11111101'
        retlw   b'11111110'

retardo:
        decfsz  con1,f          ;; bloque retardo
        goto    retardo
        decfsz  con2,f
        goto    retardo
        return
       
        end
 
al compilar me genera estos errores, adjunto imagen
se que estos errores se genera por que no he realizado en el código los demás efectos cierto.

entonces para realizar el segundo efecto quedaría asi

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_dos:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_dos:
        decfsz  reg,f
        goto    fx_uno
        goto    leer
fx_dos:
        movf    reg,w
        call    tabla_uno
        movwf   portb
        call    retardo
        goto    leo_dos
       
tabla_dos:
        addwf pcl,f             ;;; tabla de secuencia de efecto_dos
        return
        retlw   b'01011011'
        retlw   b'10101011'
        retlw   b'11011011'
        retlw   b'11101101'
        retlw   b'01110111'
        retlw   b'01011011'
        retlw   b'10101101'
        retlw   b'01110110'

 :?:

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 965
Re:error al compilar codigo secuenciador pic 16f84a
« Respuesta #6 en: 01 de Agosto de 2022, 15:51:06 »
Insertá igual las etiquetas que faltan, asì al menos te va a compilar y podés ir verificando el código.   Después vas agregando de a uno los efectos.

Algo así:
Código: [Seleccionar]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

efecto_tres
efecto_cuatro
efecto_cinco
efecto_seis
efecto_siete
efecto_ocho
efecto_dos:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
       
        ...............

Desconectado pic_877a

  • PIC16
  • ***
  • Mensajes: 172
Re:error al compilar codigo secuenciador pic 16f84a
« Respuesta #7 en: 01 de Agosto de 2022, 15:58:30 »
Insertá igual las etiquetas que faltan, asì al menos te va a compilar y podés ir verificando el código.   Después vas agregando de a uno los efectos.

Algo así:
Código: [Seleccionar]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

efecto_tres
efecto_cuatro
efecto_cinco
efecto_seis
efecto_siete
efecto_ocho
efecto_dos:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
       
        ...............

este es el código completo sin errores 

 include "p16f84a.inc"   ;En esta linea se especifica la biblioteca que incluye los registros definidos
        radix   hex             ; Esta linea indica litelares(constantes) expresados en formato hexadecimal
        errorlevel -302         ; Turn off banking message

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; igualdades de la CPU y el mapa de memoria;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
reg     equ     0x0c
con1    equ     0x0d
con2    equ     0x0e
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;; inicio del programa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        org     0
        goto    inicio
inicio  bsf     STATUS,RP0      ; cambio al banco 1 para configurar el pic
        movlw   0xff            ;puerto A como entrada
        movwf   trisa           ; puerto A como entrada
        movlw   0x00            ;puerto B como salida
        movwf   trisb           ;puerto B como salida
        bcf     status,rp0      ;cambio al banco 0
        clrf    portb           ;apago los leds a la salida
        clrf    con1            ;valor inicial de contador 1 igual a 0x00
        clrf    con2            ;valor inicial de contador 2 igual a 0x00
;;;;;;;;;;;;;;;;;;;;;; Lectura del puerto A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
leer:
        movf    porta,w
        sublw   0x00            ;si el valor del puerto A es 0x00 implemento efecto_uno
        btfsc   status,z
        goto    efecto_uno
        movf    porta,w
        sublw   0x01            ;si el valor del puerto A es 0x01 implemento efecto_dos
        btfsc   status,z
        goto    efecto_dos
        movf    porta,w
        sublw   0x02            ;si el valor del puerto A es 0x02 implemento efecto_tres
        btfsc   status,z
        goto    efecto_tres
        movf    porta,w
        sublw   0x03            ;si el valor del puerto A es 0x03 implemento efecto_cuatro
        btfsc   status,z
        goto    efecto_cuatro
        movf    porta,w
        sublw   0x04            ;si el valor del puerto A es 0x04 implemento efecto_cinco
        btfsc   status,z
        goto    efecto_cinco
        movf    porta,w
        sublw   0x05            ;si el valor del puerto A es 0x05 implemento efecto_seis
        btfsc   status,z
        goto    efecto_seis
        movf    porta,w
        sublw   0x06            ;si el valor del puerto A es 0x06 implemento efecto_siete
        btfsc   status,z
        goto    efecto_siete
        movf    porta,w
        sublw   0x07            ;si el valor del puerto A es 0x07 implemento efecto_ocho
        btfsc   status,z
        goto    efecto_ocho
        goto    leer
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_uno:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_uno:
        decfsz  reg,f
        goto    fx_uno
        goto    leer
fx_uno:
        movf    reg,w
        call    tabla_uno
        movwf   portb
        call    retardo
        goto    leo_uno
       
tabla_uno:
        addwf pcl,f             ;;; tabla de secuencia de efecto_uno
        return
        retlw   b'01111111'
        retlw   b'10111111'
        retlw   b'11011111'
        retlw   b'11101111'
        retlw   b'11110111'
        retlw   b'11111011'
        retlw   b'11111101'
        retlw   b'11111110'

retardo:
        decfsz  con1,f          ;; bloque retardo
        goto    retardo
        decfsz  con2,f
        goto    retardo
        return
       


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_dos:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_dos:
        decfsz  reg,f
        goto    fx_dos
        goto    leer
fx_dos:
        movf    reg,w
        call    tabla_dos
        movwf   portb
        call    retardo
        goto    leo_dos
       
tabla_dos:
        addwf pcl,f             ;;; tabla de secuencia de efecto_dos
        return
        retlw   b'01011011'
        retlw   b'10101011'
        retlw   b'11011011'
        retlw   b'11101101'
        retlw   b'01110111'
        retlw   b'01011011'
        retlw   b'10101101'
        retlw   b'01110110'

retardo:
        decfsz  con1,f          ;; bloque retardo
        goto    retardo
        decfsz  con2,f
        goto    retardo
        return


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_tres:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_tres:
        decfsz  reg,f
        goto    fx_tres
        goto    leer
fx_tres:
        movf    reg,w
        call    tabla_tres
        movwf   portb
        call    retardo
        goto    leo_tres
       
tabla_tres:
        addwf pcl,f             ;;; tabla de secuencia de efecto_tres
        return
        retlw   b'11011010'
        retlw   b'00101111'
        retlw   b'01011010'
        retlw   b'00101101'
        retlw   b'00110110'
        retlw   b'11011010'
        retlw   b'10101110'
        retlw   b'11010111'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_cuatro:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_cuatro:
        decfsz  reg,f
        goto    fx_cuatro
        goto    leer
fx_cuatro:
        movf    reg,w
        call    tabla_cuatro
        movwf   portb
        call    retardo
        goto    leo_cuatro
       
tabla_cuatro:
        addwf pcl,f             ;;; tabla de secuencia de efecto_cuatro
        return
        retlw   b'01011011'
        retlw   b'10101011'
        retlw   b'11011011'
        retlw   b'10101101'
        retlw   b'10110011'
        retlw   b'11011011'
        retlw   b'10100110'
        retlw   b'01010011'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_cinco:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_cinco:
        decfsz  reg,f
        goto    fx_cinco
        goto    leer
fx_cinco:
        movf    reg,w
        call    tabla_cuatro
        movwf   portb
        call    retardo
        goto    leo_cinco
       
tabla_cinco:
        addwf pcl,f             ;;; tabla de secuencia de efecto_cinco
        return
        retlw   b'11011010'
        retlw   b'00111000'
        retlw   b'11011010'
        retlw   b'00101011'
        retlw   b'10111010'
        retlw   b'01001011'
        retlw   b'10100101'
        retlw   b'11011010'


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_seis:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_seis:
        decfsz  reg,f
        goto    fx_seis
        goto    leer
fx_seis:
        movf    reg,w
        call    tabla_seis
        movwf   portb
        call    retardo
        goto    leo_seis
       
tabla_seis:
        addwf pcl,f             ;;; tabla de secuencia de efecto_seis
        return
        retlw   b'11011011'
        retlw   b'01101010'
        retlw   b'01011011'
        retlw   b'10101010'
        retlw   b'00101010'
        retlw   b'11011011'
        retlw   b'00110101'
        retlw   b'01011011'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_siete:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_siete:
        decfsz  reg,f
        goto    fx_siete
        goto    leer
fx_siete:
        movf    reg,w
        call    tabla_siete
        movwf   portb
        call    retardo
        goto    leo_siete
       
tabla_siete:
        addwf pcl,f             ;;; tabla de secuencia de efecto_siete
        return
        retlw   b'01011010'
        retlw   b'10101011'
        retlw   b'11011010'
        retlw   b'00101011'
        retlw   b'10100011'
        retlw   b'01011010'
        retlw   b'10110100'
        retlw   b'11010010'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_ocho:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_ocho:
        decfsz  reg,f
        goto    fx_ocho
        goto    leer
fx_ocho:
        movf    reg,w
        call    tabla_siete
        movwf   portb
        call    retardo
        goto    leo_ocho
       
tabla_ocho:
        addwf pcl,f             ;;; tabla de secuencia de efecto_siete
        return
        retlw   b'11011011'
        retlw   b'00101010'
        retlw   b'11011010'
        retlw   b'10101011'
        retlw   b'00101010'
        retlw   b'11011011'
        retlw   b'00110101'
        retlw   b'01011010'
       
  end

       veo que en cada bloque hace falta un retardo cierto :?:


Desconectado pic_877a

  • PIC16
  • ***
  • Mensajes: 172
Re:error al compilar codigo secuenciador pic 16f84a
« Respuesta #8 en: 01 de Agosto de 2022, 16:08:47 »
Insertá igual las etiquetas que faltan, asì al menos te va a compilar y podés ir verificando el código.   Después vas agregando de a uno los efectos.

Algo así:
Código: [Seleccionar]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

efecto_tres
efecto_cuatro
efecto_cinco
efecto_seis
efecto_siete
efecto_ocho
efecto_dos:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
       
        ...............

este es el código completo con error en bloque 2,  retardo duplicado

 include "p16f84a.inc"   ;En esta linea se especifica la biblioteca que incluye los registros definidos
        radix   hex             ; Esta linea indica litelares(constantes) expresados en formato hexadecimal
        errorlevel -302         ; Turn off banking message

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; igualdades de la CPU y el mapa de memoria;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
reg     equ     0x0c
con1    equ     0x0d
con2    equ     0x0e
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;; inicio del programa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        org     0
        goto    inicio
inicio  bsf     STATUS,RP0      ; cambio al banco 1 para configurar el pic
        movlw   0xff            ;puerto A como entrada
        movwf   trisa           ; puerto A como entrada
        movlw   0x00            ;puerto B como salida
        movwf   trisb           ;puerto B como salida
        bcf     status,rp0      ;cambio al banco 0
        clrf    portb           ;apago los leds a la salida
        clrf    con1            ;valor inicial de contador 1 igual a 0x00
        clrf    con2            ;valor inicial de contador 2 igual a 0x00
;;;;;;;;;;;;;;;;;;;;;; Lectura del puerto A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
leer:
        movf    porta,w
        sublw   0x00            ;si el valor del puerto A es 0x00 implemento efecto_uno
        btfsc   status,z
        goto    efecto_uno
        movf    porta,w
        sublw   0x01            ;si el valor del puerto A es 0x01 implemento efecto_dos
        btfsc   status,z
        goto    efecto_dos
        movf    porta,w
        sublw   0x02            ;si el valor del puerto A es 0x02 implemento efecto_tres
        btfsc   status,z
        goto    efecto_tres
        movf    porta,w
        sublw   0x03            ;si el valor del puerto A es 0x03 implemento efecto_cuatro
        btfsc   status,z
        goto    efecto_cuatro
        movf    porta,w
        sublw   0x04            ;si el valor del puerto A es 0x04 implemento efecto_cinco
        btfsc   status,z
        goto    efecto_cinco
        movf    porta,w
        sublw   0x05            ;si el valor del puerto A es 0x05 implemento efecto_seis
        btfsc   status,z
        goto    efecto_seis
        movf    porta,w
        sublw   0x06            ;si el valor del puerto A es 0x06 implemento efecto_siete
        btfsc   status,z
        goto    efecto_siete
        movf    porta,w
        sublw   0x07            ;si el valor del puerto A es 0x07 implemento efecto_ocho
        btfsc   status,z
        goto    efecto_ocho
        goto    leer
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_uno:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_uno:
        decfsz  reg,f
        goto    fx_uno
        goto    leer
fx_uno:
        movf    reg,w
        call    tabla_uno
        movwf   portb
        call    retardo
        goto    leo_uno
       
tabla_uno:
        addwf pcl,f             ;;; tabla de secuencia de efecto_uno
        return
        retlw   b'01111111'
        retlw   b'10111111'
        retlw   b'11011111'
        retlw   b'11101111'
        retlw   b'11110111'
        retlw   b'11111011'
        retlw   b'11111101'
        retlw   b'11111110'

retardo:
        decfsz  con1,f          ;; bloque retardo
        goto    retardo
        decfsz  con2,f
        goto    retardo
        return
       


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_dos:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_dos:
        decfsz  reg,f
        goto    fx_dos
        goto    leer
fx_dos:
        movf    reg,w
        call    tabla_dos
        movwf   portb
        call    retardo
        goto    leo_dos
       
tabla_dos:
        addwf pcl,f             ;;; tabla de secuencia de efecto_dos
        return
        retlw   b'01011011'
        retlw   b'10101011'
        retlw   b'11011011'
        retlw   b'11101101'
        retlw   b'01110111'
        retlw   b'01011011'
        retlw   b'10101101'
        retlw   b'01110110'

retardo:
        decfsz  con1,f          ;; bloque retardo
        goto    retardo
        decfsz  con2,f
        goto    retardo
        return


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_tres:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_tres:
        decfsz  reg,f
        goto    fx_tres
        goto    leer
fx_tres:
        movf    reg,w
        call    tabla_tres
        movwf   portb
        call    retardo
        goto    leo_tres
       
tabla_tres:
        addwf pcl,f             ;;; tabla de secuencia de efecto_tres
        return
        retlw   b'11011010'
        retlw   b'00101111'
        retlw   b'01011010'
        retlw   b'00101101'
        retlw   b'00110110'
        retlw   b'11011010'
        retlw   b'10101110'
        retlw   b'11010111'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_cuatro:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_cuatro:
        decfsz  reg,f
        goto    fx_cuatro
        goto    leer
fx_cuatro:
        movf    reg,w
        call    tabla_cuatro
        movwf   portb
        call    retardo
        goto    leo_cuatro
       
tabla_cuatro:
        addwf pcl,f             ;;; tabla de secuencia de efecto_cuatro
        return
        retlw   b'01011011'
        retlw   b'10101011'
        retlw   b'11011011'
        retlw   b'10101101'
        retlw   b'10110011'
        retlw   b'11011011'
        retlw   b'10100110'
        retlw   b'01010011'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_cinco:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_cinco:
        decfsz  reg,f
        goto    fx_cinco
        goto    leer
fx_cinco:
        movf    reg,w
        call    tabla_cuatro
        movwf   portb
        call    retardo
        goto    leo_cinco
       
tabla_cinco:
        addwf pcl,f             ;;; tabla de secuencia de efecto_cinco
        return
        retlw   b'11011010'
        retlw   b'00111000'
        retlw   b'11011010'
        retlw   b'00101011'
        retlw   b'10111010'
        retlw   b'01001011'
        retlw   b'10100101'
        retlw   b'11011010'


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_seis:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_seis:
        decfsz  reg,f
        goto    fx_seis
        goto    leer
fx_seis:
        movf    reg,w
        call    tabla_seis
        movwf   portb
        call    retardo
        goto    leo_seis
       
tabla_seis:
        addwf pcl,f             ;;; tabla de secuencia de efecto_seis
        return
        retlw   b'11011011'
        retlw   b'01101010'
        retlw   b'01011011'
        retlw   b'10101010'
        retlw   b'00101010'
        retlw   b'11011011'
        retlw   b'00110101'
        retlw   b'01011011'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_siete:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_siete:
        decfsz  reg,f
        goto    fx_siete
        goto    leer
fx_siete:
        movf    reg,w
        call    tabla_siete
        movwf   portb
        call    retardo
        goto    leo_siete
       
tabla_siete:
        addwf pcl,f             ;;; tabla de secuencia de efecto_siete
        return
        retlw   b'01011010'
        retlw   b'10101011'
        retlw   b'11011010'
        retlw   b'00101011'
        retlw   b'10100011'
        retlw   b'01011010'
        retlw   b'10110100'
        retlw   b'11010010'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_ocho:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_ocho:
        decfsz  reg,f
        goto    fx_ocho
        goto    leer
fx_ocho:
        movf    reg,w
        call    tabla_siete
        movwf   portb
        call    retardo
        goto    leo_ocho
       
tabla_ocho:
        addwf pcl,f             ;;; tabla de secuencia de efecto_siete
        return
        retlw   b'11011011'
        retlw   b'00101010'
        retlw   b'11011010'
        retlw   b'10101011'
        retlw   b'00101010'
        retlw   b'11011011'
        retlw   b'00110101'
        retlw   b'01011010'
       
  end

       veo que en cada bloque hace falta un retardo cierto :?:

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 965
Re:error al compilar codigo secuenciador pic 16f84a
« Respuesta #9 en: 01 de Agosto de 2022, 18:43:58 »
....
       veo que en cada bloque hace falta un retardo cierto :?:

Todo lo contrario, te sobran.   La rutina "retardo" la estás definiendo dos veces (en la líne 84 y en la 120)

Desconectado pic_877a

  • PIC16
  • ***
  • Mensajes: 172
Re:error al compilar codigo secuenciador pic 16f84a
« Respuesta #10 en: 01 de Agosto de 2022, 18:51:30 »
....
       veo que en cada bloque hace falta un retardo cierto :?:

Todo lo contrario, te sobran.   La rutina "retardo" la estás definiendo dos veces (en la líne 84 y en la 120)

en el primer bloque uno  coloque la la rutina de retardo, y si  elimino la rutina del bloque 2, cuando compilo no genera error, mira la rutina de retardo en bloque uno y asi se debe estar en los demás bloques o no?

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 965
Re:error al compilar codigo secuenciador pic 16f84a
« Respuesta #11 en: 01 de Agosto de 2022, 19:02:15 »
...
en el primer bloque uno  coloque la la rutina de retardo, y si  elimino la rutina del bloque 2, cuando compilo no genera error, mira la rutina de retardo en bloque uno y asi se debe estar en los demás bloques o no?

Si quisieras hacer eso, una rutina "retardo"  por cada bloque, no las podés llamar igual por razones obvias. 
Tendrías que llamarlas "retardo1","retardo2","retardo3"...     

Peor eso tendría sentido si los retardos fueran diferentes no solo en tiempo sino que modficaran variables.  Si son todos iguales... para qué duplicar?

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:error al compilar codigo secuenciador pic 16f84a
« Respuesta #12 en: 01 de Agosto de 2022, 19:30:20 »
Insertá igual las etiquetas que faltan, asì al menos te va a compilar y podés ir verificando el código.   Después vas agregando de a uno los efectos.

Algo así:
Código: [Seleccionar]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

efecto_tres
efecto_cuatro
efecto_cinco
efecto_seis
efecto_siete
efecto_ocho
efecto_dos:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
       
        ...............

este es el código completo sin errores 

 include "p16f84a.inc"   ;En esta linea se especifica la biblioteca que incluye los registros definidos
        radix   hex             ; Esta linea indica litelares(constantes) expresados en formato hexadecimal
        errorlevel -302         ; Turn off banking message

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; igualdades de la CPU y el mapa de memoria;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
reg     equ     0x0c
con1    equ     0x0d
con2    equ     0x0e
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;; inicio del programa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        org     0
        goto    inicio
inicio  bsf     STATUS,RP0      ; cambio al banco 1 para configurar el pic
        movlw   0xff            ;puerto A como entrada
        movwf   trisa           ; puerto A como entrada
        movlw   0x00            ;puerto B como salida
        movwf   trisb           ;puerto B como salida
        bcf     status,rp0      ;cambio al banco 0
        clrf    portb           ;apago los leds a la salida
        clrf    con1            ;valor inicial de contador 1 igual a 0x00
        clrf    con2            ;valor inicial de contador 2 igual a 0x00
;;;;;;;;;;;;;;;;;;;;;; Lectura del puerto A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
leer:
        movf    porta,w
        sublw   0x00            ;si el valor del puerto A es 0x00 implemento efecto_uno
        btfsc   status,z
        goto    efecto_uno
        movf    porta,w
        sublw   0x01            ;si el valor del puerto A es 0x01 implemento efecto_dos
        btfsc   status,z
        goto    efecto_dos
        movf    porta,w
        sublw   0x02            ;si el valor del puerto A es 0x02 implemento efecto_tres
        btfsc   status,z
        goto    efecto_tres
        movf    porta,w
        sublw   0x03            ;si el valor del puerto A es 0x03 implemento efecto_cuatro
        btfsc   status,z
        goto    efecto_cuatro
        movf    porta,w
        sublw   0x04            ;si el valor del puerto A es 0x04 implemento efecto_cinco
        btfsc   status,z
        goto    efecto_cinco
        movf    porta,w
        sublw   0x05            ;si el valor del puerto A es 0x05 implemento efecto_seis
        btfsc   status,z
        goto    efecto_seis
        movf    porta,w
        sublw   0x06            ;si el valor del puerto A es 0x06 implemento efecto_siete
        btfsc   status,z
        goto    efecto_siete
        movf    porta,w
        sublw   0x07            ;si el valor del puerto A es 0x07 implemento efecto_ocho
        btfsc   status,z
        goto    efecto_ocho
        goto    leer
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_uno:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_uno:
        decfsz  reg,f
        goto    fx_uno
        goto    leer
fx_uno:
        movf    reg,w
        call    tabla_uno
        movwf   portb
        call    retardo
        goto    leo_uno
       
tabla_uno:
        addwf pcl,f             ;;; tabla de secuencia de efecto_uno
        return
        retlw   b'01111111'
        retlw   b'10111111'
        retlw   b'11011111'
        retlw   b'11101111'
        retlw   b'11110111'
        retlw   b'11111011'
        retlw   b'11111101'
        retlw   b'11111110'

retardo:
        decfsz  con1,f          ;; bloque retardo
        goto    retardo
        decfsz  con2,f
        goto    retardo
        return
       


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_dos:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_dos:
        decfsz  reg,f
        goto    fx_dos
        goto    leer
fx_dos:
        movf    reg,w
        call    tabla_dos
        movwf   portb
        call    retardo
        goto    leo_dos
       
tabla_dos:
        addwf pcl,f             ;;; tabla de secuencia de efecto_dos
        return
        retlw   b'01011011'
        retlw   b'10101011'
        retlw   b'11011011'
        retlw   b'11101101'
        retlw   b'01110111'
        retlw   b'01011011'
        retlw   b'10101101'
        retlw   b'01110110'

retardo:
        decfsz  con1,f          ;; bloque retardo
        goto    retardo
        decfsz  con2,f
        goto    retardo
        return


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_tres:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_tres:
        decfsz  reg,f
        goto    fx_tres
        goto    leer
fx_tres:
        movf    reg,w
        call    tabla_tres
        movwf   portb
        call    retardo
        goto    leo_tres
       
tabla_tres:
        addwf pcl,f             ;;; tabla de secuencia de efecto_tres
        return
        retlw   b'11011010'
        retlw   b'00101111'
        retlw   b'01011010'
        retlw   b'00101101'
        retlw   b'00110110'
        retlw   b'11011010'
        retlw   b'10101110'
        retlw   b'11010111'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_cuatro:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_cuatro:
        decfsz  reg,f
        goto    fx_cuatro
        goto    leer
fx_cuatro:
        movf    reg,w
        call    tabla_cuatro
        movwf   portb
        call    retardo
        goto    leo_cuatro
       
tabla_cuatro:
        addwf pcl,f             ;;; tabla de secuencia de efecto_cuatro
        return
        retlw   b'01011011'
        retlw   b'10101011'
        retlw   b'11011011'
        retlw   b'10101101'
        retlw   b'10110011'
        retlw   b'11011011'
        retlw   b'10100110'
        retlw   b'01010011'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_cinco:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_cinco:
        decfsz  reg,f
        goto    fx_cinco
        goto    leer
fx_cinco:
        movf    reg,w
        call    tabla_cuatro
        movwf   portb
        call    retardo
        goto    leo_cinco
       
tabla_cinco:
        addwf pcl,f             ;;; tabla de secuencia de efecto_cinco
        return
        retlw   b'11011010'
        retlw   b'00111000'
        retlw   b'11011010'
        retlw   b'00101011'
        retlw   b'10111010'
        retlw   b'01001011'
        retlw   b'10100101'
        retlw   b'11011010'


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_seis:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_seis:
        decfsz  reg,f
        goto    fx_seis
        goto    leer
fx_seis:
        movf    reg,w
        call    tabla_seis
        movwf   portb
        call    retardo
        goto    leo_seis
       
tabla_seis:
        addwf pcl,f             ;;; tabla de secuencia de efecto_seis
        return
        retlw   b'11011011'
        retlw   b'01101010'
        retlw   b'01011011'
        retlw   b'10101010'
        retlw   b'00101010'
        retlw   b'11011011'
        retlw   b'00110101'
        retlw   b'01011011'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_siete:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_siete:
        decfsz  reg,f
        goto    fx_siete
        goto    leer
fx_siete:
        movf    reg,w
        call    tabla_siete
        movwf   portb
        call    retardo
        goto    leo_siete
       
tabla_siete:
        addwf pcl,f             ;;; tabla de secuencia de efecto_siete
        return
        retlw   b'01011010'
        retlw   b'10101011'
        retlw   b'11011010'
        retlw   b'00101011'
        retlw   b'10100011'
        retlw   b'01011010'
        retlw   b'10110100'
        retlw   b'11010010'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_ocho:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_ocho:
        decfsz  reg,f
        goto    fx_ocho
        goto    leer
fx_ocho:
        movf    reg,w
        call    tabla_siete
        movwf   portb
        call    retardo
        goto    leo_ocho
       
tabla_ocho:
        addwf pcl,f             ;;; tabla de secuencia de efecto_siete
        return
        retlw   b'11011011'
        retlw   b'00101010'
        retlw   b'11011010'
        retlw   b'10101011'
        retlw   b'00101010'
        retlw   b'11011011'
        retlw   b'00110101'
        retlw   b'01011010'
       
  end

       veo que en cada bloque hace falta un retardo cierto :?:

Parece que estas copiando y pegando dos código diferentes en uno solo e intentado que compile sin problemas.

Tampoco pones atención a las advertencias y errores que te indica el compilador y don Eduardo2.0

Y seguramente cuando no tengas ningún error, posiblemente no funcione como tu deseas o no funcione nada.

Mi consejo es que vayas haciendo poco a poco tu proyecto y compilando cada vez, empieza desde algo simple y vas agregando cada vez más cosas, Siempre verificando que compile y que funcione en tu hardware.

De lo contrario no llegarás a algo satisfactorio.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado pic_877a

  • PIC16
  • ***
  • Mensajes: 172
Re:error al compilar codigo secuenciador pic 16f84a
« Respuesta #13 en: 01 de Agosto de 2022, 20:45:01 »
Insertá igual las etiquetas que faltan, asì al menos te va a compilar y podés ir verificando el código.   Después vas agregando de a uno los efectos.

Algo así:
Código: [Seleccionar]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

efecto_tres
efecto_cuatro
efecto_cinco
efecto_seis
efecto_siete
efecto_ocho
efecto_dos:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
       
        ...............

este es el código completo sin errores 

 include "p16f84a.inc"   ;En esta linea se especifica la biblioteca que incluye los registros definidos
        radix   hex             ; Esta linea indica litelares(constantes) expresados en formato hexadecimal
        errorlevel -302         ; Turn off banking message

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; igualdades de la CPU y el mapa de memoria;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
reg     equ     0x0c
con1    equ     0x0d
con2    equ     0x0e
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;; inicio del programa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        org     0
        goto    inicio
inicio  bsf     STATUS,RP0      ; cambio al banco 1 para configurar el pic
        movlw   0xff            ;puerto A como entrada
        movwf   trisa           ; puerto A como entrada
        movlw   0x00            ;puerto B como salida
        movwf   trisb           ;puerto B como salida
        bcf     status,rp0      ;cambio al banco 0
        clrf    portb           ;apago los leds a la salida
        clrf    con1            ;valor inicial de contador 1 igual a 0x00
        clrf    con2            ;valor inicial de contador 2 igual a 0x00
;;;;;;;;;;;;;;;;;;;;;; Lectura del puerto A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
leer:
        movf    porta,w
        sublw   0x00            ;si el valor del puerto A es 0x00 implemento efecto_uno
        btfsc   status,z
        goto    efecto_uno
        movf    porta,w
        sublw   0x01            ;si el valor del puerto A es 0x01 implemento efecto_dos
        btfsc   status,z
        goto    efecto_dos
        movf    porta,w
        sublw   0x02            ;si el valor del puerto A es 0x02 implemento efecto_tres
        btfsc   status,z
        goto    efecto_tres
        movf    porta,w
        sublw   0x03            ;si el valor del puerto A es 0x03 implemento efecto_cuatro
        btfsc   status,z
        goto    efecto_cuatro
        movf    porta,w
        sublw   0x04            ;si el valor del puerto A es 0x04 implemento efecto_cinco
        btfsc   status,z
        goto    efecto_cinco
        movf    porta,w
        sublw   0x05            ;si el valor del puerto A es 0x05 implemento efecto_seis
        btfsc   status,z
        goto    efecto_seis
        movf    porta,w
        sublw   0x06            ;si el valor del puerto A es 0x06 implemento efecto_siete
        btfsc   status,z
        goto    efecto_siete
        movf    porta,w
        sublw   0x07            ;si el valor del puerto A es 0x07 implemento efecto_ocho
        btfsc   status,z
        goto    efecto_ocho
        goto    leer
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_uno:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_uno:
        decfsz  reg,f
        goto    fx_uno
        goto    leer
fx_uno:
        movf    reg,w
        call    tabla_uno
        movwf   portb
        call    retardo
        goto    leo_uno
       
tabla_uno:
        addwf pcl,f             ;;; tabla de secuencia de efecto_uno
        return
        retlw   b'01111111'
        retlw   b'10111111'
        retlw   b'11011111'
        retlw   b'11101111'
        retlw   b'11110111'
        retlw   b'11111011'
        retlw   b'11111101'
        retlw   b'11111110'

retardo:
        decfsz  con1,f          ;; bloque retardo
        goto    retardo
        decfsz  con2,f
        goto    retardo
        return
       


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_dos:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_dos:
        decfsz  reg,f
        goto    fx_dos
        goto    leer
fx_dos:
        movf    reg,w
        call    tabla_dos
        movwf   portb
        call    retardo
        goto    leo_dos
       
tabla_dos:
        addwf pcl,f             ;;; tabla de secuencia de efecto_dos
        return
        retlw   b'01011011'
        retlw   b'10101011'
        retlw   b'11011011'
        retlw   b'11101101'
        retlw   b'01110111'
        retlw   b'01011011'
        retlw   b'10101101'
        retlw   b'01110110'

retardo:
        decfsz  con1,f          ;; bloque retardo
        goto    retardo
        decfsz  con2,f
        goto    retardo
        return


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_tres:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_tres:
        decfsz  reg,f
        goto    fx_tres
        goto    leer
fx_tres:
        movf    reg,w
        call    tabla_tres
        movwf   portb
        call    retardo
        goto    leo_tres
       
tabla_tres:
        addwf pcl,f             ;;; tabla de secuencia de efecto_tres
        return
        retlw   b'11011010'
        retlw   b'00101111'
        retlw   b'01011010'
        retlw   b'00101101'
        retlw   b'00110110'
        retlw   b'11011010'
        retlw   b'10101110'
        retlw   b'11010111'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_cuatro:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_cuatro:
        decfsz  reg,f
        goto    fx_cuatro
        goto    leer
fx_cuatro:
        movf    reg,w
        call    tabla_cuatro
        movwf   portb
        call    retardo
        goto    leo_cuatro
       
tabla_cuatro:
        addwf pcl,f             ;;; tabla de secuencia de efecto_cuatro
        return
        retlw   b'01011011'
        retlw   b'10101011'
        retlw   b'11011011'
        retlw   b'10101101'
        retlw   b'10110011'
        retlw   b'11011011'
        retlw   b'10100110'
        retlw   b'01010011'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_cinco:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_cinco:
        decfsz  reg,f
        goto    fx_cinco
        goto    leer
fx_cinco:
        movf    reg,w
        call    tabla_cuatro
        movwf   portb
        call    retardo
        goto    leo_cinco
       
tabla_cinco:
        addwf pcl,f             ;;; tabla de secuencia de efecto_cinco
        return
        retlw   b'11011010'
        retlw   b'00111000'
        retlw   b'11011010'
        retlw   b'00101011'
        retlw   b'10111010'
        retlw   b'01001011'
        retlw   b'10100101'
        retlw   b'11011010'


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_seis:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_seis:
        decfsz  reg,f
        goto    fx_seis
        goto    leer
fx_seis:
        movf    reg,w
        call    tabla_seis
        movwf   portb
        call    retardo
        goto    leo_seis
       
tabla_seis:
        addwf pcl,f             ;;; tabla de secuencia de efecto_seis
        return
        retlw   b'11011011'
        retlw   b'01101010'
        retlw   b'01011011'
        retlw   b'10101010'
        retlw   b'00101010'
        retlw   b'11011011'
        retlw   b'00110101'
        retlw   b'01011011'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_siete:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_siete:
        decfsz  reg,f
        goto    fx_siete
        goto    leer
fx_siete:
        movf    reg,w
        call    tabla_siete
        movwf   portb
        call    retardo
        goto    leo_siete
       
tabla_siete:
        addwf pcl,f             ;;; tabla de secuencia de efecto_siete
        return
        retlw   b'01011010'
        retlw   b'10101011'
        retlw   b'11011010'
        retlw   b'00101011'
        retlw   b'10100011'
        retlw   b'01011010'
        retlw   b'10110100'
        retlw   b'11010010'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BLOQUE DE EFECTOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efecto_ocho:
        movlw   0x09            ;se coloca literal 9 porque cada efecto tiene 8 secuencias
        movwf   reg
leo_ocho:
        decfsz  reg,f
        goto    fx_ocho
        goto    leer
fx_ocho:
        movf    reg,w
        call    tabla_siete
        movwf   portb
        call    retardo
        goto    leo_ocho
       
tabla_ocho:
        addwf pcl,f             ;;; tabla de secuencia de efecto_siete
        return
        retlw   b'11011011'
        retlw   b'00101010'
        retlw   b'11011010'
        retlw   b'10101011'
        retlw   b'00101010'
        retlw   b'11011011'
        retlw   b'00110101'
        retlw   b'01011010'
       
  end

       veo que en cada bloque hace falta un retardo cierto :?:

Parece que estas copiando y pegando dos código diferentes en uno solo e intentado que compile sin problemas.

Tampoco pones atención a las advertencias y errores que te indica el compilador y don Eduardo2.0

Y seguramente cuando no tengas ningún error, posiblemente no funcione como tu deseas o no funcione nada.

Mi consejo es que vayas haciendo poco a poco tu proyecto y compilando cada vez, empieza desde algo simple y vas agregando cada vez más cosas, Siempre verificando que compile y que funcione en tu hardware.

De lo contrario no llegarás a algo satisfactorio.

/quote]

adjunto simulación secuenciador pic 16f84a en  proteus y el archivo hex, tiene 3 interruptores para cambiar las secuencias de la salida del puerto B del pic 16f84a.


Desconectado pic_877a

  • PIC16
  • ***
  • Mensajes: 172
Re:error al compilar codigo secuenciador pic 16f84a
« Respuesta #14 en: 02 de Agosto de 2022, 17:53:51 »

bueno sigo realizando practicas en mplab con pic 16f84a, he realizado otro código con otras secuencias de luces, cuando compilo solo me da 3 errores,
adjunto el código en asm y la imagen de los 3 errores

gracias