TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: raptor200 en 03 de Septiembre de 2005, 13:09:00
-







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.





-
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.

-


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 paciencia![Angelito Angelito]()
-
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.
-

gracias ahora ya me quedó más claro
gracias por tu paciancia y ayuda

