Contenido>Indice>Intro CursoC51

REGLAS GENERALES A SEGUIR



Las siguientes reglas permiten que el compilador haga el mejor uso de los recursos del procesador. En general, la aproximación a C desde el punto de vista del programador en ensamblador no es dañina en absoluto.

Regla 1

Utilizar siempre que sea posible variables de 8 bit. El 8051 es una máquina de 8 bits que procesa los char con mayor eficacia que los int.

Regla 2

Utilizar siempre que sea posible variables unsigned. El 8051 no tiene instrucciones para las operaciones aritméticas con signo, por lo cual las operaciones con signo siempre añaden más instrucciones del 8051.

Regla 3

Procurar eliminar las divisiones salvo que sean entre números de 8 bits. El 8051 tiene una sola instrucción para dividir dos números de 8 bits. Dividir números de 32 bits entre números de 16 bits puede resultar muy lento, salvo que se utilice un 80C537.

Regla 4

Evitar el uso de estructuras de bit que producen código lento e ineficaz. En su lugar declarar bits individualmente, utilizando la clase de almacenamiento "bit".

Regla 5

El estándar ANSI dice que el producto de dos cantidades de 8 bits (char) es también un char. En consecuencia, cualquier unsigned char que al ser multiplicado pueda producir un resultado superior a 255 debe declararse como unsigned int.

Pero tal como señala la regla 15.1 no debe utilizarse un int, cuando pueda servir un char. La solución es convertir temporalmente (cast) el char a int. En el siguiente ejemplo el producto potencialmente puede tener 16 bits, pero el resultado es siempre de 8 bits. El cast o forzado de tipo "(unsigned int)" asegura que el C51 realice una multiplicación de 16 bits.

        {
        unsigned char z ;
        unsigned char x ;
        unsigned char y ;
        z = ((unsigned int) y * (unsigned int) x) >> 8 ;
        }

Aquí se multiplican dos números de 8 bits, y el resultado se divide entre 256. El resultado intermedio tiene 16 bits debido a que los números x e y, han sido cargados por la rutina de multiplicación de la librería como ints.

Regla 6

Los cálculos con operandos enteros que, debido a un cuidadoso escalado, siempre producen resultados de 8 bits siempre funcionarán. En:

            unsigned int x, y ;
            unsigned char z ;
            z = x*y/256 ;

C51 igualará z al byte de dirección más alta (menos significativo) del resultado entero. Este resultado es independiente de la máquina utilizada, ya que viene impuesto por el estándar ANSI. En este caso C51 accede al byte menos significativo directamente, ahorrando código, ya que la división no se realiza.

Números en coma flotante

En las operaciones con números en coma flotante, un operando siempre se mete en la pila aritmética de RAM interna. En el modelo SMALL se usa la pila del 8051, pero en los otros modelos se crea un segmento fijo en la primera dirección disponible por encima del área del banco de registros. En las aplicaciones en las que sea necesario ahorrar espacio en RAM interna, no debería utilizarse matemática de coma flotante. La coma fija es una alternativa más real.

Conclusión

Lo visto en este curso habrá proporcionado una ligera idea de cómo el compilador C51 puede utilizarse en el desarrollo de programas reales. Su gran ventaja es que elimina la necesidad de ser un experto en ensamblador del 8051 para producir programas eficaces.

Realmente, C51 puede considerarse como un lenguaje universal de nivel entre medio y bajo, al que pueden acceder fácilmente tanto los programadores en ensamblador, como los programadores en lenguaje C. Facilita el acceso a los periféricos internos y externos del 8051, haciendo innecesario la escritura en ensamblador de drivers para dispositivos periféricos.

Permite construir programas bien estructurados evitando los goto y los LJMP. De echo, la mayor parte del código extra generado por C51 se emplea en asegurar una buena estructura para los programas, y no en un uso ineficiente del set de instrucciones del 8051.

Ofrece verdadera portabilidad desde el 8051 hacia otros procesadores, y a la inversa. Así las funciones existentes puede re-utilizarse, lo cual contribuye a reducir el tiempo de desarrollo de las aplicaciones.

 


   Contenido>Indice>Intro CursoC51