ensamblador c51

Tabla de contenido

1.C51 tipos de datos y tipos de almacenamiento

1.Tipo de datos:

2.C51 tipos de datos ampliados:

3.Tipo de almacenamiento de datos

4.Modo de almacenamiento de datos

2. Registros de funciones especiales y sus definiciones de variables de bits.

1. Definición C51 de registro de función especial

2. Definición C51 de variables de bits

3. Acceso absoluto a la dirección en idioma C51.

1. Macro absoluta

2._en_palabra clave


1.C51 tipos de datos y tipos de almacenamiento

1.Tipo de datos:

En vista de las características de hardware de 8051, C51 ha extendido 4 tipos de datos basados ​​en el estándar C
Tenga en cuenta que no se pueden utilizar punteros para acceder a los 4 tipos de datos extendidos.

2.C51 tipos de datos ampliados:

(1) El valor de la variable de bit puede ser 1 (verdadero) o 0 (falso)

(2) Registro de función especial sfr. Los registros de funciones especiales del microcontrolador 8051 se distribuyen entre las unidades de dirección 80H ~ FFH del área de almacenamiento de datos en el chip. El tipo de datos "sfr" ocupa una unidad de memoria y se puede utilizar para acceder a todos los registros de funciones especiales dentro del microcontrolador 8051. .
Por ejemplo: la declaración sfr P1=0x90 define el registro en el chip del puerto P1. Puede usar "p1=0xff" en declaraciones posteriores del programa para hacer que todos los pines de P1 salgan. como declaraciones de alto nivel para operar registros de funciones especiales.

Los nombres y distribución de los registros de funciones especiales SFR son los siguientes:

Nota: Cuando la mantisa de la dirección de bit es 0 u 8, es posible el direccionamiento de bits.

(3) Registro de función especial sfr16
El tipo de datos "sfr16" ocupa dos unidades de memoria y se utiliza para operar un registro de función especial de dos bytes. Por ejemplo: la instrucción "sfr16 DPTR=0x82" define el registro de puntero de datos de 16 bits en el chip DPTR, cuya dirección de bytes de 8 bits inferior es 82H y cuya dirección de bytes de 8 bits superior es 83H. DPTR se puede operar en declaraciones posteriores del programa.
(4) Bit de función especial sbit
sbit se refiere al bit direccionable del registro de función especial en el chip de AT89S51.


El símbolo "^" está precedido por el nombre del registro de función especial. El número después de "^" define la posición del bit direccionable del registro de función especial en el registro. El valor debe ser 0~7.

Tenga en cuenta que no confunda bit con sbit. bit define una variable de bit ordinaria, que solo puede ser 0 o 1. sbit es el bit direccionable que define el registro de función especial, y el valor es la dirección absoluta de un determinado bit del registro de función especial que puede ser direccionado por bits. Por ejemplo, la dirección absoluta del bit OV del registro PSW es ​​0xd2 .

3.Tipo de almacenamiento de datos

Al hablar del tipo de datos C51, se debe mencionar al mismo tiempo su tipo de almacenamiento y su relación con la estructura de memoria del microcontrolador 8051, porque cualquier tipo de datos definido por C51 debe ubicarse en una determinada parte del microcontrolador 8051 de cierta manera. En un área de almacenamiento, de lo contrario no tiene importancia práctica
8051 tiene áreas de almacenamiento de datos dentro y fuera del chip, así como un área de almacenamiento de programas
Área de almacenamiento de datos en el chip Es legible y escribible. La serie derivada de 8051 puede tener hasta 256 bytes de área de almacenamiento de datos internos (como el microcontrolador AT89S52), de los cuales los 128 bytes inferiores se pueden direccionar directamente y los 128 bytes superiores (80H ~ FFH) solo se pueden direccionar indirectamente, los 16 bytes que comienzan desde la dirección 20H son direccionables por bits.

El almacén de datos interno se puede dividir en 3 tipos de almacenamiento de datos diferentes: datos, idata y bdata.

Acceder al área de almacenamiento de datos fuera del chip es más lento que acceder al área de almacenamiento de datos en el chip, porque acceder al área de almacenamiento de datos fuera del chip requiere acceso de direccionamiento indirecto cargando la dirección del puntero de datos
Proporcionado por C51 Se utilizan dos tipos de almacenamiento de datos diferentes, xdata y pdata, para acceder al área de almacenamiento de datos fuera del chip
. El área de almacenamiento del programa solo se puede leer pero no escribir Puede estar dentro o fuera del microcontrolador 8051, o tanto externo como interno. Determinado por la conexión de hardware del microcontrolador 8051, C51 proporciona un tipo de almacenamiento de código para acceder al área de almacenamiento del programa.

Correspondencia entre el tipo de almacenamiento de idioma C51 y el espacio de almacenamiento 8051:

Tipo de almacenamiento C51 y su tamaño y rango de valores

(1) Área de DATOS. El direccionamiento es el más rápido. Las variables de uso frecuente deben colocarse en esta área, pero el espacio de almacenamiento en esta área es limitado. Además de las variables del programa, el área de DATOS también contiene pilas y grupos de registros. El identificador del tipo de almacenamiento en la declaración del área de DATOS son datos, y generalmente i se refiere a la variable para el almacenamiento de datos interno de 128 bytes de RAM en el chip, que se puede direccionar directamente.

Tanto las variables estándar como las variables declaradas por el usuario se pueden almacenar en el área de DATOS, siempre que no excedan el alcance del área de DATOS. Dado que C51 usa el grupo de registros predeterminado para pasar parámetros, el área de DATOS pierde al menos 8 bytes de espacio.
Además, cuando la pila interna se desborda, el programa se restablecerá inexplicablemente. Esto se debe a que 8051 no tiene un mecanismo de informe de errores y el desbordamiento de la pila solo se puede expresar de esta manera, por lo que se debe dejar un gran espacio en la pila para evitar el desbordamiento de la pila. (2) Área BDATOS. Área de direccionamiento de bits en DATOS, el direccionamiento de bits se puede realizar declarando variables en esta área. El identificador del tipo de almacenamiento en la declaración del área BDATA es bdata, que se refiere a los 128 bits en el área de almacenamiento de 16 bytes direccionables por bits (dirección de bytes 20H ~ 2FH) de la RAM en el chip.

(3) Área IDATA. Esta área utiliza registros como punteros para realizar direccionamiento indirecto de la RAM en el chip y, a menudo, se utiliza para almacenar variables utilizadas con frecuencia. En comparación con el direccionamiento de memoria externa, su ciclo de ejecución de instrucciones y la longitud del código son relativamente cortos.
El identificador del tipo de almacenamiento en la declaración del área IDATA es idata, que se refiere al área de almacenamiento de 256 bytes de la RAM en el chip y solo puede abordarse indirectamente, más lento que el direccionamiento directo.

(4) El área PDATA y el área XDATA están ubicadas en el área de almacenamiento fuera del chip. Los identificadores de tipo de almacenamiento en la declaración del área PDATA y el área XDATA son pdata y xdata respectivamente. .
El área PDATA tiene solo 256 bytes y solo se especifican 256 bytes de área de almacenamiento de datos externos.

Sin embargo, el área XDATA puede tener hasta 64 KB y el identificador de tipo de almacenamiento xdata correspondiente puede especificar cualquier dirección dentro de los 64 KB del área de datos externos.

Direccionar el área PDATA es más rápido que direccionar el área XDATA, porque direccionar el área PDATA solo requiere cargar una dirección de 8 bits, mientras que direccionar el área XDATA una dirección de 16 bits debe cargarse, así que intente almacenar datos externos en el área PDATA.

Dado que la memoria de datos externa y el puerto externo 1/0 tienen direcciones uniformes, el segmento de dirección de la memoria de datos externa no solo contiene la dirección de la memoria de datos, sino que también contiene la dirección del puerto externo 1/0.

(5) CÓDIGO del área de almacenamiento del programa. El identificador declarado por CODE en el área de almacenamiento del programa es código y los datos almacenados no se pueden cambiar. En el compilador C51, el código identificador del tipo de área de almacenamiento se puede utilizar para acceder a la declaración del área de almacenamiento del programa. Los ejemplos son los siguientes:

Acceder a la RAM en el chip mediante un microcontrolador es relativamente más rápido que acceder a la RAM fuera del chip, por lo que las variables utilizadas con frecuencia deben colocarse en la RAM en el chip tanto como sea posible. Es decir, se utiliza el tipo de almacenamiento data, bdata o idata, y aquellas variables con mayor capacidad o de uso menos frecuente se colocan en RAM off-chip, es decir, se utiliza el tipo de almacenamiento pdata o xdata. Las constantes solo pueden utilizar tipo de almacenamiento de código.

Ejemplos de aplicación:

4.Modo de almacenamiento de datos

Si omite el identificador del tipo de almacenamiento al definir una variable, el compilador automáticamente establecerá de forma predeterminada Tipo de almacenamiento

está aún más limitado por las instrucciones del modo de almacenamiento PEQUEÑO, COMPACTO y GRANDE. Por ejemplo, si se declara char var1, entonces en modo de almacenamiento PEQUEÑO, var1 se ubica en el área de almacenamiento de datos; en modo COMPACTO, var1 se ubica en el área de almacenamiento de idata; en modo GRANDE, var1 se ubica en el área de almacenamiento de xdata.
El modo de almacenamiento se explicará con más detalle a continuación.
(1) Modo PEQUEÑO. En este modo, todas las variables se ubican en la memoria de datos dentro del microcontrolador 8051 de forma predeterminada, de la misma manera que se usan datos para especificar el tipo de memoria. En este modo, el acceso a variables es eficiente, pero todos los objetos y pilas de datos deben utilizar RAM interna.


(2) Modo COMPACTO
En este modo, todas las variables están predeterminadas en 1 página (256 bytes) de memoria de datos externa, que es lo mismo que usar pdata para especificar la memoria. tipo. Este tipo es adecuado para variables que no excedan los 256 bytes, este límite está determinado por el modo de direccionamiento, que equivale a utilizar el puntero de datos @Ri para el direccionamiento. En comparación con el modo PEQUEÑO, este modo de almacenamiento es menos eficiente y accede a las variables de forma más lenta pero más rápida que el modo GRANDE.


(3) Modo GRANDE
En este modo, todas las variables se ubican en la memoria de datos externa de forma predeterminada. Es equivalente a usar el direccionamiento @DPTR para acceder a la memoria de datos externa a través de el puntero de datos, que es menos eficiente. Especialmente cuando la variable es de 2 bytes o más, este modo genera más código que PEQUEÑO y COMPACTO.

2. Registros de funciones especiales y sus definiciones de variables de bits.

1. Definición C51 de registro de función especial

Consulte directamente el encabezado proporcionado por el compilador. El lenguaje C51 permite el acceso al registro de función especial (SFR) mediante el uso de las palabras clave sfr, sbit o. El registro de función especial se distribuye en los 128 bytes superiores del RAM en chip, a> solo puede usar el modo de direccionamiento directo.

(1) Utilice palabras clave para definir sfr. Para acceder directamente al registro de función especial SFR, C51 proporciona un método de definición, que consiste en introducir la palabra clave sfr, y la sintaxis es la siguiente:

En 8051,Para acceder al SFR de 16 bits, utilice la palabra clave sfr16. La dirección de bytes bajos del SFR de 16 bits debe usarse como dirección de definición de "sfr16", por ejemplo:

(2) Acceda a SFR a través del archivo de encabezado. El número y tipo de registros de funciones especiales de varios derivados de los microcontroladores 8051 a veces son diferentes, y su acceso se puede realizar a través del acceso al archivo de encabezado
Es conveniente para que los usuarios los manejen.C51 define los registros de funciones especiales comúnmente utilizados por el microcontrolador 8051 (o 8052) y los bits direccionables en ellos, y los coloca en un archivo de encabezado de reg51.h (o reg52.h).
Cuando el usuario quiera usarlo, solo necesita usar un comando de preprocesamiento include<reg51.h> para incluir este archivo de encabezado en el programa antes de usarlo, y luego el nombre del registro de función especial y se puede utilizar el contenido disponible en él Nombre del bit direccionado. Los usuarios pueden agregar o eliminar archivos de encabezado.

(3) Definición de bit en registro de función especial. Para acceder a los bits direccionables en SFR, se deben utilizar palabras clave para definir los bits direccionables. Hay 3 métodos en total:

2. Definición C51 de variables de bits

Dado que 8051 puede operar con bits, el tipo de datos extendido "bit" C51 se utiliza para definir variables de bits, que es diferente del estándar C.

Al definir una variable de bits, se permite definir el tipo de almacenamiento. Las variables de bits se colocan en un segmento de bits. Este segmento siempre se encuentra en la RAM del chip del 8051. < a i=1> Por lo tanto, su tipo de almacenamiento está limitado a DATOS o IDATA. Si la variable de bit se define como otros tipos, provocará un error de compilación.

3. Acceso absoluto a la dirección en idioma C51.

Cómo acceder a la RAM en el chip 8051, la RAM fuera del chip y el espacio 1/0, C51 proporciona dos métodos comúnmente utilizados para acceder a direcciones absolutas

1. Macro absoluta

El compilador proporciona un conjunto de definiciones de macros para el direccionamiento absoluto de espacios de código, datos, pdata y xdata.
Utilice “#include<absacc.h>” en el programa para acceder a la macro declarada en absacc.h Absoluta direcciones, incluidas CBYTE, CWORD, DBYTE, DWORD, XBYTE, XWORD, PBYTE y PWORD, consulte el archivo de encabezado absacc.h para conocer su uso específico. Entre ellos:

2._en_palabra clave

Entre ellos, el tipo de memoria es un tipo de datos que C51 puede reconocer y el tipo de datos es un tipo de datos admitido por C51;Constantes de dirección se utilizan para especificar variables. La dirección absoluta debe estar dentro de un espacio de memoria válido;Las variables definidas usando _at_ deben ser variables globales

Supongo que te gusta

Origin blog.csdn.net/weixin_69884785/article/details/134620868
Recomendado
Clasificación