Autor Tema: mensage de error  (Leído 5351 veces)

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

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
mensage de error
« 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.

Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: mensage de error
« Respuesta #1 en: 14 de Junio de 2009, 10:47:45 »
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.
Montando mi primera impresora 3D (Raprep Prusa i3)


Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: mensage de error
« Respuesta #3 en: 14 de Junio de 2009, 13:19:54 »
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.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: mensage de error
« Respuesta #4 en: 11 de Julio de 2009, 12:38:36 »
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.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: mensage de error
« Respuesta #5 en: 11 de Julio de 2009, 15:32:12 »
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.


Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: mensages de error en isis
« Respuesta #6 en: 13 de Septiembre de 2009, 17:15:32 »
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.



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
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: mensage de error
« Respuesta #7 en: 13 de Septiembre de 2009, 19:08:46 »
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.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: mensage de error
« Respuesta #8 en: 13 de Septiembre de 2009, 20:12:24 »
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.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: mensage de error
« Respuesta #9 en: 13 de Septiembre de 2009, 22:21:06 »
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.
« Última modificación: 13 de Septiembre de 2009, 22:28:40 por migsantiago »

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: mensage de error
« Respuesta #10 en: 14 de Septiembre de 2009, 17:40:09 »
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
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: mensage de error
« Respuesta #11 en: 14 de Septiembre de 2009, 17:59:44 »
Uff no sé bien... pero al menos ya tienes más pistas.

¿Puedes poner el código completo en ASM?

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: mensage de error
« Respuesta #12 en: 14 de Septiembre de 2009, 18:59:25 »
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

Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: mensage de error
« Respuesta #13 en: 14 de Septiembre de 2009, 19:21:50 »
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.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: mensage de error
« Respuesta #14 en: 14 de Septiembre de 2009, 20:28:19 »
Leyendo este código:

Código: [Seleccionar]
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?