Professional Documents
Culture Documents
El lenguaje ANSI C
El lenguaje C fue diseado en el ao 1972 en los laboratorios Bell. La intencin
operativo ni editor, en su lugar otra mquina tiene que ser usada para crear y
compilar la aplicacin. El resultado se enva a la mquina definitiva target para que lo ejecute. La mquina usada para compilar la aplicacin es llamada el sistema host y la mquina que ejecuta la aplicacin es conocida como sistema target.
FLASH y requiere un mayor consumo de memoria RAM. Los buenos compiladores tienen un precio, los ensambladores son gratuitos. Los compiladores son programas que pueden tener algunos inconvenientes. Los compiladores generan cdigo redundante e innecesario que muchas veces no es necesario ejecutar.
Mag. Ing. Sergio Salas
Estructura de un programa en C
#include "p30fxxxx.h //Macros para la configuracin de los fusibles _FOSC(CSW_FSCM_OFF & XT_PLL4); _FWDT(WDT_OFF); _FBORPOR(PBOR_OFF & PWRT_16 & MCLR_EN); _FGS(CODE_PROT_OFF); int main() { El programa principal se ingresa dentro de las llaves de la funcin primaria main(). }
Comentarios en ANSI C
Los comentarios pueden ser de dos tipos: 1. Comentarios de una sola lnea. Haciendo uso del operador // 2. Comentarios que abarcan varias lneas. Haciendo uso del operador /* (inicio del comentario) y */ (fin del comentario) Por ejemplo:
a = 5; //Esto es un comentario al lado de una instruccin. /*Esta es una forma de realizar un comentario compuesto por dos o ms lneas.*/
As mismo, puede haber mas de una instruccin en una sola lnea: a = 4; b = 3; c++; De la misma manera, los espacios en blanco son ignorados por el compilador: a = 5 +2; // Forma correcta
a=5
+ 2; //Tambin es correcto, pero genera desorden en el programa.
Maysculas y minsuculas
En ANSI C las variables escritas con minsculas son diferentes de las escritas con Letras maysculas. Por ejemplo: Variable variable VARIABLE VARIable variablE Los nombres de las variables jams pueden comenzar con un dgito o llevar espacios en blanco. Por ejemplo:
int 7seg; // incorrecto char num entero; // incorrecto La forma adecuada sera: int sevenseg; char num_entero;
Tipos de variables
Tipo
bit signed char unsigned char int unsigned int short unsigned short signed long unsigned long float double
Tamao (bits)
1 8 8 16 16 16 16 32 32 32 32
Rango
0a1 -128 a 127 0 a 255 -32768 a 32767 0 a 65535 -32768 a 32767 0 a 65535 2 147 483 648 a +2 147 483 647 0 to 4 294 967 295 1.17549E-38 a 6.80565E38 1.17549E-38 a 6.80565E38
Declaracin de variables
Las variables por defecto se almacenan en la memoria SRAM. Por esta razn, es recomendable no crear ms variables de las que realmente se necesitan para no malgastar los recursos de memoria.
unsigned char a = 5; //Variable global (puede ser usada en todo el programa float pi = 3.1415; //por las diferentes funciones. void main( ) { char b = -8; //Variable local (solo puede ser usada en el mbito de la // funcin main() unsigned int k = 12000; } void sumar( ) { unsigned char var; var = a +10; //Correcto. a es una variable global. var = b +90; //Error b no existe para esta funcin }
El Complemento a 2
El nmero 8 en binario es: 0000 1000 Si lo invertimos obtenemos: 1111 0111 Si le sumamos 1 tenemos: 1111 1000 = -8 complemento a 2
De la misma manera si tenemos -8: 1111 1000 Y luego lo invertimos: 0000 0111 Y finalmente le sumamos 1: 0000 1000 Suponga que quiere sumar 5 8. Entonces: 0000 0101 -> 5 1111 1000 ->-8 -------------1111 1101 -> -3 Suponga que quiere sumar -8 y -3. Entonces: 1111 1000 -> -8 1111 1101 -> -3 ------------1111 0101 -> -11
Constantes
Muchas veces, es necesario crear variables cuyo contenido se mantenga esttico. Por ejemplo, puede recordar las tablas en lenguaje ensamblador en donde se fijaba un mensaje que se poda presentar en la pantalla LCD o el los Displays 7 segmentos. Dicho mensaje se almacenaba en la memoria FLASH. Las variables constantes se almacenan en FLASH y por tanto su contenido no se puede actualizar. Para declarar una variable constante se hace uso del operador const.
const unsigned char data = 10; const temp = 36.5; const char curso[ ] = {A,r,q,u,i,t,e,c,t,u,r,a}; void main () { TRISB = 0x00; TRISD = 0x00 PORTB = data; PORTD = curso[4]; }
//PORTD = 0 //PORTD = 1
Operadores aritmticos en C
Operador
+ * / % ++ --
Operacin Suma
Resta Multiplicacin Divisin
Residuo
Autoincremento Autodecremento
& | ^ ~ <<
>>
AND
OR XOR NOT Corrimiento izquierda Corrimiento derecha
char a=0b1111 0000, b=0b00110011; char c; void main( ) { c = a & b; // c = 00110000 (AND) c = a | b; // c = 11110011 (OR) c = a ^ b; // c = 11000011 (XOR) c = ~ b; // c = 11001100 (NOT) a = 0b10101100; c = a << 2; // c = 1011 0000 a = 0b10101100; c = a >> 3; // c = 0001 0101 } Mag. Ing. Sergio Sala
O
Negacin
Sentencias de seleccin if
if ( Expresin) Instruccin 1; else Instruccin 2; Condicin verdadera porque el argumento es mayor a 0.
Se utiliza la apertura y cierre de la llave cada vez que hay ms de una sentencia dentro del condicional
Error a = b, es decir a = 7 y como es una asignacin vlida el argumento de if es 1 y por tanto la condicin es considerada verdad por lo cual c = 10.
No afecta el resultado ya que a>4 = 1 y b>6 La operacin AND entre ambos valores da 1 por tanto la condicin es considerada verdad y c = 10. Sin embargo, es importante tener e cuenta que se est realizando la operacin A y no la operacin lgica. Mag. Ing. Sergio Salas
El problema de este anidamiento if-else if es que se deben evaluar todas las condiciones vlida. Una vez hallada la condicin vlida se sale de la sentencias if. Si existen muchas evaluar, el anidamiento if-else if puede resultar ineficiente. Mag. Ing. Sergio Salas
Para resolver el problema de ineficiencia debido a mltiples condiciones posibles para una variable se puede hacer uso de la sentencia switch() que nicamente evala la opcin correcta y ejecuta las instrucciones especificadas para dicha condicin. La sentencia tiene la siguiente estructura: switch (condicin) { case condicin 1: Instrucciones; break; case condicin 2: Instrucciones; break; case condicin N: Instrucciones; break; default: Instrucciones; Mag. Ing. Sergio Salas
Ejemplo:
Muy similar a la sentencia goto en lenguaje ensamblador. De la misma manera, r etiquetas. Cierta literatura sobre el lenguaje ANSI C recomienda no abusar de es sentencia dado que podra ocasionar problemas al compilador. En el caso de AN embebidos esto no aplica ya que la sentencia goto tiene relacin directa con la m lenguaje ensamblador.
La sentencia break
Esta sentencia se utiliza para finalizar la iteracin cuando ocurre cierta condici en su interior. Ejemplo: Calcular el factorial de 5. unsigned char fact = 1; void main() { for(i = 1; i<10; i++) { if(i<6) fact = fact*i; else break; } while(1); }
La sentencia continue
continue es una sentencia que se utiliza dentro de los bucles iterativos para controlar e Esta instruccin normalmente se utiliza dentro de un condicional if para generar la sigu
Ejemplo: Hacer un programa que sume los nmeros pares del 1 al 10.
unsigned char suma; void main() { unsigned char i = 0; for( i = 0; i<=10; i++) { if(i%2 != 0) continue; suma+ = i; } while(1); }