Autor Tema: flecha verde despues de ensamblar MPLAB 8.92  (Leído 5470 veces)

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

Desconectado aprendiz_pic

  • PIC10
  • *
  • Mensajes: 15
flecha verde despues de ensamblar MPLAB 8.92
« en: 12 de Agosto de 2015, 23:38:49 »
Tengo el siguiende esqueleto de un programa que estoy haciendo para trabajar con leds a la salida del PORTB. Solo es el esqueleto, aun no termino el programa principal:
Código: [Seleccionar]
;definicion de directivas para microcontrolador
__CONFIG _CP_ON & _WDT_OFF & _PWRTE_ON & _XT_OSC

list p=16f84a
#include<p16f84a.inc>

;definicion de constantes para retardo
cblock
d1
d2
endc

contador         equ d'0' ;lleva la cuenta de las veces que se pulsa el boton para iluminar los leds
push1 equ d'1' ;identifica a RA0

;se configura el microcontrolador
org 0
bsf STATUS,RP0 ;cambiamos a BANCO1
clrf         PORTB ;establece PORTB como salida
movlw b'11111111' ;establece PORTB como entrada
movwf PORTA
bcf STATUS,RP0 ;cambiamos a BANCO0
clrf         PORTB ;estado inicial de PORTB (leds apagados)

;aqui inicia el programa del microcontrolador


;subrutina de retardo que evita rebote al pulsar boton (20 milisegundos)
retardo
movlw    0x9E
movwf    d1
movlw    0x10
                movwf    d2
retardo_0
decfsz    d1,f
goto            $+2
decfsz    d2,f
goto            retardo_0
goto            $+1
nop
return

end

al momento de dar click en la siguiente opcion para ensamblar: Project/Quickbuild practica1.asm me muestra una flecha de color verde en la linea 24 que es la correspondiente a la instrucción BSF debajo de la de ORG 0.

Mi duda es hacerca del siguinificado de esta flecha ¿que es lo que realmente indica?. Tengo entendido que esta flecha señala desde donde el programa comenzara a correr de acuerdo a la instrucción de ORG pero no se si sea lo unico que indique la flecha. Ademas tras el ensamblado me muestra los siguientes mensajes:

Código: [Seleccionar]
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Program Files\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F84A "practica1.asm" /l"practica1.lst" /e"practica1.err"
Message[313] C:\USERS\MARISOL\DESKTOP\PRACTICAS\PIC MICROCHIP\P1\PRACTICA1.ASM 15 : CBLOCK constants will start with a value of 0.
Executing: "C:\Program Files\Microchip\MPASM Suite\mplink.exe" /p16F84A "practica1.o" /z__MPLAB_BUILD=1 /o"practica1.cof" /M"practica1.map" /W /x
MPLINK 4.49, Linker
Device Database Version 1.14
Copyright (c) 1998-2011 Microchip Technology Inc.
Errors    : 0

Loaded C:\Users\marisol\Desktop\practicas\pic microchip\p1\practica1.cof.

Y hablando de mensajes tambien lei por hay que para poder evitar el mensaje de advertencia que indicaba que no estabamos en el banco correcto, cuando configuremos los puestos como entrada o salida en el BANCO1 en vez de utilizar TRISB se coloca como PORTB. Entonces no se si esto tambien influya con lo de la flecha verde.
« Última modificación: 12 de Agosto de 2015, 23:49:48 por aprendiz_pic »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: flecha verde despues de ensamblar MPLAB 8.92
« Respuesta #1 en: 13 de Agosto de 2015, 02:13:54 »
En realidad asi no se deben definir las variables o registros. Es decir no se debe hacer con CBLOCK
CBLOCK solamente asigna una constante a lo que se encuentra dentro:

Código: ASM
  1. cblock
  2.                         d1
  3.                         d2
  4.                         endc

Tu codigo no indica desde que valor comenzar asi que comienza en 0, por eso ese mensaje, entonces eso es lo mismo que hacer:

D1 equ 0
D2 equ 1

Luego cuando lo usas, eso apunta a la direccion de la memoria de datos en 0x00 y 0x01
Pero ese no es tu objetivo, esos registros estan ocupados con los registros INDF y TMR0.

Deberias tener un

Código: ASM
  1. Cblock 0x0C

Asi queda igual a

D1 equ 0x0C
D2 equ 0x0D

Desde esa direccion estan los registros de proposito general.
Eso va a quitarte el mensaje ese y te va a ahorrar los errores que te va a producir

La flecha verde imagino que decis es cuando lo "simulas", el cual te muestra cual es la instruccion que se va ejecutando.

Desconectado aprendiz_pic

  • PIC10
  • *
  • Mensajes: 15
Re: flecha verde despues de ensamblar MPLAB 8.92
« Respuesta #2 en: 13 de Agosto de 2015, 13:23:37 »
En realidad asi no se deben definir las variables o registros. Es decir no se debe hacer con CBLOCK
CBLOCK solamente asigna una constante a lo que se encuentra dentro:

Código: ASM
  1. cblock
  2.                         d1
  3.                         d2
  4.                         endc

Tu codigo no indica desde que valor comenzar asi que comienza en 0, por eso ese mensaje, entonces eso es lo mismo que hacer:

D1 equ 0
D2 equ 1

Luego cuando lo usas, eso apunta a la direccion de la memoria de datos en 0x00 y 0x01
Pero ese no es tu objetivo, esos registros estan ocupados con los registros INDF y TMR0.

Deberias tener un

Código: ASM
  1. Cblock 0x0C

Asi queda igual a

D1 equ 0x0C
D2 equ 0x0D

Desde esa direccion estan los registros de proposito general.
Eso va a quitarte el mensaje ese y te va a ahorrar los errores que te va a producir

La flecha verde imagino que decis es cuando lo "simulas", el cual te muestra cual es la instruccion que se va ejecutando.

Sin querer queriendo me aclaraste tambien una duda con respecto a la RAM y los rgegistros SFR y GPR, jajajaja. Gracias por la observación del CBLOCK, colocare la dirección que me das y probare de nuevo el cambio de los mensajes.

Ahora lo de la flecha verde si lo he observado cuando se simula en el MPLAB paso a paso y si, la flecha va moviendose y apuntando a la instrucción que se esta ejecutando.

A lo que me referia es al momento de obtener el archivo .HEX, que cuando lo genero la flecha verde apunta a la instrucción BSF debajo de la de ORG 0, es decir que, si despues de generar el .HEX lo que apunta la flecha verde es la primera instrucción que se ejecutara cuando se prenda el micro ya con el programa quemado.

Así lo entiendo yo pero, no se si esto sea correcto.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: flecha verde despues de ensamblar MPLAB 8.92
« Respuesta #3 en: 13 de Agosto de 2015, 14:26:36 »
El vector de reset se encuentra en 0x00 del PIC. Asi que cuando arranca va a esa direccion ( es decir el PC - Program Counter tiene el valor de 0x00 )

Vos con tu ORG 0

Estas diciendo que las instrucciones que le siguen a ese ORG estenes comienzen a ponerse en 0x00, disculpa que escriba en hexa pero es la costumbre.

Uno de los casos que usas esto es para cuando tenes una interrupcion, en ese caso el vector de interrupcion esta en 0x04 en ese PIC. Y tu codigo seria algo asi:


Código: ASM
  1. ORG 0x00
  2.   GOTO INICIO
  3.   ORG 0x04
  4.   GOTO INTERRUPCION
  5.  
  6. INICIO
  7.    BCF STATUS,C   ; Instrucion de ejemplo nomas
  8.    ;Aca configuro todo
  9.  
  10. MAIN
  11.    ; Programa principal
  12.  
  13. INTERRUPCION
  14.    ; Codigo que se ejecuta al producirse la interrupcion, ya que fue al vector 0x04 y ahi hay un GOTO INTERRUPCION.

El compilador va ubicar las instrucciones como mejor le quede.
0x00 - va a tener el GOTO INICIO
0x01 a 0x03 - no se grabo nada, como es una FLASH queda con un valor de 0x3FF ( es de 12 bits) los opcode te da que esos quedan con un ADDLW 0xFF pero que nunca se van a ejecutar gracias al GOTO de antes
0x04 - GOTO INTERRUPCION
0x05 - Primer insrtuccion de INICIO : BCF STATUS,C
De ahi para adelante todo lo demas

Hay gente que hace esto:

Código: ASM
  1. ORG 0x00
  2.   GOTO INICIO
  3.   ORG 0x04
  4.   GOTO INTERRUPCION
  5.  
  6.   ORG 0x05
  7.  
  8. INICIO
  9.    BCF STATUS,C   ; Instrucion de ejemplo nomas
  10.    ;Aca configuro todo

Esta  bien, y es lo mismo, PERO no lo aconsejo, no hay diferencia EN ESTE PIC. Pero si vamos a un PIC18F los GOTO/CALL etc ocupan 2 posiciones de memoria (tambien cambian los valores de los vectores de interrupcion pero eso no influye)
Entonces el GOTO de 0x04 ocupa tambien el lugar 0x05, pero luego vos en 0x05 estas escribiendo un BCF. Y eso es un problema.
Solucion final: Dejalo que lo acomode solo el compilador.



Y a que vino toda esta explicacion ?

Citar
A lo que me referia es al momento de obtener el archivo .HEX, que cuando lo genero la flecha verde apunta a la instrucción BSF debajo de la de ORG 0, es decir que, si despues de generar el .HEX lo que apunta la flecha verde es la primera instrucción que se ejecutara cuando se prenda el micro ya con el programa quemado.

Exactamente, ese BSF es la primera instruccion que se ejecuta por eso se para ahi.
Pero no hay necesidad de "simularlo" para generar el .hex, hay otro boton que te permite compilarlo sin necesidad de simularlo, y por lo tanto no te apareceria la flecha verde :). En fin hacerlo de una forma u otra lo unico que podes ganar es un poco de tiempo y que no debe ser mucho.

Con respecto a las variables y que dije que no se definen asi el tema es un poco mas profundo y ya tenemos que hablar del linker / espacios de memoria, etc. hay un post por ahi que trato ese tema.
http://www.todopic.com.ar/foros/index.php?topic=44514.0

Igual todo esto si queres complicarte la vida un poco mas, podes seguir siendo feliz y utilizar el cblock normalmente, especialmente en el MPLAB v8.xx
« Última modificación: 13 de Agosto de 2015, 14:36:26 por KILLERJC »

Desconectado aprendiz_pic

  • PIC10
  • *
  • Mensajes: 15
Re: flecha verde despues de ensamblar MPLAB 8.92
« Respuesta #4 en: 13 de Agosto de 2015, 23:53:30 »
No no hay problema con el hexadecimal, al contrario es mejor para ir acostumbrandoce a el, y pues, ya con todas tus grandiosas explicaciones y las de los demas compañeros me ha quedado un poco más claro, asi que no queda de otra más que seguir estudiando.

Citar
Entonces el GOTO de 0x04 ocupa tambien el lugar 0x05, pero luego vos en 0x05 estas escribiendo un BCF. Y eso es un problema.

Por cierto esto no lo sabia, pense que en todos los pics todas las instrucciones ocupaban un solo lugar de memoria. Entonces esto me da a entender que en ptras familias de PIC'S es muy diferente, ademas de sus aqruitecturas internas, repertorio de instrucciones, etc.

Nuevamente te agradesco y a todos los compañeros por el apoyo, de verdad que voy aprendiendo poco a poco. Espero que ya pueda montar este código en un programa completo con el circuito en proto y como dicen "echarlo a volar". Anteriormente habia hecho encender un led mediante un push button pero, esta vez decidi ir por algo un poco más complejo. :)

Gracias a todos !!!

Desconectado luismh

  • PIC16
  • ***
  • Mensajes: 149
Re:flecha verde despues de ensamblar MPLAB 8.92
« Respuesta #5 en: 21 de Enero de 2016, 22:15:33 »
Hola! Saludos. Es la primera vez que escribo en el foro

Tengo un problema al simular: Estoy escribiendo en assembler y uso mplab x v3.15

El programa compila perfectamente y cuando hago click en "debug main project", entro en modo simulación sin problemas.

El problema es que cuando quiero avanzar a través del programa línea por línea (step into) no veo la "flecha verde" que indica las posición en el programa... A alguien le pasó esto?

Al observar el valor de PCL puedo confirmar que ésta se incrementa paso por paso, sin embargo, no me aparece la flecha verde para seguir el código.

Muchas gracias.
Saludos.
Luis.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:flecha verde despues de ensamblar MPLAB 8.92
« Respuesta #6 en: 04 de Febrero de 2016, 11:20:31 »
Hola! Saludos. Es la primera vez que escribo en el foro

Tengo un problema al simular: Estoy escribiendo en assembler y uso mplab x v3.15

El programa compila perfectamente y cuando hago click en "debug main project", entro en modo simulación sin problemas.

El problema es que cuando quiero avanzar a través del programa línea por línea (step into) no veo la "flecha verde" que indica las posición en el programa... A alguien le pasó esto?

Al observar el valor de PCL puedo confirmar que ésta se incrementa paso por paso, sin embargo, no me aparece la flecha verde para seguir el código.

Muchas gracias.
Saludos.
Luis.
Deberías compartir tu proyecto para analizar que está sucediendo

¿Tienes el mismo problema con el simulador o al debugar? (Simular es algo diferente a 'Debuggar'?
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado luismh

  • PIC16
  • ***
  • Mensajes: 149
Re:flecha verde despues de ensamblar MPLAB 8.92
« Respuesta #7 en: 04 de Febrero de 2016, 11:35:55 »
Hola DominusDDR, gracias por responder.

Ya lo solucioné! resulta que MPLAB no encontraba el archivo Disassembly list.

Sucedía esto porque en la dirección donde estaba guardado el proyecto había carpetas con "caracteres raros" como acentos, espacios, etc.

Es buena idea que al momento de crear los directorios donde van los proyectos solo se usen letras. Así lo solucioné

Gracias!
Y espero que esto le sirva a alguien.
Saludos!
Luis.


 

anything