TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: CMECKARDT en 05 de Febrero de 2004, 09:09:00

Título: cambio de banco en 16f877
Publicado por: CMECKARDT en 05 de Febrero de 2004, 09:09:00
Hola a todos, soy nuevo por aqui.

tengo un problemita con el cambio de bancos de memoria del 16f877, co el cual estoy trabajando... todo iba perfecto hasta que cuando compilo me muestra este mensaje:

Crossing page boundary -- ensure page bits are set.

y cuando pruebo... las instrucciones que estan en esta area no las procesa... o simplemente las salta

¿¿  como hago para cambiar de banco en el programa .asm??

gracias por adelantado
Título: RE: cambio de banco en 16f877
Publicado por: solid84 en 05 de Febrero de 2004, 23:47:00
que tal cmeckardt checa el data sheet en relacion al registro status ahi veras que tiene 2 bits que son RP0 y RP1 estos 2 bits son para realizar el cambio de pagina asi por ejemplo (00) es la pagina 0 (01) la pagina 1 y asi hasta la pagina 3 (11)
son los mismos bits que se usan para seleccionar los puertos como entradas o salidas ya que los registros trisx se encuentran en el banco 1 solo cuida el manejo de estos bits por que
si no el flujo del programa se pierde

ejemplo
               bsf      STATUS,RP0  ;aqui se accesa al banco 1
 
               bsf      STATUS,RP0
               bsf      STATUS,RP1  ;aqui se accesa al banco 3

espero ser claro saludos
Título: RE: cambio de banco en 16f877
Publicado por: felipito1 en 06 de Febrero de 2004, 02:24:00
Adicionalmente al comentario de solid84, si el programa sobrepasa los 1K en memoria flash, deberà tener en cuenta el pclath al utilizar los goto - addwf,x - call y las instrucciones que se afectan con el registro pclath, por que el programa salta a una posiciòn que no la hemos determinado si no està debidamente ajustado y la compilaciòn no và a informar nada.
Título: RE: cambio de banco en 16f877
Publicado por: CMECKARDT en 06 de Febrero de 2004, 06:44:00
    gracias por las respuestas ....  he llegado hasta aqui el mensaje me lo muestra en esta linea GOTO ADCVAL, esta rutina simplemente compara en una tabla un valor y lo guarda en un registro...  solo tengo que accesar a ella una vez a lo largo de mi programa    de veras no se que hacer asi tambien me presenta el mismo mensaje.... sera que me falta algo???

   ...
                ...
   movlw    HIGH ADCVAL
   movwf    PCLATH
   BSF   STATUS,5
   GOTO   ADCVAL    ; ADCVAL ESTA EN EL ORG H"0800"
   BCF   STATUS,5
                ...
                ...

gracias una vez mas..