¿Qué son los chips dvb-s? ¿Cuáles son sus ventajas y desventajas?
VISHAY Intertechnology ha ampliado su gama de productos optoelectrónicos con el lanzamiento de un nuevo dispositivo que integra un receptor de control remoto con un transceptor IrDA en un único paquete de montaje en superficie de 3 lentes dirigido a las necesidades del mercado de PC.
Cuando se instala en una computadora portátil o multimedia, el nuevo TFDU7100 puede realizar múltiples funciones, incluido el control remoto de la reproducción de video o música y el intercambio inalámbrico de imágenes, MP3 y otros formatos de archivos. Al combinar todas estas características en un solo paquete, el TFDU7100 permite a los diseñadores de racks de PC limitar la cantidad de ventanas de filtrado de luz natural, evitando así el equilibrio entre el control remoto y la funcionalidad IrDA.
El paquete de 8 pines del TFDU7100 integra dos fotodiodos PIN de alta velocidad, un emisor de infrarrojos, un IC de control IrDA y un IC de control remoto. Para controles remotos, el TFDU7100 puede recibir señales con frecuencias portadoras entre 20kHz y 60kHz a una distancia mínima de 5 metros, cumpliendo así con la especificación Media Center de Microsoft®. En el rango de frecuencia de 36kHz a 38kHz, su distancia máxima de recepción es de 18 metros. Para comunicaciones IrDA, el TFDU7100 admite todas las velocidades de datos IrDA de hasta 4 Mbit/s a una distancia de seguridad de 1 metro.
Para simplificar la transición al TFDU7100, el tamaño del paquete y el espacio entre pads son los mismos que los de los transceptores Vishay de 4 Mbit/s utilizados en las computadoras portátiles habilitadas para IrDA en los años 80. El dispositivo ofrece mayor flexibilidad y se puede montar con la orientación de la lente en el lateral o en la parte superior. El voltaje de funcionamiento del transceptor IrDA y RC TFU7100 oscila entre 2,7 V y 5,5 V, y el rango de temperatura oscila entre -25 ℃ y 85 ℃. El dispositivo no contiene plomo (Pb), se puede procesar sin plomo y cumple con RoHS 2002/95/EC y WEEE 2002/96/EC.
2006-9-7
Depuración del puerto serie de 89s52 [original]
#includelt; ; tipo de datos.hgt;
void main()
{
INT8U a, b;
bit abit;
a=5;
b=13;
SCON=0;
IE=0; )
{////////////////////////////////////////// /// ///////
TI=0; /////////////Punto de comentario
/////// /// ////////////////////////////////////////
SBUF=a;
p>hacer{
abit=TI;
}mientras(abit==1);
TI =0;
SBUF=b;
hacer{
abit=TI;
}mientras(abit==1);
/ ///////////////////////////////////////////
TI= 0;//////////Nota 2;
/}///////////////// ////
} El punto de comentario en este programa debe tener //TI=0; entonces la función while(1) solo se ejecutará una vez, aunque cuando SCON=0, TI ya es 0. , ¿por qué se debe escribir nuevamente en el cuerpo del bucle TI=0 una vez, pero también TI=0 al final? Misterioso.
Lo mismo ocurre con el comentario 2. Si //TI=0, es lo mismo que el comentario 1, y la función while (1) solo se ejecuta una vez.
liuph publicado en gt; 2006-9-7 14:35:09 [Texto completo] [Comentarios] [Citas] [Recomendaciones] [Archivos] [Enviar a amigos] [Recoger en favoritos] p>
p>
2006-9-1
Experiencia de depuración [original]
No importa cuál sea la última oración en Keil c, después de compilarla y pasado a 89s52, siempre se ejecutará la última oración. Por lo tanto, es mejor agregar un tiempo (1); no afectará a otros programas.
La instrucción while(P1^1amp; 0x01) modificará el valor de P1^1. Es mejor establecer un bit a; dejar que a=P1^1amp; , que es más seguro.
En el compilador de Keil C, agregar un punto y coma después del } de la declaración while no informa un error. Esto es inimaginable en VC, pero aparecerá en Keil C, pero no está claro si es así. afectará el programa.
liuph publicado en gt; 2006-9-1 14:12:21 [Texto completo] [Comentarios] [Citas] [Recomendaciones] [Archivos] [Recomendar a amigos] [Recoger en favoritos] p>
p>
2006-8-22
Keil C51 vs Standard C [Original]
La comprensión profunda y la aplicación de las extensiones C51 al estándar ANSIC son una de las claves para aprender C51. Porque la mayoría de las funciones extendidas están dirigidas directamente al hardware de la CPU de la serie 8051.
Existen aproximadamente las siguientes 8 categorías:
tipo de almacenamiento 8051 y área de almacenamiento, modo de almacenamiento, declaración de tipo de memoria, declaración de tipo de variable, variable de bit y direccionamiento de bit, registro de función especial (SFR), puntero C51
p >l Atributos de función
Los detalles son los siguientes (8031 es la CPU predeterminada).
Sección 1 Palabras clave extendidas de Keil C51
La versión C51 V4.0 tiene las siguientes palabras clave extendidas (***19):
_at_ idata sfr16 alien interrupción pequeño
bdata grande _task_ Código bit pdata
usando xdata reentrante compact sbit data sfr
Sección 2 Áreas de memoria:
1. Área:
Descrito por código, puede haber hasta 64 kBytes de memoria de programa
2. Memoria de datos interna:
Memoria de datos interna Las siguientes palabras clave pueden ser se utiliza para describir:
datos: área de direccionamiento directo, que son los 128 bytes inferiores de la RAM interna 00H~7FH
idata: área de direccionamiento indirecto, incluida toda el área de RAM interna 00H~ FFH
bdata: área direccionable de bits, 20H~2FH
3. Memoria de datos externa
La RAM externa se puede identificar mediante las siguientes palabras clave según el uso: xdata : puede especificar hasta 64 KB de área de direccionamiento directo externo, rango de direcciones 0000H ~ 0FFFFH
pdata: puede acceder a 1 página (25bBytes) de RAM externa, utilizada principalmente en modo compacto (modelo compacto).
4. Memoria de registro de función especial
8051 proporciona un área de direccionamiento SFR de 128 bytes. Esta área puede ser direccionable por bits, por bytes o por palabras para controlar el temporizador, el contador y el puerto serie. , E/S y otros componentes, que pueden describirse mediante las siguientes palabras clave:
sfr: direccionamiento de bytes, como sfr P0=0x80 la dirección del puerto PO es 80H, después de "=" Una constante entre H y FFH.
sfr16: direccionamiento de palabras, como sfr16 T2=0xcc; especifique la dirección del puerto del Timer2 T2L=0xcc T2H=0xCD
sbit: direccionamiento de bits, como sbit EA=0xAF; el primero El bit 0xAF es EA, lo que significa que la interrupción está habilitada
También se puede definir de la siguiente manera:
sbit 0V=PSW^2 (defina 0V como el segundo bit de PSW)
sbit 0V=0XDO^2; (igual que arriba)
o bit 0V-=0xD2 (igual que arriba).
Sección 3 Modo de almacenamiento
El modo de almacenamiento determina el área de almacenamiento predeterminada para variables, parámetros de funciones, etc. que no tienen un tipo de almacenamiento claramente especificado. Hay tres tipos:
1. Modo pequeño
Todos los parámetros variables predeterminados se cargan en la RAM interna. La ventaja es el acceso rápido, pero la desventaja es el espacio limitado y solo es adecuado para programas pequeños.
2. Modo compacto
Todas las variables predeterminadas se encuentran en una página (256 Bytes) del área de RAM externa. La página específica se puede especificar mediante el puerto P2, que se explica en. El archivo STARTUP.A51 también se puede especificar con pdata. La ventaja es que el espacio es más amplio que el pequeño, la velocidad es más lenta que la pequeña y más rápida que la grande.
3. modo grande
Todas las variables predeterminadas se pueden colocar en un área de RAM externa de hasta 64 KB. La ventaja es que tiene un gran espacio y puede almacenar muchas variables. pero la desventaja es que es más lento.
Consejo: El modo de almacenamiento se selecciona en las opciones del compilador C51.
Sección 4 Declaración del tipo de almacenamiento
El tipo de almacenamiento de una variable o parámetro se puede especificar mediante el modo de almacenamiento como tipo predeterminado o mediante la declaración directa de palabras clave. Cada tipo se describe con: código, datos, idata, xdata, pdata, por ejemplo:
data uar1
char code array[ ]="hello!";
unsigned char xdata arr[10][4][4];
Sección 5 Variables o tipos de datos
C51 proporciona los siguientes tipos de datos extendidos:
el valor de la variable de bit bit es 0 o 1
variable de bit sbit definida a partir del byte 0 o 1
sfr sfr dirección de byte 0~255
sfr16 palabra sfr dirección 0~65535
Otros tipos de datos como: char, enum, short, int, long, float, etc. son los mismos que ANSI C.
Sección 6 Variables y declaraciones de bits
1. Variables de tipo bit
Las variables de tipo bit se pueden utilizar para tipos de variables, declaraciones de funciones, valores de retorno de funciones, etc. ., almacenamiento en RAM interna20H~2FH.
Nota:
(1) Las funciones especificadas con #pragma dISAble y las funciones especificadas con "usign" no pueden devolver valores de bits.
(2) Una variable de bits no se puede declarar como un puntero, como bit *ptr, es incorrecta.
(3) No puede haber una matriz de bits como: bit arr; [5]; incorrecto.
2. Descripción del área direccionable de bits 20H-2FH
Se puede definir de la siguiente manera:
int bdata i
char bdata arr; [3],
Entonces:
sbit bito=in0; sbit bit15=I^15
sbit arr07=arr[0]^7; arr15=arr[i]^7;
Sección 7 Puntero Keil C51
C51 admite puntero general (puntero genérico) y puntero de memoria (puntero específico de memoria).
1. Punteros generales
La declaración y el uso de punteros generales son los mismos que en C estándar, pero también se puede especificar el tipo de almacenamiento del puntero, por ejemplo:
largo * estado; un puntero a un número entero largo, y el estado en sí se almacena de acuerdo con el modo de almacenamiento.
char * xdata ptr; ptr es un puntero a datos char, y ptr en sí se coloca en el área de RAM externa. Los datos señalados por los punteros long, char y otros se pueden almacenar en cualquier memoria. .
Generalmente, el puntero en sí se almacena en 3 bytes, que son tipo de memoria, desplazamiento alto y desplazamiento bajo. 2. Puntero de memoria
El tipo de almacenamiento se especifica al describir el puntero de memoria, por ejemplo:
char data * str str apunta a datos de tipo char en el área de datos
int xdata * pow; pow apunta a un entero de tipo int en la RAM externa.
Al almacenar este tipo de puntero, solo uno o 2 bytes son suficientes, porque solo se almacena el desplazamiento.
3. Conversión de puntero
Es decir, el puntero se convierte entre los dos tipos anteriores:
l Cuando un puntero basado en memoria se pasa como real. parámetro al objeto que necesita Cuando se usa como función de puntero, el puntero se convierte automáticamente.
l Si no especifica el prototipo de función externa, el puntero basado en memoria se convertirá automáticamente en un puntero general, lo que provocará un error. Por lo tanto, utilice "#include" para especificar todos los prototipos de función.
Puedo cambiar por la fuerza el tipo de puntero.
Sección 8 Función Keil C51
La declaración de función C51 extiende ANSI C, incluyendo específicamente:
1. Declaración de función de interrupción:
La. El método de declaración de interrupción es el siguiente:
void serial_ISR () interrupción 4 [usando 1]
{
/* ISR */
}
Para mejorar la tolerancia a fallas del código, genere declaraciones iret en las entradas de interrupción no utilizadas y defina interrupciones no utilizadas.
/* define la interrupción no utilizada, así que genera "IRET" en su entrada */
void extern0_ISR() interrupción 0{} /* no utilizada */
void timer0_ISR () interrupción 1{} /* no usado */
void extern1_ISR() interrupción 2{} /* no usado */
void timer1_ISR () interrupción 3 {} /* no utilizado */
void serial_ISR () interrupción 4{} /* no utilizado */
2. Espacio de trabajo de almacenamiento universal
3. Seleccione el espacio de trabajo de almacenamiento general declarado mediante x; consulte el ejemplo anterior.
4. Especifique el modo de almacenamiento
Descrito por pequeño, compacto y grande, por ejemplo:
void fun1(void) small { }
Consejo: Todas las variables internas de las funciones descritas por pequeños usan RAM interna. Así se pueden declarar lugares clave, que a menudo requieren mucho tiempo, para mejorar la velocidad de carrera.
5. #pragma disAble
Declarado antes de la función, solo es válido para una función. Esta función no se puede interrumpir durante la llamada.
6. Designación de función recursiva o reentrante
Las funciones que se pueden llamar tanto en el programa principal como en las interrupciones son propensas a tener problemas. Debido a que 51 es diferente de la PC, la PC usa la pila para pasar parámetros y las variables internas distintas de las variables estáticas están todas en la pila, mientras que 51 generalmente usa registros para pasar parámetros y las variables internas generalmente están en la RAM. ingresa, los datos de la última llamada serán destruidos. Se pueden utilizar los dos métodos siguientes para resolver la reentrada de funciones:
a. Utilice la declaración "#pragma dISAble" antes mencionada antes de la función correspondiente, es decir, solo uno de los programas principales o la interrupción puede hacerlo. llamar a la función;
b. Describir la función como reentrante. De la siguiente manera:
void func(param...) reentrant;
Después de compilar KeilC51, generará una pila de variables reentrantes y luego podrá simular el método de paso de variables. a través de la pila.
Dado que las funciones reentrantes generalmente son llamadas por el programa principal y las interrupciones, las interrupciones generalmente usan un grupo de registros R diferente al del programa principal.
Además, para funciones reentrantes, agregue el modificador "#pragma noaregs" delante de la función correspondiente para prohibir que el compilador use direccionamiento de registro absoluto y genere código que no dependa del grupo de registros.
7. Especificar función PL/M-51
Especificado por alienígena.
liuph publicado en gt; 2006-8-22 11:33:13 [Texto completo] [Comentarios] [Citas] [Recomendaciones] [Archivos] [Enviar a amigos] [Recoger en favoritos] p>
p>
2006-8-22
Especificación de programación de MCU C51 [Original]
1 Especificación de programación de MCU C51 - Prefacio
Para mejorar la calidad del programa fuente, esta especificación está escrita especialmente para mejorar la calidad y la capacidad de mantenimiento de los productos de software, mejorando así en última instancia la productividad de los productos de software.
2 Especificaciones de programación del Microcontrolador C51 - Alcance
Este estándar especifica las especificaciones que los programadores deben seguir al diseñar programas. Esta especificación es principalmente para el lenguaje de programación C51 y el compilador keil, incluida la composición tipográfica, comentarios, nombres, uso de variables, capacidad de prueba del código, eficiencia del programa, garantía de calidad, etc.
3 Especificaciones de programación del microcontrolador C51: principios generales
l Formato claro
l Comentarios concisos y concisos
l Fácil de entender convención de nomenclatura
l Modularización de funciones
l El programa es fácil de leer y mantener
l Implementación precisa de funciones
l Alto espacio de código y eficiencia de tiempo
l Escalabilidad moderada
4 Especificación de programación del microcontrolador C51: definición de tipo de datos
Al programar, se utilizan los siguientes nombres de tipos nuevos para definir tipos de datos .
Cree un archivo datatype.h y defina lo siguiente en el archivo:
typedef bit BOOL; // bit variable //
typedef unsigned char INT8U; // Variable entera de 8 bits sin signo //
typedef signed char INT8S; // Variable entera de 8 bits con signo //
typedef unsigned int INT16U // Ninguno con signo 16- variable entera de bit //
typedef signed int INT16S; // variable entera de 16 bits con signo //
typedef unsigned long INT32U // variable entera de 32 bits sin signo //
typedef signed long INT32S; // Variable entera de 32 bits con signo //
typedef float FP32; // Número de punto flotante de precisión simple (longitud de 32 bits) / /
typedef double FP64; // Número de punto flotante de doble precisión (longitud de 64 bits) //
5 Especificación de programación del microcontrolador C51: denominación de identificadores
5.1 Denominación básica principios
l La denominación debe ser clara y concisa, con un significado claro, utilizando palabras completas o abreviaturas convencionales. Por lo general, las palabras más cortas se abrevian eliminando las vocales; las palabras más largas se abrevian eliminando las primeras letras de la palabra. Es decir, "ver el nombre y conocer el significado".
l El estilo de denominación debe ser coherente en todo momento.
l Si se utilizan convenciones o abreviaturas especiales al nombrar, debe haber comentarios.
l Excepto para aplicaciones especiales como modificadores de compilación/archivos de encabezado, evite el uso de definiciones que comiencen y/o terminen con un guión bajo.
l El nombre del identificador de la parte de la interfaz entre módulos dentro del mismo producto de software está precedido por el identificador del módulo.
5.2 Nomenclatura de macros y constantes
Las macros y constantes se nombran con letras mayúsculas y las palabras se separan con guiones bajos. Utilice enumeraciones o macros significativas para reemplazar los números utilizados en el programa.
5.3 Nomenclatura de variables
Los nombres de las variables se nombran con letras minúsculas y la primera letra de cada palabra está en mayúscula. Las variables globales de prefijo de tipo (u8\s8, etc.) tienen el prefijo g_.
Las variables locales deben ser concisas y directas. Las variables de control del cuerpo del bucle local utilizan preferentemente i, j, k, etc.; las variables de longitud local utilizan preferentemente len, num, etc.; las variables intermedias temporales utilizan preferentemente temp, tmp, etc.
5.4 Nomenclatura de funciones
Los nombres de las funciones se nombran en letras minúsculas, la primera letra de cada palabra está en mayúscula y la identificación del módulo se agrega al principio.
5.5 Nomenclatura de archivos
Un archivo contiene un tipo de función o todas las funciones de un módulo. El nombre del archivo debe indicar claramente su función o naturaleza.
Cada archivo .c debe tener un archivo .h con el mismo nombre que un archivo de encabezado.
6 Especificaciones de programación del Microcontrolador C51 - Comentarios
6.1 Principios básicos de los comentarios
l Ayuda a leer y comprender el programa y explicar "qué" es el programa haciendo. Explicar el propósito, la funcionalidad y la metodología del código.
l Generalmente, la cantidad de comentarios efectivos en un programa fuente es aproximadamente del 30%.
l El lenguaje de las anotaciones debe ser preciso, comprensible y conciso.
l Comente mientras escribe código, modifique el código y modifique los comentarios correspondientes al mismo tiempo, y elimine los comentarios que ya no sean útiles.
6.2 Comentarios de archivo
Los comentarios de archivo deben describir el nombre del archivo, la función, el creador, la fecha de creación, la información de la versión y otra información relevante.
Al modificar el código del archivo, se debe registrar en los comentarios del archivo la fecha de la modificación, la persona que lo modificó y una breve explicación del propósito de la modificación. Todos los registros de modificación deben mantenerse intactos.
Los comentarios del archivo se colocan en la parte superior del archivo y se incluyen en el formato "/*...*/".
Cada línea de texto de comentario debe tener una sangría de 4 espacios; los nombres de los elementos de cada texto de comentario deben estar alineados.
/****************************************** *****************
Nombre del archivo:
Autor:
Versión:
Descripción:
Registro de modificación:
****************************** ******* *******************************/
6.3 Comentarios de función p>
6.3.1 Comentarios del encabezado de función
Los comentarios del encabezado de función deben incluir el nombre de la función, la función de la función, los parámetros de entrada, los parámetros de salida, etc. Si es necesario, también puedes agregar autor, fecha de creación, registro de modificación (notas) y otros elementos relacionados.
Los comentarios del encabezado de función se colocan en la parte superior de cada función y se incluyen en el formato "/*...*/". El nombre de la función debe abreviarse como FunctionName () y no se debe agregar información como parámetros de exportación y parámetros de exportación.
/****************************************** *******************
Nombre de la función:
Función de la función:
Parámetros de entrada:
Parámetros de exportación:
Observaciones:
*************************** *** **********************************/
6.3.2 Comentarios de código
Los comentarios del código deben estar inmediatamente adyacentes al código comentado, colocados arriba o a la derecha, no debajo. Si se coloca arriba, debe estar separado del código que se encuentra encima por una línea en blanco.
Generalmente, se debe agregar una pequeña cantidad de comentarios al final de la línea de la declaración comentada, y varios comentarios dentro de una función se deben agregar a la izquierda. Se deben agregar más comentarios arriba y la línea de comentarios debe quedar alineada a la izquierda con la declaración comentada; .
Los comentarios del código de función utilizan el formato "//...//".
Generalmente, las declaraciones de rama (ramas condicionales, declaraciones de bucle, etc.) deben estar comentadas. La marca "fin de..." que indica el final del bloque de programa debe agregarse a la derecha de la línea final "}" del bloque de programa, especialmente cuando hay anidamiento múltiple.
6.4 Comentarios sobre variables, constantes y macros
Los identificadores del mismo tipo deben definirse centralmente y su validez debe comentarse uniformemente en la línea anterior a la definición. Los comentarios para identificadores individuales se agregan al final de la línea de la declaración de definición.
Las variables globales deben tener comentarios detallados, incluyendo sus funciones, rangos de valores, qué funciones o procedimientos acceden a ellas y precauciones al acceder a ellas.
Los comentarios tienen el formato "//…//".
7 Especificación de Programación del Microcontrolador C51 - Función
7.1 Principios de Diseño
Requisitos básicos para las funciones:
l Corrección: el programa debe ser Funciones requeridas de diseño implementadas.
l Estabilidad y seguridad: El programa se ejecuta de manera estable, confiable y segura.
l Capacidad de prueba: el programa es fácil de probar y evaluar.
l Estándares/legibilidad: el estilo de redacción del programa, las reglas de nomenclatura, etc. cumplen con los estándares.
l Extensibilidad: El código deja espacio e interfaces para la próxima actualización y expansión.
l Eficiencia global: La eficiencia general del sistema de software es alta.
l Eficiencia local: un determinado módulo/submódulo/función es inherentemente eficiente.
Principios básicos para programar funciones:
l El tamaño de una sola función debe limitarse a 200 líneas (excluyendo comentarios y líneas en blanco). Una función solo completa una función.
l El número de variables locales de una función generalmente no excede de 5 a 10.
l Hay una línea en blanco entre el área de definición de la variable local y el área de implementación de la función (incluida la inicialización de la variable) dentro de la función.
l El nombre de la función debe describir con precisión la función de la función. Es común utilizar una frase verbo-objeto para nombrar una función que realiza una operación.
l El valor de retorno de la función debe ser claro, especialmente el significado del valor de retorno del error debe ser preciso.
l No utilice el método de conversión predeterminado del sistema de compilación ni el método de conversión forzada para devolver variables de diferentes tipos del valor de retorno de la función como valor de retorno.
l Reducir las llamadas recursivas dentro de la propia función o entre funciones.
l Intente no utilizar parámetros de función como variables de trabajo.
7.2 Definición de función
l Si una función no tiene parámetros de entrada ni de salida, debe declararse explícitamente como nula.
l Debe haber uno y solo un espacio entre el nombre de la función y la definición del tipo de parámetro de exportación.
l No hay espacios entre el nombre de la función y los corchetes ().
l Los parámetros de función deben recibir definiciones de tipo claras.
l Para funciones con múltiples parámetros formales, se agrega un espacio entre el separador de coma del parámetro formal posterior y el parámetro formal anterior.
l Las llaves "{}" antes y después del cuerpo de la función ocupan cada una su propia línea.
7.3 Definición de variable local
l No defina demasiadas variables en la misma línea.
l Las variables del mismo tipo se definen en la misma línea, o en líneas adyacentes.
l Primero defina las variables de tipo de datos, luego defina las variables de tipo idtata y luego defina las variables de tipo xdata.
l Las definiciones de tipos complejos como matrices y punteros se colocan al final de el área de definición.
l No hay asignación de variables más compleja en el área de definición de variables.
7.4 Especificaciones del área de implementación de funciones
l Escriba solo una declaración por línea.
l Preste atención a la precedencia de los operadores y utilice paréntesis para aclarar el orden de operación de las expresiones para evitar el uso de la precedencia predeterminada.
l Utilice una línea en blanco para separar cada segmento del programa y agregue los comentarios necesarios.
Un segmento de programa se refiere a una o más líneas de código que pueden completar una función más específica. Las líneas de código dentro de la sección del programa dependen en gran medida unas de otras.
l No utilice declaraciones difíciles de entender y muy técnicas.
l Los códigos estrechamente relacionados en el programa fuente deben ser lo más adyacentes posible.
l Una o varias declaraciones que realizan funciones simples y están muy relacionadas pueden escribirse como una función o definirse como una macro.
8 Especificaciones de programación del microcontrolador C51: composición tipográfica
8.1 Sangría
Cada nivel de código tiene una sangría de 4 espacios a la derecha.
8.2 Ramas de línea
Las declaraciones excesivamente largas (más de 80 caracteres) deben dividirse en varias líneas; las expresiones largas deben dividirse en nuevas líneas en operadores de baja prioridad, y los operadores deben dividirse en nuevas líneas. se colocará al comienzo de la nueva línea, la nueva línea debe tener la sangría adecuada para que el diseño sea ordenado y la declaración sea legible. Evite insertar comentarios en ramales.
8.3 Líneas en blanco
l Debe haber una y sólo una línea en blanco en el área de comentarios del archivo, el área de referencia del archivo de encabezado y la función.
l Debe haber exactamente una línea en blanco entre funciones adyacentes.
l Los bloques de programa relativamente independientes dentro de un cuerpo de función se pueden separar mediante una línea en blanco o un comentario.
l No debe haber líneas en blanco entre los comentarios de la función y el cuerpo de la función correspondiente.
l Hay exactamente una línea en blanco al final del archivo.
8.4 Espacios
l No puede haber espacios al final de las declaraciones de función o después de los comentarios.
l No hay espacios dentro de los corchetes (es decir, después del corchete izquierdo y antes del corchete derecho), y no hay espacios entre varios corchetes.
l Debe haber exactamente un espacio entre los parámetros de la función (un espacio después de la coma del parámetro formal).
l Debe haber exactamente un espacio entre múltiples variables definidas en la misma línea (un espacio después de la coma de la variable).
l En una expresión, si hay varios operadores concatenados, deben estar separados por espacios:
Equivalente entre dos o más palabras clave, variables y constantes Al operar, agregue un espacio antes y después del operador entre ellos; cuando dos o más palabras clave, variables y constantes realizan operaciones no equivalentes, no debe haber espacios antes y después de ellas;
Comas solo agrega un espacio después;
p>
Operadores binarios, como operadores de comparación, operadores de asignación "=", " =", operadores aritméticos " ", "", operadores lógicos "amp; amp; ", "amp;", operadores bit a bit "lt; lt;", "^", etc., agregue un espacio antes y después;
Operadores unarios, como "!", "~", " ", "-", "amp;" ( operador de dirección), etc., sin espacios antes y después;
"-gt;", "." sin espacios antes y después;
Agregue un espacio entre palabras clave como if , for, while, y switch y los siguientes corchetes;
8.5 Llaves
l declaraciones if, else if, else, for, while independientemente de si el cuerpo de ejecución es uno declaración o declaraciones múltiples, se deben agregar llaves, y las llaves izquierda y derecha ocupan cada una una línea exclusiva.
l En la estructura do{} while(), "do" y "{" ocupan cada uno una línea, y "}" y " while();"*** ocupan la misma línea.
si (hacer
{ {
} }mientras( ;
else
{
}
8.6 declaración de cambio
l Cada caso y sus criterios deben ocupar una línea
l Cada bloque de caso debe usar fin. . Excepto en casos especiales cuando es necesario ejecutar secuencialmente de un bloque de caso al siguiente, pero el motivo de esta operación debe comentarse claramente en el cruce para evitar errores.
l Bloques de programa de caso. Deje una línea vacía y solo una línea vacía.
l Mantenga las declaraciones de ejecución de cada bloque de casos con una sangría de 4 espacios.
l En circunstancias normales, se debe incluir la rama predeterminada.
Cambiar (
{
caso x:
romper;
caso x:
break;
predeterminado:
break;
}
9 Especificación de programación del microcontrolador C51: estructura del programa
9.1 Requisitos básicos
l Un archivo .c con una función main() debe colocar main() al frente y declarar explícitamente los parámetros y devolver valores con void
l Para un programa de módulo o un programa de monitoreo completo compuesto por múltiples archivos .c, establezca un archivo de encabezado de referencia público e incluya los archivos de encabezado de la biblioteca, los archivos de encabezado de definición de registros estándar, los archivos de encabezado personalizados, las variables globales, etc. referenciado. Incluido como referencia en cada archivo. Normalmente, los archivos de encabezado de biblioteca estándar usan un ángulo agudo lt; para marcar el nombre del archivo, y los archivos de encabezado personalizados usan un apóstrofo doble 〃〃 para marcar el nombre del archivo. p> l Cada archivo .c tiene un archivo .h correspondiente. Después del comentario del archivo .c, primero se define una macro de bandera de archivo única y la bandera se analiza en el archivo .h correspondiente
#define FILE_FLAG
En archivo .h:
#ifdef FILE_FLAG
#define XXX p >
#else
#define XXX extern
#endif
l Las definiciones que están determinadas a ser llamadas solo por un determinado archivo .c pueden enumerarse por separado en En un archivo de encabezado, llámelo por separado
9.2 Funciones reentrantes
Si se utilizan variables globales en funciones reentrantes, deben controlarse desactivando interrupciones, semáforos, etc. estar protegido.
9.3 Parámetros de función
l Es responsabilidad del llamador de la función verificar la legalidad de los parámetros formales.
l Trate de evitar el uso de formales. parámetros como trabajo.
9.4 Bucles
l Minimizar el número de niveles de anidamiento de bucles
l En bucles múltiples, el bucle más ocupado debe colocarse más interno. . Layer
l Minimiza la carga de trabajo en el cuerpo del bucle
l Intenta evitar declaraciones de juicio en el cuerpo del bucle
liuph publicado en gt 2006-8-. 22 11:26:48 [Texto completo] [Comentarios] [Citas] [Recomendaciones] [Archivos] [Recomendar a amigos] [Recoger en favoritos]
2006-8-22
Variables en C51 Varios métodos de asignación de espacio [original]
1. El área de datos tiene un espacio pequeño, por lo que solo se colocan en el área de datos las variables que se usan con frecuencia o que requieren una alta velocidad de computación, como por ejemplo. el recuento en un bucle for.
2. Lo mejor es colocar variables locales en el área de datos.
Debido a que el espacio de las variables locales se puede sobrescribir (el espacio de las variables locales de una función se libera al salir de la función y se sobrescribe con las variables locales de otras funciones), se puede mejorar la utilización de la memoria. Por supuesto, a excepción de las variables locales estáticas, su uso de memoria es el mismo que el de las variables globales;
3. Asegúrese de que no haya funciones no llamadas en su programa.
Cuando encuentra una función no llamada en Keil C, el compilador la considera como una función de interrupción. El espacio de las variables locales utilizadas en las funciones no se libera, es decir, se trata igual que las variables globales. Keil C hizo esto de manera muy estúpida, pero no pudo hacer nada al respecto.
4. Las variables de bandera lógica encontradas en el programa se pueden definir en bdata, lo que puede reducir en gran medida la huella de memoria.
En el chip de la serie 51, hay un área de direccionamiento de bits de 16 bytes bdata, en la que se pueden definir 8*16=128 variables lógicas.
El método de definición es: bdata bit LedState; pero el tipo de bit no se puede utilizar en matrices y estructuras.
5. Otras variables que no se utilizan con frecuencia y no requieren una alta velocidad de cálculo se colocan en el área xdata.
6. Si desea ahorrar espacio de datos, debe usar el modo grande y colocar todas las variables con ubicaciones de memoria indefinidas en el área xdata. Por supuesto, es mejor especificar el tipo de memoria para todas las variables.
7. Cuando utilice un puntero, debe especificar el tipo de memoria al que apunta el puntero.
En C51, el puntero general al tipo de memoria no está definido y ocupa 3 bytes; el puntero especificado al área de datos solo ocupa 1 byte; el puntero especificado al área xdata ocupa 2 bytes. Si el puntero p apunta al área de datos, debe definirse como: char data *p;. También puede especificar el tipo de memoria de almacenamiento del puntero, como por ejemplo: char data * xdata p;. El significado es que el puntero p apunta a la variable del área de datos y él mismo se almacena en el área xdata.
liuph publicado en gt; 2006-8-22 11:25:44 [Texto completo] [Comentarios] [Citas] [Recomendaciones] [Archivos] [Enviar a amigos] [Recoger en favoritos] p>
p>
2006-8-22
Llamar al ensamblaje en KEIL C51 [original]
Ha habido muchas publicaciones sobre el método de llamar al ensamblaje en c51 , pero generalmente solo se discuten los puntos clave, hay pocas descripciones detalladas de todo el proceso, lo cual no es suficiente para los principiantes. Aquí, el autor describe este proceso a través de un ejemplo simple, con la esperanza de ser útil para los principiantes. En los últimos años, he recibido orientación de muchas personas entusiastas en este foro, así que espero
hacer lo mejor que pueda.
En este ejemplo, se explica un método para escribir un programa c51 para llamar a una función ensambladora. Los parámetros de entrada de esta función externa son una variable de carácter y una variable de bit, y el valor de retorno es una variable entera. . En este ejemplo, primero use c51 para escribir el cuerpo principal de esta función, luego use las instrucciones de control SRC para compilar y generar un archivo asm. Modifique aún más este archivo asm para obtener la función de ensamblaje que queremos. Este método permite que el compilador complete automáticamente la disposición de varios segmentos y mejora la eficiencia de la escritura de programas ensambladores.
paso 1. Cree un proyecto de acuerdo con el método normal del programa c51 e importe el archivo main.c y el archivo CFUNC.c.
Los archivos relevantes son los siguientes:
//archivo main.c
#include lt; reg51.h gt;
#define uchar unsigned char
#define uint unsigned int
extern uint AFUNC(uchar v_achr, bit v_bflag);
void main()
{
bit BFLAG;
uchar mav_chr;
uint mvintrslt;
mav_chr=0xd4; BFLAG=1;
mvintrslt=AFUNC(mav_chr, BFLAG);
}
//archivo CFUNC.c
#define uchar unsigned char p>
#define uint unsigned int
uint AFUNC(uchar v_achr, bit v_bflag)
{
uchar tmp_vchr;
uint tp_vint ;
tmp_vchr=v_achr;
tp_vint=(uint)v_bflag;
devuelve tmp_vchr (tp_vintlt;lt;8);
}
paso 2. Haga clic derecho en el archivo C que contiene el código ensamblador en la ventana del Proyecto, seleccione "Opciones para...", haga clic en "Generar archivo SRC de ensamblador". " y " Ensamblar el filtro SRC