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 0x00goto INICIOORG 0x04BCF INTCON,GIE ;pongo el GIE a 0 para que no haya otra interrupción hasta ;que no acabe la secuenciagoto INICIO ;vuelvo a inicio ya que lo que quiero es reinicializar el ;desplazamiento de las lucesINICIO: ;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 0x0GOTO mainORG 0x4ISR;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!! 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)
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
realmente el programa no se vuelve a reiniciar pero pareciese que si, no se si es lo que buscas.