Autor Tema: duda de programa en asm  (Leído 1931 veces)

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

Desconectado raptor200

  • PIC10
  • *
  • Mensajes: 39
duda de programa en asm
« en: 03 de Septiembre de 2005, 13:09:00 »
LlorandoLlorandoLlorandoLlorandoLlorandoLlorandoLlorando

Hola:

resiban un gran saludo todos los de este foro,
tengo una duda, tengo el manual de cekit de microcontroladores y en algunos programas tiene una serie de instrucciones que hacen alusión al reset, pero no se como interpretarlos, a continuación pongo como va el programa:

;--------------------------------------
list      p=16f84
;--------------------------------------
ptob     equ    06
rota      equ    0a
reg1    equ    0b
reg2    equ    0c
reg3    equ    0d
valor1  equ    30
valor2  equ    40
valor3  equ    50
;-------------------------------------
reset    org    0
            goto  inicio
            org      7

inicio     movlw    00
             tris       ptob
otra     movlw    01
            movwf    rota
hol       movf       rota, 0

(luego sigue la rutina de retardo que es para activa una secuencia de 4 leds en el puerto B)
 una disculpa por no poner todo el programa, por falta de tiempo pero lo que no se y es mi pregunta es porqué después de "goto inicio" se va a la posición 7 si ya anteriormente se le dice al pic que haga el salto a inicio o qué onda con "org    7"

alguien me puede explicar como se lee esta serie de instrucciones.


gracias por la molestia de leer esta solicitud de ayuda, quedo pendiente de la respuesta.

RebotadoRebotadoRebotadoRebotadoRebotado





Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: duda de programa en asm
« Respuesta #1 en: 03 de Septiembre de 2005, 21:47:00 »
hola. mira en este caso le podes quitar el org 0x07. Pero ,pensa que el vector de interrupcion se encuentra en 0x0004, por lo que si en un programa que utilizas interrupciones, pones este codigo sin el org 0x07, cuando se genere la interrupcion el pic va a saltar a la instruccion: movwf rota (porque ocupa la posicion 0x04 del programa) . Espero que haya quedado algo claro. saludos.Flash
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado raptor200

  • PIC10
  • *
  • Mensajes: 39
RE: duda de programa en asm
« Respuesta #2 en: 13 de Septiembre de 2005, 07:03:00 »
desquiciadoEnfurruñado

perdona lo bruto que soy pero no entiendo bien eso de las interrupciones porque al aplicar interrupciones es importante el 0x004, y porque ponen el 0x007 entonces?

gracias por tu pacienciaAngelitoAngelito

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
RE: duda de programa en asm
« Respuesta #3 en: 13 de Septiembre de 2005, 09:11:00 »
hola. lo pusieron porque ese programa no trabaja con interrupciones.
Hay solamente 2 vectores de posicion importantes:
El de reset que es la posicion 0x0000H, que SIEMPRE se ejecuta cuando inicia un programa, y cuando presionas el boton de MCLR .
Y el vector de Interrupciones que esta alojado en la posicion 0x0004H del PIC.
Cuando se produce una interrupcion, el PC salta a esa posicion y se ejecuta desde alli.
O sea, que la primera posicion de memoria del PIC es la de RESET, 4 posiciones mas adelante se encuentra la del vector de interrupcion, y luego la del programa tuyo. La del programa tuyo varia, y puede empezar inmediatamente despues que termine las sentencias del vector de interrupcion:

Si usas interrupciones podria ser:
Ejemplo 1:
org 0x0000H
nop                     ;esto se escribe en la posicion 0x0000(vector de reset)
nop                     ;esto se escribe en la posicion 0x0001
nop                     ;esto se escribe en la posicion 0x0002
Goto inicio           ;esto se escribe en la posicion 0x0003
nop                     ;esto se escribe en la posicion 0x0004(vector de interrupcion)
nop                     ;esto se escribe en la posicion 0x0005
nop                     ;esto se escribe en la posicion 0x0006
nop                     ;esto se escribe en la posicion 0x0007
goto   interrupcion   ;esto se escribe en la posicion 0x0008
inicio             nop ;esto se escribe en la posicion 0x0009 y aca comenzaria tu programa normalmente

Si NO utilizas interrupciones, el programa podria ser asi directamente...

org 0x0000H

nop                     ;esto se escribe en la posicion 0x0000(vector de reset)
nop                     ;esto se escribe en la posicion 0x0001
nop                     ;esto se escribe en la posicion 0x0002
nop                     ;esto se escribe en la posicion 0x0003
nop                     ;esto se escribe en la posicion 0x0004
nop                     ;esto se escribe en la posicion 0x0005
goto    inicio        ;esto se escribe en la posicion 0x0006 y aca comenzaria tu programa normalmente


Y si ni siquiera utilizas el reset durante la ejecucion del programa, podrias directamente hacer asi:

ORG   0x0000H
NOP                      ;esto se escribe en la posicion 0x0000(vector de reset, pero en realidad no lo vas a utilizar para RESETEAR en este caso...)Inicias tu programa y no necesitas de nada mas....

Espero que haya quedado claro. saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado raptor200

  • PIC10
  • *
  • Mensajes: 39
RE: duda de programa en asm
« Respuesta #4 en: 19 de Septiembre de 2005, 06:53:00 »
Sonrisa Gigante
gracias ahora ya me quedó más claro
gracias por tu paciancia y ayuda

GiñoGiñoGiño