Autor Tema: problema al compilar  (Leído 2928 veces)

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

Desconectado mamsat

  • PIC10
  • *
  • Mensajes: 17
problema al compilar
« en: 26 de Octubre de 2010, 13:04:26 »
Hola he hecho algun programilla en asm, pero a la hora de compilar me da errores por todos lados. He probado tambien con algun programa qeu me han asegurado qeu funciona y tambien me da tropecientos errores.

copio el codigo es muy simple o eso parece y a ver si me orientais


 
Código: [Seleccionar]
__CONFIG _CP_OFF& _WDT_OFF& _PWRTE_OFF& _XT_OSC
LIST     P=16F84A
INCLUDE    P16F84A.INC
status equ 03h
optionr equ 81h
trisa equ 85h
porta  equ 05h
trisb  equ 86h
portb  equ 06h
PDel0  equ 20h
PDel1  equ 21h
PDel2  equ 22h
PDel0b equ 23h
Inicio:
bsf status,5 ; se pasa al banco 1 de RAM
clrf trisa ; se programa el puerto A como salida
movlw 0Fh ; dato para la programación del puerto B
movwf trisb ; parte alta como salida y parte baja como entrada
bcf optionr,7 ; se habilitan resistencias de Pull Up
bcf status,5 ; se pasa al banco 0 de RAM

bcf porta,0
bsf porta,1
bcf portb,0

call DEMORA;
call DEMORA;
call DEMORA;
call DEMORA;

;----espera varios segundos y llama a randon y a play -----

call DEMORA
call DEMORA
call DEMORA
call DEMORA
call DEMORA
call DEMORA
call DEMORA
call DEMORA
call random; llama a la rutina random
call DEMORA
call DEMORA
call DEMORA
call DEMORA
call play; llama a la rutina play
call DEMORA

;----------------------------------Random pulsa por RA0---------------------------
random:
bsf porta,0; enciende el random
call DEMORA
call DEMORA
bcf porta,0; suelta el random
call DEMORA

-----------------------------------Play pulsa por RA1-----------------------------
play:
bsf porta,1; enciende el play
call DEMORA
call DEMORA
bcf porta,1; suelta el play
call demorab

loop:

return



;------------Demora un 1 segundo--------------------------
DEMORA  movlw     .14       ; 1 set numero de repeticion  (C)
        movwf     PDel0     ; 1 |
PLoop0  movlw     .72       ; 1 set numero de repeticion  (B)
        movwf     PDel1     ; 1 |
PLoop1  movlw     .247      ; 1 set numero de repeticion  (A)
        movwf     PDel2     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        decfsz    PDel2, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel1,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (C)
        goto      PLoop0    ; 2 no, loop
PDelL1  goto PDelL2         ; 2 ciclos delay
PDelL2  clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.
;-------------------------------------------------------------
;----------Demorab de 30 minutos------------------------------
cblock
1
2
1_2
1_3
endc

demorab
;1799999989 cycles
movlw 0xFE
movwf 1
movlw 0xC2
movwf 2
movlw 0xEC
movwf 1_2
movlw 0x0C
movwf 1_3
demorab_0
decfsz 1, f
goto $+2
decfsz 2, f
goto $+2
decfsz 1_2, f
goto $+2
decfsz 1_3, f
goto demorab_0

;7 cycles
goto $+1
goto $+1
goto $+1
nop

;4 cycles (including call)
return

;-------------------------------------------------------------
end
« Última modificación: 26 de Octubre de 2010, 15:28:01 por mamsat »

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4154
Re: problema al compilar
« Respuesta #1 en: 26 de Octubre de 2010, 13:46:35 »
Deberias indicar como realizas la conpilacion. Vaya como tiens definidas las rutas de donde se encuentran los ficheros a compilar.

F.
Todos los días se aprende algo nuevo.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: problema al compilar
« Respuesta #2 en: 26 de Octubre de 2010, 15:03:45 »
Casi todos los errores estan relacionados con la "demora" con minusculas, te cansas de llamarla pero la etiqueta pone demorab, y el MPLAB no traga.
antes de esa demorab haces un "cblock" en muy mal sitio y muy mal hecho, tienes que definirlos al principio, donde estan los PDel, de hecho donde haceslos movwf  1_2 y 1_3 y decfsz tambien te da errores. Todo lo relacionado con esa demora esta mal. cambiala toda, puedes usar este programa que es con el que esta hecha la "DEMORA".

http://www.todopic.com.ar/foros/index.php?topic=5968.0

Tambien te pone muchos warning, esto es porque estas en BANK_1, tienes que ponerlo en BANK_0, si no aun sin errores tampoco te funcionara

bcf STATUS.5   ; ASI SE PONE EN BANK_0
bcf porta,0
bsf porta,1
bcf portb,0

« Última modificación: 26 de Octubre de 2010, 15:06:33 por tapi8 »

Desconectado mamsat

  • PIC10
  • *
  • Mensajes: 17
Re: problema al compilar
« Respuesta #3 en: 26 de Octubre de 2010, 15:16:23 »
en realidad tengo dos demoras, una es la demora a secas para pausas cortas de un segundo y la otra la demorab para tiempos de 30 minutos. y ambas existen, pero ¿tienen qeu estar en mayusculas igual qeu la llamada??

Lo del banco lo tengo en el 0 no se si esta mal hecho pero esta tal cual me indicas.

lo de la demora la he hecho esta misma mañana desde que habia en el foro...

voy a probar la que me dices a ver qeu tal va.

Bueno pues el programa qeu  me recomiendas no me funciona con el windows 7 de las narices...

Intentare copiar otra demora de otro codigo...

Pues nada qeu no encuentro ninguna demora tan larga... alguien me puede pasar una para 30 min???
« Última modificación: 26 de Octubre de 2010, 15:25:02 por mamsat »

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: problema al compilar
« Respuesta #4 en: 26 de Octubre de 2010, 19:29:11 »
.


En realidad no hay problemas con el nombre de las demoras. Lo que sí es un error es el cblock, pero no porque esté al comienzo o al final, sino porque le falta indicar cuál es la 1º dirección de la lista de variables. Según el archivo de ayuda del MPASM, si no hay un cblock anterior, el valor por omisión es 00h. Para evitarte esto, deberías reemplazar por:
      cblock 24h ; que es el siguiente valor "libre" después de PDel0b

Otra cosa. Las directivas LIST, INCLUDE, __CONFIG, y todas las otras, así como también cada línea donde haya una instrucción, no pueden ir en la primera columna de código, sino que debe dejarse un margen a la izquierda (así como se ve en las rutinas de demora).

Los mensajes que dicen "302 Register in operand not in bank 0. Ensure that bank bits are correct." (el famoso mensaje 302) lo genera el compilador siempre que modifiques el valor de un registro, ya sea que esté o no en el banco de memoria correcto. Pero que aparezcan no quiere decir que en realidad esté mal el banco de trabajo. Si te molestan, podés agregar al principio del código la línea:
      errorlevel -302

Una vez arreglados los errores, compilá de nuevo, pero esta vez tildá la opción de "Generar archivo de error" (o algo así). Se te va a generar una archivo con extensión .err con la lista detallada de los errores, warnings y mensajes que encontró. Así vas a tener una idea mucho más clara de qué es lo que debe modificarse.
Espero que te sirva de ayuda  ;-).

¡Saludos!

When you see a good move, look for a better one (Emanuel Lasker)

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: problema al compilar
« Respuesta #5 en: 27 de Octubre de 2010, 14:55:43 »
Si hay problemas si le llamas en la etiqueta "demorab" y despues en el programa la llamas call demora (sin b)
En el cblock es posible que al ponerle una direccion donde comenzar se lo admita, tal y como esta da errores, y tambien en la subrutina cuando usa esos registros.
El warning 302, fue un error mio el que da es el 203, si pasa a banco_0, aqui no hay problema.
El PDel (programa que te puse arriba) no hace demoras tan grandes ni de 30m, ni de 10m ni de 5m.
Mansat no se que quires hacer con esto pero te das cuenta que llamas 8 veces seguidas a un retardo de30 minutos, es decir 4 horas, despues haces algo y vuelves a llamarla otras 4 veces, otras 2 horas, no estaras equivocado y querras poner una mas pequeña?.te compadezco cuando quieras probarlo te vas cansar de esperar.
Si quieres te pongo una mas pequeña y la llamas mas veces que te hara lo mismo.

Saludos

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: problema al compilar
« Respuesta #6 en: 28 de Octubre de 2010, 11:30:17 »
.

Citar
Si hay problemas si le llamas en la etiqueta "demorab" y despues en el programa la llamas call demora (sin b)

Es que hay una rutina DEMORA y otra demorab. Yo no encuentro ningún llamado a demora (en minúsculas) :?
Otra cosa que veo ahora es que la rutina random no termina con un return. Y también que en el programa no hay ningún salto para crear un lazo cíclico, sino que las sentencias se ejecutan en secuencia hasta llegar al end.
Estas dos cosas no se si son intencionales o si representan errores a revisar.

Saludos

When you see a good move, look for a better one (Emanuel Lasker)

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: problema al compilar
« Respuesta #7 en: 28 de Octubre de 2010, 13:51:27 »
Pues yo el dia que lo copie (copiar y pegar) esto...

;----espera varios segundos y llama a randon y a play -----

call DEMORA
call DEMORA
call DEMORA
call DEMORA
call DEMORA
call DEMORA
call DEMORA
call DEMORA
call random;   llama a la rutina random
call DEMORA
call DEMORA
call DEMORA
call DEMORA
call play;   llama a la rutina play
call DEMORA

Esto estaba asi, de hecho la mayoria de los errores los da aqui. Yo deduje, parece que mal, que le faltaba la b. Esto lo acabo de sacar de mi MPLAB que aun lo tenia sin borrar. O hay duendes o ya no se ni hacer copy paste.

;----espera varios segundos y llama a randon y a play -----

call demora
call demora
call demora
call demora
call demora
call demora
call demora
call demora
call random;   llama a la rutina random
call demora
call demora
call demora
call demora
call play;   llama a la rutina play
call demora


por eso decia lo de las 4 horas.


 

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: problema al compilar
« Respuesta #8 en: 28 de Octubre de 2010, 14:17:03 »
Asi ya no da error, en pago por mis errores, te los he corregido, no se si funciona bien solo lo he "desbravado".  :lol: :lol:
Qeadn los warnings 302 pero esta bien, por estos no te preocupes, y los 203,que debes de correr todas las instrucciones a la columna 1.


__CONFIG _CP_OFF& _WDT_OFF& _PWRTE_OFF& _XT_OSC
LIST       P=16F84A
INCLUDE    P16F84A.INC
status equ 03h
optionr equ 81h
trisa equ 85h
porta  equ 05h
trisb  equ 86h
portb  equ 06h
PDel0  equ 20h
PDel1  equ 21h
PDel2  equ 22h
PDel0b equ 23h
Inicio:
bsf status,5 ;      se pasa al banco 1 de RAM
clrf trisa ;      se programa el puerto A como salida
movlw 0Fh ;      dato para la programación del puerto B
movwf trisb ;      parte alta como salida y parte baja como entrada
bcf optionr,7 ;      se habilitan resistencias de Pull Up
bcf status,5 ;      se pasa al banco 0 de RAM

bcf porta,0
bsf porta,1
bcf portb,0

call DEMORA;
call DEMORA;
call DEMORA;
call DEMORA;

;----espera varios segundos y llama a randon y a play -----

call DEMORA
call DEMORA
call DEMORA
call DEMORA
call DEMORA
call DEMORA
call DEMORA
call DEMORA
call random;   llama a la rutina random
call DEMORA
call DEMORA
call DEMORA
call DEMORA
call play;   llama a la rutina play
call DEMORA

;----------------------------------Random pulsa por RA0---------------------------
random:
bsf porta,0;   enciende el random
call DEMORA
call DEMORA
bcf porta,0;   suelta el random
call DEMORA

;-----------------------------------Play pulsa por RA1-----------------------------
play:
bsf porta,1;   enciende el play
call DEMORA
call DEMORA
bcf porta,1;   suelta el play
call demorab   

loop:

return



;------------Demora un 1 segundo--------------------------
DEMORA  movlw     .14       ; 1 set numero de repeticion  (C)
        movwf     PDel0     ; 1 |
PLoop0  movlw     .72       ; 1 set numero de repeticion  (B)
        movwf     PDel1     ; 1 |
PLoop1  movlw     .247      ; 1 set numero de repeticion  (A)
        movwf     PDel2     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        decfsz    PDel2, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel1,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (C)
        goto      PLoop0    ; 2 no, loop
PDelL1  goto PDelL2         ; 2 ciclos delay
PDelL2  clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.
;-------------------------------------------------------------
;----------Demorab de 30 minutos------------------------------
   cblock 0x24
   PDel3
   PDel4
   PDel5
   PDel6
   endc

demorab
         ;1799999989 cycles
   movlw   0xFE
   movwf   PDel3
   movlw   0xC2
   movwf   PDel4
   movlw   0xEC
   movwf   PDel5
   movlw   0x0C
   movwf   PDel6
demorab_0
   decfsz   PDel3, f
   goto   $+2
   decfsz   PDel4, f
   goto   $+2
   decfsz   PDel5, f
   goto   $+2
   decfsz   PDel6, f
   goto   demorab_0

         ;7 cycles
   goto   $+1
   goto   $+1
   goto   $+1
   nop

         ;4 cycles (including call)
   return

;-------------------------------------------------------------
end

Desconectado mamsat

  • PIC10
  • *
  • Mensajes: 17
Re: problema al compilar
« Respuesta #9 en: 05 de Noviembre de 2010, 08:30:37 »
Lo primero agradecer a Mtristan y tapi8 la ayuda qeu me habeis dado.

Lo segundo explicare un poco de qeu se trata este proyecto, y no es ni mas ni menos que de hacer pequeños montajes sencillos para ir soltandome en esto de programar, he tratado de emular un montaje qeu hice recientemente con un 12f629 a base de corta y pegas y que consegui hacer, pero quiero centrarme en programar unicamente con el 16f84 por lo qeu trate de hacer el mismo proyecto y no era capaz de hacerlo.

Respecto a los tiempos tan largos es por qeu el uso qeu le di al 12f629 era para hacer un arrancador automatico de cd, lo qeu hacia era qeu si estabas escuchando musica y se iba la luz, cuando volvia esperaba unos segundos (para qeu leyese el disco) y volvia a pulsar el play automaticamente, de hay qeu haya qeu esperar para el primer pulso 10 segundos o mas, y el ciclo era algo indiferente, que lo introduje para aprender a hacerlo observando las diferencias.

Como os dije gracias por la ayuda y vuestro tiempo, un saludo.


 

anything