Autor Tema: PIC16f877. Direccionamiento indirecto.  (Leído 4108 veces)

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

Desconectado cheswik

  • PIC10
  • *
  • Mensajes: 14
PIC16f877. Direccionamiento indirecto.
« en: 04 de Junio de 2007, 11:07:59 »
Hola,

La intención del siguiente código  era escribir en la posición 110h de la ram (banco2). Para ello selecciono el banco 2 y cargo el apuntador con un 10h. Al ejecutar el programa lo que realmente se modifica es la dirección 10h del banco 0. ¿Alguien puede decirme que estoy haciendo mal?

INICIO          clrf STATUS
                  movlw 0x10
         movwf FSR             ;INICIO APUNTADOR
         movlw 0x01            ;DATO A ALMACENAR
         bsf STATUS,RP1      ;BANCO2
         bcf STATUS,RP0
         movwf INDF           ;ACCESO INDIRECTO
         bcf STATUS,RP1
      END   

Gracias
« Última modificación: 04 de Junio de 2007, 11:11:57 por cheswik »
La estadística es la ciencia según la cual si una persona come dos pollos y otra ninguno, se deduce que cada una se ha comido un pollo

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: PIC16f877. Direccionamiento indirecto.
« Respuesta #1 en: 04 de Junio de 2007, 11:32:13 »
hola bienvenido al foro, si estas usando un pic de la gama 16FXXXX entonces lo que pretendes es utilizar el direccionamiento indirecto con 9 bits, pues deseas apuntar al banco2, primero lee bien esta parte del datasheet:


se refiere a que uses el bit IRP del registro status, ahora observa el grafico:


  • los bits RP0 RP1 son para moverse entre los bancos en un direccionamiento directo
  • el bit IRP y el octavo bit del registro FSR sirven para moverse entre los bancos en un direccionamiento indirecto

pruebalo y nos comentas tus resultados, exitos!  :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: PIC16f877. Direccionamiento indirecto.
« Respuesta #2 en: 04 de Junio de 2007, 12:09:40 »
Como ya te ha explicado magistralmente micro_cadaver, lo que debes tener en cuenta es que el registro FSR es de 8 bits, por lo que puedes apuntar a las primeras 256 posiciones de RAM sin tener necesidad de setear el bit IRP.

Si deseas direccionar una posicion más alla de la 0xff, entonces debes setear el bit IRP, y apuntar en el registro FSR a la posicion correcta.

Entonces, para direccionar indirectamente a la posicion 110h, deberias hacer:

    bsf STATUS,IRP            ;posicion a afectar = 0x100 + valor registro FSR
    movlw 0x10                 
    movwf FSR                  ;posicion a afectar= 0x100 + 0x10 = 0x110

(recordá que te queda el bit IRP seteado...)

¿Se comprendió?

Suerte
« Última modificación: 04 de Junio de 2007, 12:11:51 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: PIC16f877. Direccionamiento indirecto.
« Respuesta #3 en: 04 de Junio de 2007, 14:58:10 »

Desconectado cheswik

  • PIC10
  • *
  • Mensajes: 14
Re: PIC16f877. Direccionamiento indirecto.
« Respuesta #4 en: 04 de Junio de 2007, 15:52:44 »
Perfectamente entendido, con irp seteado selecciono bancos 2 y 3 (desde 0x100 a 0x1ff). tengo que fijarme mejor en el datasheet.

Gracias a todos
                   bsf STATUS,IRP      ;   SELECCION BANCOS 2-3
         movlw 0x10            ;   DIR 0X110
         movwf FSR             ;   INICIO APUNTADOR
         movlw 0x01             ;DATO A ALMACENAR
         movwf INDF           ;ACCESO INDIRECTO


                
« Última modificación: 04 de Junio de 2007, 15:56:03 por cheswik »
La estadística es la ciencia según la cual si una persona come dos pollos y otra ninguno, se deduce que cada una se ha comido un pollo


 

anything