TODOPIC
Simuladores, editores de PCB, etc => Simuladores de circuitos => Proteus ISIS => Mensaje iniciado por: groundman en 05 de Junio de 2009, 18:22:44
-
hola.estoy empezando con el ISIS y ya empiezan los mensages de error :D
si no como ivamos a aprender.
se me ha presentado este y me seria de gran ayuda si alguien puede identificarlo.
saludos y gracias.
(http://img268.imageshack.us/img268/4166/mensageerror.th.jpg) (http://img268.imageshack.us/my.php?image=mensageerror.jpg)
-
solucione el error.
en la pestaña source.cuando seleccionamos Add/Remove Source Files.
se nos abre una ventana y selecionamos en Code Generation Tool: ASM11
lo que no se es porque no rula el programa.no se si es por haber seleccionado esto o por otra cosa.hechare un vistazo.
-
no se si ya tienes estos PDF, de todas maneras esta bueno verlos, en uno de ellos esta como vincular el codigo en asm paso a paso para debug
http://www.4shared.com/file/84491690/8d223d2a/PROTEUS_TE_1.html
http://www.4shared.com/file/84491689/ede5b4cf/PROTEUS_TE_2.html
http://www.4shared.com/file/84491688/9ae28459/PROTEUS_TE_3.html
http://www.4shared.com/file/84491687/a5d99c8/PROTEUS_TE_4.html
http://www.4shared.com/file/84491694/8a4ff933/PROTEUS_TE_5.html
http://www.4shared.com/file/84491693/142b6c90/PROTEUS_TE_6.html
http://www.4shared.com/file/84491692/632c5c06/PROTEUS_TE_7.html
http://www.4shared.com/file/84491691/fa250dbc/PROTEUS_TE_8.html
-
gracias por los enlaces.estos ya me los lei enteros hace algunas semanas y me fueron muy utiles.pero igual no me di cuenta de esa configuracion.
de todas formas me he bajado unos tutoriales de la pagina de nocturno,y ahi me he dado cuenta del error que cometi.y por eso me salia el error del .LST
y es que en Add/Remove Source Files.
esta la opcion Debug Data Extraction. y dentro de ella hay que buscar el ejecutable mpasmddx.exe y ya podemos elegir en Code Generation Tool.la erramienta que queramos,como el mpasm.pero aunque ya no me sale el error de no encontrar el .LST.todabia no rula el programa.y eso que en el mplab los registros si hacen bien los cambios.
seguire indagando.
-
se me ha presentado un problema.y es que al darle al play paso a paso para que la emulacion se haga de esta forma,las lineas de codigo no tenian nada que ver con el codigo que tenia que emular.y me ha llebado un tiempo descubrir que para que el codigo sea correcto,hay que poner una herramienta en Code Generation Tool.que esta en Source Add/Remove Source Files.yo he puesto el MPASM.
-
haber si alguien que sepa mas de isis,me puede decir cual puede ser el problema de la imagen de abajo.
al principio creia que el problema pudiera ser de haber puesto una linea de codigo erronea.pero cuando he visto que el error tambien sale en un NOP.
ya me huele a algun problema relacionado con el ISIS pero no se que puede ser.
(http://img14.imageshack.us/img14/8417/errorisis.th.jpg) (http://img14.imageshack.us/i/errorisis.jpg/)
-
hola de nuevo.aqui traigo otro error.los estoy poniendo en este mismo hilo para volver a consultarlos si se me presentan de nuevo.
y por si a alguien les sirve.
(http://img27.imageshack.us/img27/8417/errorisis.th.jpg) (http://img27.imageshack.us/i/errorisis.jpg/)
en la imagen de arriva salen dos errores.el que esta enm rojo puede ser devido al de signo de exclamacion.
el mensage parece decir que en la linea del PC se ha producido un error al ejecutar una instruccion relacionada con los registros FSR.
y que por el motivo que sea,no se ha podido llegar a introducior el dato correcto en esa posicion de memoria.y casi seguro que no se ha podido meter porque la direccion 0x009A es una direccion que no esta implementada en el pic16f876.
pero como a podido pasar esto? cuado en esa line.solo hay un movlw 0x47
-
Hola Groundman, sería bueno ver el código completo en C.
Se me ocurre que una interrupción está interrumpiendo a otra y hay pérdida de datos por alguna razón.
-
esta hecho en asm.no se si lo que dices de esas dos interrupciones en conflicto pudiera estar sucediendo.ya que tengo todas las interrupciones estan deshabilitadas excepto
la producida por recepcion de la usart.
-
Hola, con la porción de código que publicas deduzco que la XOR que haces con el contenido de INDF_TEMP y 0x23 nunca da cero y el contenido de FSR se ve incrementado hasta rebasar la memoria física del PIC.
El contenido de INDFTEMP debe ser 0b00100011 para que FSR nunca se desborde.
-
gracias por tu percate.tenias razon de que tenia un problema con los FSR.pero despues de haberlo corregido,seguia el problema.
entonces he decidido realizar le emulacion directamente sin utilizar las interrupciones.y ya no sale el mensage de error.
asi que lo que puede pasar.es que se pierda algun dato durante la llamada de interrupcion.pero no se que puede ser.ya que el programa empieza y acaba antes de producirse la interrupcion.es decir que no se corta por la mitad.
no se si deberia guardar algun registro mas a parte de estos antes de llamar a una interrupcion o restaurarlos despues de esta.
esto es lo que uso:
PUSH MACRO ;macro para salvar registros antes de una llamada a interrupcion
movwf W_TEMP
swapf STATUS,W
movwf STATUS_TEMP
clrf STATUS
movfw PCLATH
movwf PCLATH_TEMP
clrf PCLATH
ENDM
POP MACRO ;macro para restaurar registros despues de una llamada a interrupcion
movfw PCLATH_TEMP
movwf PCLATH
swapf STATUS_TEMP,W
movwf STATUS
swapf W_TEMP,F
swapf W_TEMP,W
ENDM
-
Uff no sé bien... pero al menos ya tienes más pistas.
¿Puedes poner el código completo en ASM?
-
aqui pongo el codigo.he desviado algunos flujos del programa para centrarme en el error.el codigo no esta muy depurado que digamos.
pero hasta que no funcione,no quiero entratenerme en su limpieza.
en la zona de la etiqueta PRINCIPAL tengo dos lineas deshabilitadas por unos puntos y coma.si las habilitamos y deshabilitamos las interrupciones en la linea anterior,el programa deja de indicar el error.con signo de eclamacion.
el error en letras rojas de la imagen anterior.sigue apareciendo.aun deshabilitando las interrupciones.pero me parece que es un problema de lectura del isis con la emulacion del COMPIM.ya que sale al poner en pausa la emulacion.y no durante la emulacion en curso.
;*****************************************
; PROGRAMA : gps_usart.asm
; Funcion : guarda la trama GPS en memoria ram
; Serial port config: 38400 baudios,8 bits,paridad = none
;
; Revision : 1.0 23/8/2009 Programa para : PIC16F876A
; CPU Clock : 3.6864 MHz Reloj instruccion :
; WDT : Deshabilitado Tipo de reloj : XT
; Code Prot : OFF
;******************************************
;
;NOTAS:
; este programa almacena una trama complata de GPS en la direccion 0x20
; la trama podemos elegirla cambiando los caracteres de C1,C2,C3,C4,C5,C6,C7.
;
LIST P=16F876A ;Se indica el modo de procesador
RADIX HEX ;Sistema de numeracion hexadecimal
INCLUDE "P16f876A.inc" ;se incluye la definicion de los
;registros internos
__CONFIG _CP_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC & _BODEN_OFF &_LVP_OFF &_CPD_OFF ;&_WRT_ENABLE_OFF
ERRORLEVEL -302
CBLOCK 0X20 ;BLOQUE DEL COMANDO A LEER
C1 ;'$'
C2 ;'G'
C3 ;'P'
C4 ;'G'
C5 ;'G'
C6 ;'A'
C7 ;'.'
ENDC
CBLOCK 0x74
W_TEMP
STATUS_TEMP
PCLATH_TEMP
TEMP_DATO_H
TEMP_DATO_L
DIR_EEPROM
DATO_EEPROM
TEMP_EEP
TEMP_NUMERICO
PRINCIPIO_RAM
TEMP_FSR
CARACTER
FSR_TEMP
ENDC
PUSH MACRO ;macro para salvar registros antes de una llamada a interrupcion
movwf W_TEMP
swapf STATUS,W
movwf STATUS_TEMP
clrf STATUS
movfw PCLATH
movwf PCLATH_TEMP
clrf PCLATH
ENDM
POP MACRO ;macro para restaurar registros despues de una llamada a interrupcion
movfw PCLATH_TEMP
movwf PCLATH
swapf STATUS_TEMP,W
movwf STATUS
swapf W_TEMP,F
swapf W_TEMP,W
ENDM
BANK0 MACRO
BCF STATUS,RP0
BCF STATUS,RP1
ENDM
BANK1 MACRO
BSF STATUS,RP0
BCF STATUS,RP1
ENDM
BANK2 MACRO
BCF STATUS,RP0
BSF STATUS,RP1
ENDM
BANK3 MACRO
BSF STATUS,RP0
BSF STATUS,RP1
ENDM
;<<<<<<<<<<<<<SELECCION DE LOS SECTORES DE LA MEMORIA DE PROGRAMA>>>>
;--------IMPORTANTE:
;ANTES DE UBICAR UNA TABLA DEL TIPO (ADDWF PCL,F)TENEMOS QUE INDICAR EL SECTOR DONDE SE UBICA ESE SUBPROGRAMA
;EJM.SI PONEMOS EL SUBPROGRAMA EN EL SECTOR A PARTIR DE LA DIR:100 .PONDREMOS LA LINEA SECTOR_100 ANTES DE LA TABLA DE DATOS
;
SECTOR_000 MACRO
BCF PCLATH,0
BCF PCLATH,1
ENDM
SECTOR_100 MACRO
BSF PCLATH,0
BCF PCLATH,1
ENDM
SECTOR_200 MACRO
BCF PCLATH,0
BSF PCLATH,1
ENDM
SECTOR_300 MACRO
BSF PCLATH,0
BSF PCLATH,1
ENDM
#define GIE_ON bsf INTCON,GIE
#define GIE_OFF bcf INTCON,GIE
;<<<<<<---------------------- VECTOR DE RESET ------------------------>>>>>>>
ORG 0x00 ;Inicio en el Vector de Reset
goto INICIO ;Va a la primera instruccion del programa
;<<<<<<--------------------VECTOR DE INTERRUPCION---------------------->>>>>>>
ORG 0x04
goto INTER ;Va al programa de interrupcion
;<<<<<<----------------- INICIO PROGRAMA PRINCIPAL ------------------->>>>>>>
INICIO BANK1 ;selecciona banco 1
movlw .5 ;(.5 =38400 baudios crystal 3.6864 MHz)
movwf SPBRG
movlw b'00000110'
movwf ADCON1 ;porta entradas digitales
movlw 0xFF
movwf TRISA
clrf TRISB
movlw b'00000110' ;Configuracion USART modo alta velocidad
movwf TXSTA
movlw b'11000000'
movwf TRISC ;configura pins TX y RX
BANK0 ;selecciona banco 0 -------------
movlw b'10010000' ;Configuracion de la usart
movwf RCSTA ;para recepcion continua y habilitacion de la usart
movlw '$'
movwf C1 ;registros para la cabezera NMEA(cambiarlos para otra cabecera)
movlw 'G'
movwf C2
movlw 'P'
movwf C3
movlw 'G'
movwf C4
movlw 'G'
movwf C5
movlw 'A'
movwf C6
movlw ','
movwf C7
clrf DIR_EEPROM
BANK1
movlw b'00100000' ;habilita interrupcion por recepcion de usart
movwf PIE1
movlw b'11000000' ;habilita interrupciones generales y perifericas
movwf INTCON
PRINCIPAL ;CALL LEEDATO
;GOTO PRINCIPAL;GIE_ON
BANK0
movlw 0xA2
movwf FSR
movfw INDF
movwf PORTB
nop
nop
nop
nop
goto PRINCIPAL;
GRARAM ;GIE_OFF ;prohibe interrupciones
BANK1
movlw 0xA0
movwf PRINCIPIO_RAM
BANK0
movlw 0x27 ;valor del primer caracter de la ram a traducir
movwf TEMP_FSR
REP3
movfw TEMP_FSR
movwf FSR ;carga el puntero de ram
movfw FSR ;
xorlw 2D ;direccion comienzo a ignorar
btfsc STATUS,Z
call SUMA5 ;cinco pociciones de memoria a ignorar
movfw FSR ;
xorlw 36 ;direccion comienzo a ignorar
btfsc STATUS,Z
call SUMA1 ;una pocicion de memoria a ignorar
;movfw FSR ;
;xorlw 3B ;direccion comienzo a ignorar
;btfsc STATUS,Z
;call SUMA2 ;cuatro pociciones de memoria a ignorar
movfw FSR ;
xorlw 3B ;direccion centenas de coordenada ecuador
btfsc STATUS,Z
call CENTENAS
movfw FSR ;
xorlw 43 ;direccion comienzo a ignorar
btfsc STATUS,Z
call SUMA1 ;una pocicion de memoria a ignorar
movfw FSR ;
xorlw 48 ;direccion comienzo a ignorar
btfsc STATUS,Z
return ;final del subprograma
movfw TEMP_FSR
movwf FSR ;carga el puntero de ram
movfw INDF ;recoge valor
movwf CARACTER
movfw CARACTER
call TRADUCE ;traduce el valor ascii a numerico
movwf TEMP_NUMERICO
BANK1
movfw PRINCIPIO_RAM
movwf FSR
BANK0
movfw TEMP_NUMERICO
movwf INDF
BANK1
incf PRINCIPIO_RAM,F
BANK0
incf TEMP_FSR,F
REP4 incf TEMP_FSR,F
goto REP3
SUMA5 movlw 0x05
addwf TEMP_FSR,f
return
SUMA1 movlw 0x01
addwf TEMP_FSR,f
return
SUMA2 movlw 0x02
addwf TEMP_FSR,f
return
CENTENAS movlw 0x3E
movwf FSR
;movfw INDF
clrf TEMP_DATO_H
movlw '0'
xorwf INDF,W
btfss STATUS,Z
incf TEMP_DATO_H,F
movlw 0x3F
movwf TEMP_FSR
BANK1
incf PRINCIPIO_RAM,F
BANK0
movlw 0xA7
movwf FSR
movfw TEMP_DATO_H
movwf INDF
return
movwf DATO_EEPROM
incf DIR_EEPROM,F
movfw DIR_EEPROM
call ESCRIBIR_DATO
GIE_ON
GOTO GRARAM
;<<<<<<<<<<<-------------CONVERTIR VALORES HEX EN DECIMALES--------------->>>>>>>>>>>>>>>>>>>>>>>>>>>>>
TRADUCE movwf TEMP_DATO_H ;
movlw 0x30
NOP
NOP
subwf TEMP_DATO_H,F
swapf TEMP_DATO_H,F
incf FSR,F
movfw INDF
movwf TEMP_DATO_L
movlw 0x30
subwf TEMP_DATO_L,W
addwf TEMP_DATO_H,W
return
;<<<<<<<<<<--------------METE EN UN BLOQUE DE RAM LOS COMANDOS RECIBIDOS------------>>>>>>>>>>>>>>>
LEEDATO ;GIE_OFF
BANK0 ;Cambio al banco 0
movlw 0x1f ;carga en w el valor 0x1F principio de RAM para introducir mensages recividos"
movwf FSR ;cargalo en el puntero de registro de proposito general
LEEDATO2 incf FSR,F ;incrementa la siguiente direccion de la ram
movfw INDF ;carga en W el valor direcionado en FSR
xorwf RCREG,W ;comparalo con el caracter recivido de la USART
btfss STATUS,Z ;si es el mismo continua con el programa
return;GOTO PRINCIPAL ;en caso contrario empieza de nuevo
call ERR_USART ;salta a ERR_USART
movlw ',' ;carga en w el caracter '.' caracter posterior de cabezera
xorwf RCREG,W ;comparalo con el caracter recivido de la USART
btfss STATUS,Z ;si es el mismo salta
goto LEEDATO2
SIGUIENTE incf FSR,F ;incrementa FSR
movfw RCREG ;carga en W el caracter recivido
movwf INDF ;mete el caracter en la posicion de memoria que apunta FSR
;movlw '*' ;carga valor '$' en w
;xorwf RCREG,W ;comparalo con el valor recivido de la usart(primer caracter de siguiente trama)
;btfsc STATUS,Z
;return ;si es igual retorna(fin de captura de trama)
movlw 0x73 ;valor limite de RAM
xorwf FSR,W
btfsc STATUS,Z
return ;si se excede del valor anterior.retorna
call ERR_USART ;salta a ERR_USART
goto SIGUIENTE
;<<<<<<<<<<<<<<<<<<<<------SUBPROGRAMA PARA ESPERA DE CARACTER Y CORRECTOR DE ERRORES----->>>>>>>>>>>>>
ERR_USART btfss PIR1,RCIF ;espera al proximo caracter
goto ERR_USART
btfsc RCSTA,OERR
call BORR_ERR ;Error de Sobreescritura
btfsc RCSTA,FERR
call BORR_ERR ;Error de Trama
BCF PIR1,RCIF ;borra el flag de interrupcion por caracter recivido
return
BORR_ERR bcf RCSTA,CREN
movf RCREG,w
movf RCREG,w
movf RCREG,w
bsf RCSTA,CREN
return
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<PROGRAMA DE GESTION DE INTERRUPCIONES>>>>>>>>>>>>>>>>>>>>>>
INTER PUSH ;salva el contenido de W,STATUS Y PCLATH
BANK0
;btfsc PIR1,RCIF ;comprueba si el shift register(RSR)esta lleno.y si es asi salta
call LEEDATO
;xorlw '*'
;btfss STATUS,Z
;call GRARAM
POP ;restaura el contenido de W,STATUS Y PCLATH
bcf PIR1,RCIF ;borra flag de interrupcion por recepcion de usart
;bsf PIR1,RCIF
call BORR_ERR
;incf INT_CONT,F ;incrementa el contador de interrupciones para asegurarnos de que se entra al programa
;btfsc INT_CONT,0 ;-almenos una vez por cada dos interrupciones
;retfie ;retorno de interrupcion
;GIE_ON ;deshabilita interrupciones
retfie
;//////////////////////////////////////////////ESCRIBIR DATO EN EEPROM///////////////////////////////////////////////////
;org 200
ESCRIBIR_DATO ;SECTOR_200
;GIE_OFF
BANK0
movfw DIR_EEPROM ;DIRECCION A ACCEDER
BANK2
movwf EEADR
BANK0
movfw DATO_EEPROM
BANK2
movwf EEDATA
BANK3
bcf EECON1,EEPGD ;acceso a memoria de datos
bsf EECON1,WREN ;HABILITA ESCRITURA
movlw 0X55
movwf EECON2
movlw 0XAA
movwf EECON2
bsf EECON1,WR ;INICIA ESCRITURA
ESPERA btfsc EECON1,WR
goto ESPERA
bcf EECON1,WREN ;deshabilitar escritura en eeprom
BANK0
bcf PIR2,EEIF
bcf EECON1,WR
movfw DIR_EEPROM
call VERIFICA
return
VERIFICA call LEER_DATO
movfw TEMP_EEP
subwf DATO_EEPROM,W
btfss STATUS,Z
goto ESCRIBIR_DATO
return
;///////////////////////////////////////////LEER DATO DE MEMORIA EEPROM ///////////////////////////////////////////////////////
LEER_DATO GIE_ON
BANK2
movwf EEADR ;escribir direccion de memoria eeprom
BANK3
bsf EECON1,RD ;ORDEN DE LECTURA
LEE btfsc EECON1,RD
goto LEE
BANK2
movf EEDATA,W ;carga valor de eeprom en el registro W
BANK0
movwf TEMP_EEP
return
END
-
VALLA! parece que de casualidad nada mas postear la anterior respuesta,pude solucionar el problema de casualidad.
como suponia que el fallo venia del registro FSR.pues decidi poner un CLRF FSR.antes de la llamada al subprograma LEEDATO.justo despues de ejecutarse una interrupcion.la verdad es que todabia no he mirado porque de este fallo.y no me explico porque en todo momento creo que los valores del registro FSR son los correctos.
puede que este se modifique de alguna manera despues de una interrupcion.aver si veo el problema para aprender de este.
-
Leyendo este código:
PRINCIPAL
BANK0
movlw 0xA2
movwf FSR
movfw INDF
movwf PORTB
nop
nop
nop
nop
goto PRINCIPAL
Implica que FSR estará apuntando hacia la dirección 0x0A2 (bit RP1 de STATUS más los 8 bits de FSR). La dirección 0x0A2 está ubicada en el banco 1 y equivale a la dirección 0x22 ya que los bits 8 y 9 son los índices de los bancos y los 7 bits menos significativos son la posición en el banco respectivo.
¿Estás seguro que tus datos se deben leer desde el banco 1 y no desde el banco 0?
-
tienes razon.no me habia dado cuenta del error.hay que poner BANK1.
pero ahora que lo he puesto.me salen mas errores.como los de la imagen de abajo.
(http://img10.imageshack.us/img10/6089/errorisis3.th.jpg) (http://img10.imageshack.us/i/errorisis3.jpg/)
-
Soy de la idea que empieces el programa desde cero y que vayas agregando porciones poco a poco... hay varios detalles raros. ;-)
-
ufff.desde cero.jeje.
con el trabajito que me ha costao.de todas formas acabo de darme cuenta de otro error.y ya no me salen tantos.pero todavia me sale uno relacionado con los fsr.
haber si lo encuentro.
lo que no entiendo es a que se refiere el mensage.[PIC 16 MEMORY] ........... de arriva.pero bueno.ya aberiguare..saludos.
-
por finnnn.parece que ya no me salen errores.crucemos los dedos.
al parecer tenia varios fallos.los mas comunes eran registros que estaban en el banco 0,y los leia en el banco 1.asi que cuando manejaba los FSR.pues resulta que apuntaba a direcciones inexistentes o prohibidas.
pero el mas importante.es que en el programa principal.hay que deshabilitar las interrupciones al principio y volver a habilitarlas al final.si no,al regresar a la posicion de memoria que dejo el programa.datos que tenian un valor.cambiaban y desfarataba todo el asm.
para que no suceda esto ,supongo que tendria que guardar dichos datos en los push.para luego restaurarlos con el pop.
cuando depure mas el asm.intentare realizar esto para ver los resultados.
-
jeje te salvaste de empezarlo desde cero :D
-
pues si.jeje.
ahora que he solucionado el problema deshabilitando las interrupciones.me he dado cuenta de que no voy a poder usar ese sistema.
ya que si las deshabilito.resulta que si el programa principal si es muy largo y no ha terminado antes de que se vuelva a pruducir la interrupcion por recepcion de usart.
pues nunca o casi nunca el programa entra en la interrupcion y no se actualizan los datos de la usart para usarlos en el programa principal.
por eso he decidido no deshabilitar las interrupciones en el programa principal.para dar prioridad a la usart.
pero entonces me siguen saliendo los mensages de error anteriores.asi que voy a intentar solucionarlo si puedo.
acabo de incluir algunas lineas mas a los push y pop.para que no se pierdan datos al retornar el programa.pero parece que salen errores del mismo tipo pero con diferentes direcciones.
abajo lo pego:
PUSH MACRO ;macro para salvar registros antes de una llamada a interrupcion
BANK0
movwf W_TEMP
swapf STATUS,W
movwf STATUS_TEMP
clrf STATUS
movfw PCLATH
movwf PCLATH_TEMP
clrf PCLATH
MOVFW FSR
MOVWF FSR_TEMP
ENDM
POP MACRO ;macro para restaurar registros despues de una llamada a interrupcion
BANK0
movfw PCLATH_TEMP
movwf PCLATH
swapf STATUS_TEMP,W
movwf STATUS
swapf W_TEMP,F
swapf W_TEMP,W
MOVFW FSR_TEMP
MOVWF FSR
ENDM
-
por finnnnnn. estaba ya que me tiraba de los pelos.valla paliza de asm.
ya estaba arto del mensage:
[PIC16 MEMORY]PC=0X00D0 Attemp to read unimplemented memory location 0x008F ignored. lo pongo asi para que se encuentre facil en el buscador.
aunque la localizacion de memoria 0x008F no era el unico mensage de error.tambien estaban 0x0090,0x0095,0x0096,0x0097,0x009A,etc.
se que estas direcciones daban error porque como dice el mensage,no estan implementadas en el pic.es decir que no se pueden usar.solo tenemos que ver el datasheet para entenderlo.
lo que no entiendo es el PC=0XD0 ya que en el programa esta linea era un NOP.y no habia ninguna instrucion que pudiera meter ningun dato en lor registros
que he mencionado anteriormente.
todo el problema estaba en que al regresar al programa principal despues de una interrupcion.habia un registro que no era actualizado al valor originario a la inerrupcion.
este registro es el PCL.
yo pensaba que el valor de este registro era guardado en el Stack Pointer.y que guardando tambien el valor del PCLATH ya tenia asegurado el retorno de la
interrupcion sin que hubiere problemas.
pero no se que sera.igual se me esta desbordando la pila.aunque me lo diria el ISIS creo.
he modificado los PUSH y POP para corregir el error.haber si esto rula ya de una vez.
PUSH MACRO ;macro para salvar registros antes de una llamada a interrupcion
BANK0
movwf W_TEMP
swapf STATUS,W
movwf STATUS_TEMP
clrf STATUS
movfw PCLATH
movwf PCLATH_TEMP
clrf PCLATH
swapf PCL,W
movwf PCL_REG
ENDM
POP MACRO ;macro para restaurar registros despues de una llamada a interrupcion
BANK0
movfw PCLATH_TEMP
movwf PCLATH
swapf STATUS_TEMP,W
movwf STATUS
swapf W_TEMP,F
swapf W_TEMP,W
swapf PCL_REG,W
movwf PCL
ENDM
-
hola a todos.....soy nuevo en el foro y tambien intentando programar pics....lo primero que he tratado de hacer es simular en proteus un que lee el puerto a y escribe en el puerto b......hice el programa en mplab y funciona correctamente pero al compilarlo en proteus aparecen dos errores....uno de ellos error 131: processor type is undefined.....como soy completamente nuevo en el tema no se de que se trata por que he seguido los pasos de los manuales encontrados de forma fiel....me pregunto si es incopatibilidad entre las versiones de mplab y proteus que uso
isis 7.2v profesional sp2
mplab ide 7.10
de todas formas me gustaria que alguien me ayudara por que en esto momentos me detiene este problema para avanzar