cambia esto:
Al poner ese código me pone todo el rato estos errores:
Overwritting previous address contents (0000)
Overwritting previous address contents (0000)
Overwritting previous address contents (0004)
Overwritting previous address contents (0004)
Overwritting previous address contents (0005)
Overwritting previous address contents (0005)
No se como solucionarlos...
ORG 0x00por esto
goto INICIO
ORG 0x04
BCF INTCON,GIE ;pongo el GIE a 0 para que no haya otra interrupción hasta
;que no acabe la secuencia
goto INICIO ;vuelvo a inicio ya que lo que quiero es reinicializar el
;desplazamiento de las luces
INICIO: ;esto no debería dar problema no?? a partir de aquí se mete en el
;main() otra vez directamente, no?
}
main()
{
Me mareo un poco tu programa... programas en asembler o en C?
ademas es mejor activar los permisos para las diferente interrupciones y despues activar el permiso global o sea poner la sentencia BSF INTCON,INTE primero y despues la del GIE.
Mi consejo:
ORG 0x0
GOTO main
ORG 0x4
ISR
;salvo STATUS y W (atención!! salvar registros sin modificar STATUS!! solución en microchip.com)
;veo que interrupción es y salto según cual sea con un CALL...
;retorno a la linea que sigue:
ISR_END
;repongo los valores de STATUS y W (sin modificar STATUS!! solución en...)
RETFIE
;y sin poner otro ORG...
main
;programa principal....
Hola Tania! Estabamos escribiendo al mismo tiempo!! :D:huh: pues no se porque decis esto, esta estructura la he tomado de un libro de microcontroladores y la he ocupado siempre sin problemas ni errores, aqui dejo un link de uno de tantos programas en lo que he hallado la estructura de org 0, org 4 y org 5 http://pantuflo.escet.urjc.es/~rocapal/pro...a/dado/dado.asm (http://pantuflo.escet.urjc.es/~rocapal/proyectos/electronica/dado/dado.asm)
Un detalle: usas ORG 0x0 para el inicio del programa (vector de reset), luego usas un ORG 0x4 para las interrupciones, con un GOTO a algún lado... luego ORG 0x5.
La instrucción GOTO ocupa más de una posición de memoria, por lo tanto el error de sobreescritura al compilar (overwriting...)
No daría igual hacer una antes que otra sin importar el orden?
Al fin y al cabo sólo se activarán las interrupciones después de haber en el estado sleep, no?
Al inicio del programa, no importa que sea C o asm, debes habilitar individualmente las interrupciones y, por último, globalmente (activar GIE)te recomendamos eso.
he probado lo que dices y de todas formas me da el mismo error de overwriting, no se qué hacer
el problema es que NUNCA se retorna de la interrrupcion
NO no es igual siempre, en este caso estas usando solo una interrupcion por lo cual no hay mayor problema pero es mejor acostumbrarse ya que cuando uses mas de una interrupcion si activas las interrupciones globales primero se te puede disparar alguna interrupcion en lo que estas activando otras.
esta estructura la he tomado de un libro de microcontroladores y la he ocupado siempre sin problemas ni errores
ya tomaste encuenta lo que te dijeCitarel problema es que NUNCA se retorna de la interrrupcion
Si quieres mediante una senal externa reiniciar tu programa desde 0, no te olvides que el micro tiene una pata de reset... este pin esta ahi para usarlo cuando se quiera
Tengo que rectificar algo... la instruccion GOTO ocupa una direccion de memoria, necesita dos ciclos para ejecutarse... perdon por la equivocacion :whistling::no:, bueno ya quedo aclarado no hay problema :comp:
realmente el programa no se vuelve a reiniciar pero pareciese que si, no se si es lo que buscas.