TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: cheswik en 04 de Junio de 2007, 11:07:59

Título: PIC16f877. Direccionamiento indirecto.
Publicado por: cheswik 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
Título: Re: PIC16f877. Direccionamiento indirecto.
Publicado por: micro_cadaver 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:

(http://img443.imageshack.us/img443/2897/65025905mu8.jpg)
se refiere a que uses el bit IRP del registro status, ahora observa el grafico:

(http://img501.imageshack.us/img501/6178/25290470ud0.jpg)

pruebalo y nos comentas tus resultados, exitos!  :-/
Título: Re: PIC16f877. Direccionamiento indirecto.
Publicado por: BrunoF 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
Título: Re: PIC16f877. Direccionamiento indirecto.
Publicado por: microcom en 04 de Junio de 2007, 14:58:10
 cheswik
tal ves te sirva

http://www.todopic.com.ar/foros/index.php?topic=12640.0

saludos
Título: Re: PIC16f877. Direccionamiento indirecto.
Publicado por: cheswik 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