Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

05/02/2010 #1


Duda con Modo de Direccionamiento
Que tal; leyendo acerca de los modos de direccionamiento que tiene el microcontrolador me surgieron un par de dudas.
La primera es la siguiente supongamos que en la posicion de memoria $0367 tengo almacenado el valor $0F y a este ultimo lo quiero transferir al acumulador.

Lo que hago es lo siguiente LDA $0367, hasta ahi todo joya, pero lo que no entiendo es como el cpu arma la direccion extendida con las partes alta ($03) y baja ($67) de la direccion de memoria. Que son las partes alta y baja ? Como esta formada una direccion de memoria ?

PD: Estoy trabajando con un micro freescale y lenguaje ensamblador.

Bueno solo eso, gracias.
06/02/2010 #2

Avatar de Meta

Respuesta: Duda con Modo de Direccionamiento
Código:
;*********************************** Indirecto_01.asm ***********************************
;
;    ===================================================================
;      Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;      E. Palacios, F. Remiro y L. López.        www.pic16f84a.org
;       Editorial Ra-Ma.  www.ra-ma.es
;    ===================================================================
;
; Este programa comprueba el funcionamiento del direccionamiento indirecto. Se trata de
; escribir con el valor de una constante a partir de la última dirección ocupada de
; la memoria RAM de datos hasta el final.
; Su correcto funcionamiento debe comprobarse con el simulador del MPLAB.
;
; ZONA DE DATOS **********************************************************************

    LIST        P=16F84A
    INCLUDE        <P16F84A.INC>
    __CONFIG    _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC

    CBLOCK    0x0C
    RAM_Contador
    ENDC

CONSTANTE        EQU    2Ah                ; Por ejemplo.
RAM_ULTIMA_DIR    EQU    4Fh                ; Ultima dirección de RAM de datos utilizada para
                                    ; el PIC16F84A.
; ZONA DE CÓDIGOS ********************************************************************

    ORG     0
Inicio
    movlw    RAM_ULTIMA_DIR-RAM_Contador    ; Número de posiciones a escribir.
    movwf    RAM_Contador
    movlw    RAM_Contador+1            ; Primera posición de RAM libre.
    movwf    FSR                        ; Primera dirección de memoria RAM a escribir.
RAM_EscribeConstante
    movlw    CONSTANTE                ; Escribe el valor de la constante en la
    movwf    INDF                    ; posición apuntada por FSR. (W) -> ((FSR))
    incf    FSR,F                    ; Apunta a la siguiente dirección de memoria.
    decfsz    RAM_Contador,F
    goto    RAM_EscribeConstante
Principal
    sleep                            ; Pasa a reposo.

    END

;    ===================================================================
;      Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;      E. Palacios, F. Remiro y L. López.        www.pic16f84a.org
;       Editorial Ra-Ma.  www.ra-ma.es
;    ===================================================================







Código:
;*********************************** Indirecto_02.asm ***********************************
;
;    ===================================================================
;      Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;      E. Palacios, F. Remiro y L. López.        www.pic16f84a.org
;       Editorial Ra-Ma.  www.ra-ma.es
;    ===================================================================
;
; Este programa comprueba el funcionamiento de la lectura y escritura en la memoria de 
; datos mediante direccionamiento indirecto.
;
; Se trata de escribir, a partir de la última dirección ocupada de memoria RAM de datos
; hasta el final, el contenido con el valor de la dirección. Así, por ejemplo, en la
; dirección 20h se escribe "20", en la dirección 21h se escribe "21", en la dirección 22h
; se escribe "22" y así sucesivamente. Se escribirá hasta la dirección 4Fh que son las
; direcciones implementadas en PIC16F84A.
;
; A continuación se procederá a la lectura de la memoria RAM de datos completa, desde la
; la dirección 00h hasta la 4Fh. En la pantalla se visualizará la dirección y su
; contenido. Observar que direcciones de 00h a 0Bh corresponden al SFR. Cada
; visualización se mantendrá durante medio segundo en pantalla.
;
; En los contadores se carga siempre un valor más, porque la instrucción
; "decfsz RAM_Contador,F" salta cuando es cero y no permite visualizar el contenido del
; último registro.
 
; ZONA DE DATOS **********************************************************************

    LIST        P=16F84A
    INCLUDE        <P16F84A.INC>
    __CONFIG    _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC

    CBLOCK    0x0C
    RAM_Dato                        ; Dato a escribir o leer.
    RAM_Contador
    ENDC

RAM_ULTIMA_DIR    EQU    4Fh                ; Ultima dirección utilizada.

; ZONA DE CÓDIGOS ********************************************************************

    ORG     0
Inicio
    call    LCD_Inicializa
    movlw    RAM_PrimeraLibre        ; Este es la primer dato a escribir en la RAM.
    movwf    RAM_Dato
    movlw    RAM_ULTIMA_DIR-RAM_PrimeraLibre+1 ; Número de posiciones a escribir.
    movwf    RAM_Contador
    movlw    RAM_PrimeraLibre
    movwf    FSR                        ; Primera dirección de memoria RAM a escribir
RAM_Escribe
    movf    RAM_Dato,W                ; Escribe el contenido de RAM_Dato en posición
    movwf    INDF                    ; apuntada por FSR.
    incf    FSR,F                    ; Apunta a la siguiente dirección de memoria.
    incf    RAM_Dato,F                ; Incrementa el dato a cargar.
    decfsz    RAM_Contador,F
    goto    RAM_Escribe
;
; El programa principal procede a leer la RAM desde la dirección 0.
;
Principal
    movlw    RAM_ULTIMA_DIR+1         ; Número de posiciones a leer.
    movwf    RAM_Contador
    movlw    0                        ; Primera dirección a leer.
    movwf    FSR
RAM_Lee
    movf    INDF,W                    ; Lee el contenido de RAM_Dato en posición
    movwf    RAM_Dato                ; apuntada por FSR.
    call    VisualizaRAM
    incf    FSR,F                    ; Apunta a la siguiente dirección de memoria.
    decfsz    RAM_Contador,F            ; Si no ha llegado al final pasa a leer la
    goto    RAM_Lee                    ; siguiente.
    goto    Principal
;
; Subrutina "VisualizaRAM" --------------------------------------------------------------
;
VisualizaRAM
    call    LCD_Linea1                ; Pasa a visualizarla.
    movlw    MensajeDireccion
    call    LCD_Mensaje
    movf    FSR,W                    ; Visualiza el número de la posición
    call    LCD_ByteCompleto
    call    LCD_Linea2
    movlw    MensajeContenido
    call    LCD_Mensaje
    movf    RAM_Dato,W                ; Visualiza el contenido de la posición
    call    LCD_ByteCompleto
    call    Retardo_500ms
    return

; "Mensajes" ----------------------------------------------------------------------------
;
Mensajes
    addwf    PCL,F
MensajeDireccion
    DT "Direccion: ", 0x00
MensajeContenido
    DT "Contenido: ", 0x00

    INCLUDE  <RETARDOS.INC>        ; Estos includes también reservan posiciones de
    INCLUDE  <LCD_4BIT.INC>        ; memoria RAM. Por tanto la última posición habrá 
    INCLUDE  <LCD_MENS.INC>        ; que definirla después de éstos.

    CBLOCK
    RAM_PrimeraLibre            ; Ultima posición de RAM ocupada por una variable.
    ENDC

    END

;    ===================================================================
;      Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;      E. Palacios, F. Remiro y L. López.        www.pic16f84a.org
;       Editorial Ra-Ma.  www.ra-ma.es
;    ===================================================================
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.