Aquí cito algunas de vuestras definiciones para "sfr" en los cuestionarios entregados:
"El tipo de variable sfr se encarga de representar datos en el rango 0..255.." -¿y el propósito?
"El sfr es un área de registros que está entre la dirección 0x80 y 0xFF de la memoria del micro y sirve para definir los registros con los que voy a trabajar.."
"La variable sfr nos permite extraer o introducir información de una dirección de memoria de un micro, por ejemplo sfr P0 = 0x90;.." -en este caso sólo se define la variable pero no se escribe en el puerto. Yo lo expresaría como: "Una variable de tipo sfr permite...." -sfr no es una variable, sólo define el tipo, la variable sería "P0".
"Sirve para representar los datos en el área SFR del micro.." -¿y el propósito?
"Corresponde a una variable en la zona de registros especiales. Declara un entero positivo en el rango 0..255.." -¿y el propósito?
Algunas más correctas que otras, pero todas apuntan a la idea general. En un micro hay una zona de registros especiales llamada "SFR" (special function register) ubicados en la memoria interna. Cada registro tiene una función, poner en marcha un temporizador, arrancar el conversor, guardar el dato del convertidor, definir si un bit del puerto es de entrada o de salida, etc.
Desde esta zona se controla el funcionamiento del micro. Cuando se programa, lo primero que debe hacerse es tener acceso a dichos registros definiendo variables de tipo "sfr". Las direcciones de estos registros dependen del micro utilizado. En los datasheets podrás encontrarlas buscando con "memory map".
Por lo tanto con "sfr" declaramos una variable que usaremos más adelante en el programa.
Os dejo un enlace referente a la familia MCS-51: Intel 8051 [Wikipedia]
Apuntes teoría sensores y material de prácticas para la asignatura del curso Informática Industrial
Mostrando entradas con la etiqueta definir bien los registros sfr. Mostrar todas las entradas
Mostrando entradas con la etiqueta definir bien los registros sfr. Mostrar todas las entradas
7 de marzo de 2011
30 de mayo de 2008
Definir correctamente los registros SFR
A la hora de programar una aplicación basada en un microcontrolador, la definición de los registros es clave. Cada registro tiene una dirección de memoria única que hay que escribir correctamente teniendo delante la hoja de características, las tablas del micro (datasheet).
Por ejemplo, imagina que en un problema se pide definir los registros siguientes: IPL1, CL, IEN1 y ADCON. Siguiendo la figura que puedes ver aquí, tendríamos:

sfr IPL1= F8h; (F8h corresponde al registro de la primera columna).
sfr CL= E9h; (dirección base E8 + 1).
sfr IEN1= E8h; (E8h corresponde al registro de la primera columna).
sfr ADCON= F3; (dirección base F0 + 3);
Ten en cuenta que tienes que sumar a la dirección base de la primera columna izquierda, el desplazamiento correspondiente. Por ejemplo si tuvieras que definir el registro CCAMP2, su dirección sería DCh (base D8h+4) y no D4h (es bastante habitual leer en la primera fila de arriba y confundir los valores), por lo que os recomiendo que os fijéis bien o que contéis columnas para evitar errores.
Por otro lado, cada micro dispone de un mapa de registros diferente, en función del que uses, la dirección que usarás podrá ser diferente. Siempre es conveniente tener a mano la hoja de características del micro que estés usando. En clase ya vimos este caso cuando definimos los puertos para varios micros.
Por ejemplo, imagina que en un problema se pide definir los registros siguientes: IPL1, CL, IEN1 y ADCON. Siguiendo la figura que puedes ver aquí, tendríamos:
sfr IPL1= F8h; (F8h corresponde al registro de la primera columna).
sfr CL= E9h; (dirección base E8 + 1).
sfr IEN1= E8h; (E8h corresponde al registro de la primera columna).
sfr ADCON= F3; (dirección base F0 + 3);
Ten en cuenta que tienes que sumar a la dirección base de la primera columna izquierda, el desplazamiento correspondiente. Por ejemplo si tuvieras que definir el registro CCAMP2, su dirección sería DCh (base D8h+4) y no D4h (es bastante habitual leer en la primera fila de arriba y confundir los valores), por lo que os recomiendo que os fijéis bien o que contéis columnas para evitar errores.
Por otro lado, cada micro dispone de un mapa de registros diferente, en función del que uses, la dirección que usarás podrá ser diferente. Siempre es conveniente tener a mano la hoja de características del micro que estés usando. En clase ya vimos este caso cuando definimos los puertos para varios micros.
Suscribirse a:
Entradas (Atom)