La Red de Conocimientos Pedagógicos - Currículum vitae - papel de red rlc

papel de red rlc

Varios problemas en el diseño de aplicaciones en lenguaje C51

¿Elegir? ¿Lo quieres? ¿Introducción a Franklin? Se analizan en detalle las características del compilador cruzado C51, las habilidades básicas de programación en lenguaje C51, su programación mixta con programas en lenguaje ensamblador, el manejo de interrupciones y otras cuestiones prácticas, y se brindan los procedimientos de procesamiento correspondientes.

¿Palabras clave? Interrupción del módulo de diseño estructurado en lenguaje ensamblador del compilador FranklinC51

-

El lenguaje ensamblador es una herramienta de software comúnmente utilizada al desarrollar sistemas de aplicaciones de microcontroladores. El hardware se puede operar directamente y la velocidad de ejecución de las instrucciones es rápida. Sin embargo, el formato inherente de su sistema de instrucciones está muy restringido por la estructura del hardware, lo que dificulta la escritura y la depuración, y su portabilidad también es deficiente. Con la mejora del rendimiento del hardware del microcontrolador, su velocidad de trabajo es cada vez más rápida. Por lo tanto, al escribir programas del sistema de aplicación del microcontrolador, se presta más atención a la eficiencia de programación del programa en sí. ¿Dónde está Franklin? El compilador cruzado C51 es un compilador eficiente en lenguaje C especialmente diseñado para la serie de microcontroladores 80C51. Su uso puede acortar el ciclo de desarrollo y reducir los costos de desarrollo. Además, el sistema desarrollado es fácil de mantener, tiene alta confiabilidad y buena portabilidad. Incluso en términos de eficiencia en el uso del código, es completamente comparable al lenguaje ensamblador, por lo que se ha convertido en una herramienta popular para desarrollar microcontroladores de la serie 80C51.

1? Habilidades básicas de programación en lenguaje C51

El lenguaje C es un lenguaje de programación de alto nivel que proporciona una estructura de control de procesos estandarizada muy completa. Por lo tanto, cuando utilice el lenguaje C51 para diseñar el programa del sistema de aplicación del microcontrolador, primero debe utilizar métodos de programación estructurados tanto como sea posible, para que toda la estructura del programa del sistema de aplicación pueda ser clara y fácil de depurar y mantener. Para un programa más grande, todo el programa se puede dividir en varios módulos según las funciones, y diferentes módulos completan diferentes funciones. Para diferentes módulos funcionales, los parámetros de entrada y los parámetros de salida correspondientes se especifican respectivamente, y algunos programas de uso frecuente se pueden compilar mejor en funciones, lo que no causará confusión en toda la gestión del programa, pero también mejorará la legibilidad y portabilidad.

En el proceso de programación, aproveche al máximo los comandos de preprocesamiento del lenguaje C51. Para algunas constantes de uso común, como VERDADERO, FALSO, PI y varios registros de funciones especiales, o algunas constantes importantes en el programa que se pueden cambiar de acuerdo con condiciones externas, puede usar la definición de macro "# #define" o colocarlas en un archivo de encabezado Defínalos juntos y luego agréguelos al programa usando el comando de inclusión de archivos "# #include". De esta forma, cuando es necesario modificar un parámetro, solo es necesario modificar el archivo de inclusión o la definición de macro correspondiente, sin modificar cada archivo de programa que los utiliza, lo que favorece el mantenimiento y actualización de los archivos. A continuación se muestran algunos ejemplos:

¿Ejemplo 1? Para diferentes osciladores de cristal monolítico, el programa adopta diferentes tiempos de retardo, y la duración del tiempo de retardo se puede modificar según los cambios en las condiciones externas. Para un programa de este tipo, se pueden utilizar definiciones de macros y compilaciones condicionales para implementarlo. El proceso es el siguiente:

#Definición? ¿bandera? 1?

#ifdef? bandera==1?

¿#definefosc6M?

Retraso = 10;?

#elif? ¿bandera? =?=?0?

#Definición? fosc8M?

Retraso = 12;?

¿#Otros?

¿#definefosc? ¿12M?

retraso = 20;?

#endif?

principal()?

{?

for(I = 0;i<delay;i++);?

}?

De esta manera, el programa fuente se puede aplicar a sistemas de microcontroladores con diferentes frecuencias de reloj sin ninguna modificación, y se pueden tomar diferentes valores de retardo según diferentes situaciones. para realizar diferentes tareas.

2? Programación mixta de lenguaje C51 y programa en lenguaje ensamblador

El compilador C51 puede compilar eficientemente programas fuente en lenguaje C y generar código eficiente y conciso. En la mayoría de los casos, programar en lenguaje C puede lograr el propósito deseado. Pero a veces, para programar de forma intuitiva o manejar algunas direcciones especiales, es necesario utilizar algún tipo de lenguaje ensamblador para programar. En otras ocasiones, el lenguaje ensamblador también puede llamar al lenguaje C para determinados fines. En esta programación híbrida, la clave es el paso de parámetros y el valor de retorno de la función.

Deben tener un protocolo completo, de lo contrario el intercambio de datos puede ser incorrecto. Tomemos como ejemplo el convertidor A/D serie de 10 bits TLC1549 de Liyuan Company. Dé un ejemplo para ilustrar la llamada de un programa en lenguaje C y un programa en lenguaje ensamblador. ?

¿Figura 1? Diagrama de pines de TLC1549

El diagrama de pines y el diagrama de sincronización de 1549 se muestran en la Figura 1 y la Figura 2 respectivamente. OUT está conectado a P1.0, P1.1 y CLOCK está conectado a P1.2.

Consulte la información relevante para las funciones específicas de 1549.

¿Imagen 2? Diagrama de tiempos TLC1549

¿Ejemplo 2? Llamada al programa en lenguaje C y al programa en lenguaje ensamblador, la subrutina es la siguiente:

¿Público? ¿ANUNCIO? ; ¿Dirección de entrada?

¿SEG_AD? ¿Rango? Código; clip de programa?

¿RSEG? ¿SEG_AD?

¿Usar? 0?

Anuncio:MOV? ¿R6, número 00?

¿MOV? R7, #00?

¿SETB? ¿P1.1?

¿Llamar? ¿Demora?

¿CLR? ¿P1.1?

¿Llamar? ¿Demora?

¿MOV? R0, #10?

RR0:? ¿SETB? ¿P1.2?

¿NO?

¿CLR? ¿P1.2?

¿DJNZ? ¿R0, RR0?

¿Llamar? ¿Demora?

¿MOV? 30H, R6? ; ¿La conversión A/D es alta?

;¿Dos guardados en R6?

¿Llamar? ¿CIR?

¿MOV? ¿R6, 30H?

¿SETB? ¿P1.2?

¿NO?

¿CLR? ¿P1.2?

¿MOV? 30H, R6?

¿Llamar? ¿CIR?

¿MOV? ¿R6, 30H?

¿MOV? R0, #8? ;¿Conversión A/D baja?

;¿8 bits almacenados en R7?

RR2:? ¿SETB? ¿P1.2?

¿NO?

¿CLR? ¿P1.2?

¿MOV? 30H, R7?

¿Llamar? ¿CIR?

¿MOV? ¿R7, 30H?

¿DJNZ? ¿R0, RR2?

¿RET?

CIR:? ¿CLR? ¿do?

¿MOV? c,P1.0?

¿MOV? ¿30H?

¿RLC? ¿respuesta?

¿MOV? 30H,A?

¿RET?

¿Fin?

En el programa anterior, el valor de retorno de la función es un entero sin signo. De acuerdo con las reglas de llamada, el orden superior del valor de retorno debe estar en R6 y el orden inferior debe estar en R7, para garantizar que la transmisión de datos esté libre de errores. Además, durante el proceso de llamada, asegúrese de prestar atención a la pila de registros. De esta manera, cuando utilice la conversión A/D en el futuro, podrá utilizar el lenguaje C para llamar a la subrutina AD () en lenguaje ensamblador.

3?Proceso de procesamiento de interrupciones C51

El compilador C51 admite el desarrollo directo de programas de interrupción en programas fuente C, lo que reduce el tedioso trabajo de usar lenguaje ensamblador y mejora la eficiencia del desarrollo. La sintaxis completa de la función del servicio de interrupción es la siguiente:

Nombre de función nula (void) [modo]

[Reentrada]]¿Interrumpir? ¿norte? 【¿usar? r]

Donde n (0 ~ 31) representa el número de interrupciones. El compilador C51 permite 32 interrupciones, y el chip de la serie 80C51 determina qué interrupción se utiliza. R (0 ~ 3) representa el grupo r de registros. Al llamar a una función de interrupción, la función llamada por el programa de interrupción debe utilizar el mismo grupo de registros. La "reentrada" se utiliza para indicar si el controlador de interrupciones tiene capacidad de "reentrada". El compilador C51 y sus extensiones al lenguaje C permiten al programador controlar todos los aspectos de las interrupciones y utilizar bancos de registros. Este soporte permite a los programadores crear rutinas de servicio de interrupción eficientes. Los usuarios solo deben preocuparse por las interrupciones en lenguaje C y las operaciones necesarias de cambio de banco de registros.

¿Ejemplo 3? Configure el fosc del microcontrolador a 12 MHz, requiera la programación 1 en forma de T0 y genere una onda cuadrada con un período de 2 ms en el pin P1.0.

La rutina del servicio de interrupción escrita en lenguaje C es la siguiente:

#Contiene? <reg 51.h>?

¿un poquito? p1_0=p1^0;?

¿Anulado? ¿Interrupción del temporizador 0 (no válida)? 1?Uso? 1?{?

/*Entrada de rutina de servicio de interrupción T0*/?

P1_0=! p 1_0;?

TH0 =-(1000/256); /*Recargar el valor de conteo inicial*/?

TL0 =-(1000% 256);?

}?

¿Anulado? principal (vacío)?

{?

TMOD = 0x 01;? /*T0 funciona en modo temporizador 1*/?

p 1_0=0;?

TH0 =-(1000/256);? /*Valor de recuento inicial predeterminado*/?

TL0 =-(1000% 256);?

EA = 1; /*CPU en la interrupción */?

ET0=1;? /*T0 abre la interrupción*/?

TR0 = 1;? /*Iniciar T0*/?

hacer { } mientras(1);?

}?

Al escribir una rutina de servicio de interrupción, debe tener cuidado de no pasar parámetros ni valores de retorno.

4? Conclusión

El compilador C51 no solo puede acortar el ciclo de desarrollo del sistema de control del microcontrolador, sino que también es fácil de depurar y mantener. Además, el lenguaje C51 tiene muchas funciones poderosas, como proporcionar una gran cantidad de funciones de biblioteca para que los usuarios las llamen directamente y completar instrucciones de control de compilación para proporcionar la información de símbolos necesaria para la depuración del programa. En resumen, el lenguaje C51 es una herramienta poderosa para la mayoría de los desarrolladores de microcontroladores.