Documente Academic
Documente Profesional
Documente Cultură
INTRODUCCION AL LENGUAJE C
Microcontroladores: Tema 4
Programacin
Microcontroladores: Tema 4
Qu es el lenguaje C?
Es un lenguaje de propsito general inventado en
Bell-labs por Dennis Ritchie entre 1969 y 1973
Es actualmente el lenguaje ms usado
De este lenguaje se derivan:
C++,C#, D, Go, Java, JavaScript, Limbo, LPC,
Perl, PHP, Python,
Enfocado para plataformas cruzadas y portabilidad
Existe un estndar ISO cuya ltima revisin es
ISO/IEC 9899:2011
3
Microcontroladores: Tema 4
La referencia obligada de C
http://www.amazon.com/C-Programming-Language-2nd-Edition/dp/0131103628
4
Microcontroladores: Tema 4
Microcontroladores: Tema 4
Tiene desventajas?
Esconde complejidad y puede ser peligroso en ciertas
aplicaciones
Es ms dificil controlar rutinas crticas en tiempo.
No se puede utilizar en microcontroladores con poca
capacidad de RAM y ROM
En aplicaciones embebidas es importante revisar la
eficiencia del compilador
Existe siempre un trade-off entre velocidad y tamao del
programa (lo que se le conoce como optimizacin)
Su uso requiere que los programadores tengan habilidades
muy diferentes que los programadores de desk-top.
6
Microcontroladores: Tema 4
Programa en C
Esta formado de funciones y variables
Funciones
Contienen los estatutos de las acciones a realizar
Declaraciones
Asignaciones
Llamados a funciones
Control
Nulo
Variables
Almacenan los valores que sern utilizados en los
clculos
7
Microcontroladores: Tema 4
Microcontroladores: Tema 4
Header Files
El directivo #include<archivo.h> es usado para indicar
al compilador los archivos de encabezado utilizados
Los archivos de encabezados o header files como
stdio.h contienen los prototipos de funciones y
definicin de variables que sern utilizadas en el
programa cuando estos requieren utilizar una
biblioteca (libreria) externa u otros archivos de cdigo
En el lenguaje C las funciones requiren ser declaradas
antes de ser llamadas
Microcontroladores: Tema 4
Variables
Las variables en lenguaje C deben de ser
declaradas antes de ser utilizadas, estn
formadas por:
Nombre
Tipo
Opcionalmente su valor inicial
10
Microcontroladores: Tema 4
Nombres de variables
Deben empezar con letras o _ (guin bajo)
Pueden contener nmeros pero NO
Signos aritmticos, puntos, apstrofes, palabras
reservadas de C, smbolos especiales
(#,@;?...etc)
Agregar el _ entre palabras le da mayor
legibilidad a las variables
MiVariableEntera mi_variable_entera
El guin bajo al inicio se utiliza en la codificacin de librerias
hay que evita usarlo en programas
11
Microcontroladores: Tema 4
Tipos de Variable
Define el tamao y tipo de almacenamiento de la
variable, los principales:
12
Microcontroladores: Tema 4
Declaracin de Variables
Las variables deben de ser declaradas antes de
usarlas, una declaracin especifica el tipo y una lista
de una o ms variables de este tipo:
int i,j,k;
char mi_char1,mi_char2;
Las variables pueden ser inicializadas en la
declaracin:
int i = 0;
char mi_char = 'a';
13
Microcontroladores: Tema 4
Constantes
Existen cinco tipo de constantes
strings:
Hola mundo
char:
'a'
integer:
1234
float:
1234.345
long:
98769876L
14
Microcontroladores: Tema 4
Base numrica
Como en ensamblador, en C se pueden especificar
diferentes bases numricas para facilitar legibilitad
BASE
Decimal
Octal
Hex
15
PREFIJO
ninguno
0
0x
EJEMPLO
1234
04723
0x2A
Microcontroladores: Tema 4
Operadores aritmticos
Existen 7 operadores aritmticos
+
*
/
%
++
-16
Suma
Resta
Multiplicacin
divisin
residuo (mdulo)
incrementar
decrementar
Microcontroladores: Tema 4
Microcontroladores: Tema 4
0 1 0 1 0 1 0 1 0x55
&
1 1 1 1 0 0 0 0 0xF0
=
a
18
0 1 0 1 0 0 0 0 0x50
Microcontroladores: Tema 4
0 1 0 1 0 0 0 0 0x50
1 0 0 0 0 0 1 0 0x82
=
a
19
1 1 0 1 0 0 1 0 0xD2
Microcontroladores: Tema 4
20
Microcontroladores: Tema 4
Representacin alternativa
cuando operador es el mismo despues de =
//Enciende bit 0 de puerto B
PORTB = PORTB | 0x01
//Tambien se pude escribir as
PORTB |= 0x01
//Apaga el bit 1 del puerto B
PORTB = PORTB & 0xFD //0xFE = 11111101
//Tambien se pude escribir as
PORTB &= 0xFD
21
Microcontroladores: Tema 4
22
==
!=
>
>=
<
<=
&&
||
!
Microcontroladores: Tema 4
23
Microcontroladores: Tema 4
Precedence of operators in C
24
Microcontroladores: Tema 4
Ejemplo
if(a > b){
sum = sum + 2; //otra forma sum +=2
}
25
Microcontroladores: Tema 4
Ejemplo
if(a!=0){
r = b;
} else {
r = c;
}
26
Microcontroladores: Tema 4
Microcontroladores: Tema 4
Microcontroladores: Tema 4
29
Microcontroladores: Tema 4
Microcontroladores: Tema 4
while(expresin){estatutos};
31
Microcontroladores: Tema 4
Microcontroladores: Tema 4
Microcontroladores: Tema 4
Microcontroladores: Tema 4
Microcontroladores: Tema 4
36
Microcontroladores: Tema 4
Entrada y Salida
Las prestacions de entrada y salida no
forman parte del lenguaje C
Se ha definido por estndar incluir una
librera de entrada y salida asociadas al
dispositivo estndar (tipicamente pantalla y
teclado) llamada STDIO
37
Microcontroladores: Tema 4
Entrada y Salida
int getchar()
Regresa el caracter disponible en el dispositivo
estandar
char xchr;
xchr = getchar();
int putchar(int)
Saca un caracter por el dispositivo estandar
putchar('a');
38
Microcontroladores: Tema 4
Entrada y Salida
int puts(const char *s)
Saca el string (cadena) apuntada por s
puts(Curso de microcontroladores\n);
int printf(formato, arg1,arg2....argn)
Convierte y formatea e imprime los argumentos.
printf(Valor = %d,val_temp);
scanf(formato, arg1,arg2....argn)
Captura los argumentos bajo el formato.
scanf(%d,&val_temp);
39
Microcontroladores: Tema 4
Especificadores de formato
40
%c
%d
%e
%f
%i
%o
%s
%u
%x
%%
\%
character
decimal (integer) number (base 10)
exponential floating-point number
floating-point number
integer (base 10)
octal number (base 8)
a string of characters
unsigned decimal (integer) number
number in hexadecimal (base 16)
print a percent sign
print a percent sign
Microcontroladores: Tema 4
Funciones
Los programas en C se construyen con
funciones
Una funcin no puede ser declarada dentro
de otra funcin
La misma funcin puede ser llamada en
varios lugares dentro del programa
Generalmente procesan la informacin
alimentada por el llamante y le regresa un
solo valor
41
Microcontroladores: Tema 4
Funciones
La informacin se pasa por medio de
argumentos o parmetros
El resultado de la funcin se transfiere al
llamante mediante el estatuto return
Las funciones pueden aceptar y regresar
valores vacios o nulos (void)
Las funciones pueden llamarse a si mismas
(Recursividad)
42
Microcontroladores: Tema 4
Funciones
Declaracin de una funcin
type function_name(param1,...)
{
estatutos
}
43
Microcontroladores: Tema 4
Funciones
El tipo de retorno
Puede ser cualquier tipo vlido (char,int,long,float etc..)
int function1(,,,)
float function2(,,,)
void function3(,,,)
El nombre de la funcin
Cualquier nombre mientras cumpla con las reglas de C
44
Microcontroladores: Tema 4
Funciones
La lista de parmetros
Son los valores pasados a la funcin cuando es llamada
long cube(long x)
void function1(int x, float y, char z)
void function2(void)
45
Microcontroladores: Tema 4
Funciones
Variables locales
Se declaran dentro de la funcin y son privadas por lo que el
nombre puede repetirse en otras funciones
int function1(int y)
{
int a, b=10;
char my_char;
.
}
46
Microcontroladores: Tema 4
Funciones
El valor de retorno
Se emplea el estatuto return el cual regresa el valor
especificado y el control del programa al cdigo llamante.
Se pueden tener varios returns dentro de la misma funcin
{
if (a > b)
return a;
else
return b;
}
47
Microcontroladores: Tema 4
Funciones
El prototipo de la funcin
Todo programa debe de incluir un prototipo de toda
funcin utilizada
El prototipo es la deficin formal que le indica al
compilador el tipo de returno y de sus argumentos.
Puede estar definida en el programa o en los
archivos de encabezado (*.h)
48
Microcontroladores: Tema 4
49
Microcontroladores: Tema 4
Llamados
Funciones
Microcontroladores: Tema 4
Apuntadores
Las variables almacenan datos, los
apuntadores almacenan direcciones de
memoria
type_name *pointer_name
51
int *aptr;
int A,B;
aptr = &A
B = *aptr
Microcontroladores: Tema 4
Arreglo
Es un conjunto de localidades de
almacenamiento que tienen un mismo
nombre y tipo.
Variables
52
Arreglo
Microcontroladores: Tema 4
Arreglos Unidimensionales
Tienen solamente un ndice
int mi_arreglo[12];
Tipo
Nombre
Cantidad de elementos
Elemento del
arreglo
mi_arreglo[0]
mi_arreglo[1]
mi_arreglo[3]
mi_arreglo[11]
Microcontroladores: Tema 4
Arreglos
El elemento de un arreglo puede ser empleado
como cualquier otra variable.
mi_arreglo[4] = 13;
mi_arreglo[3] = mi_arreglo[0];
mi_arreglo[5] = otro_arreglo[122];
Microcontroladores: Tema 4
Arreglos Multidimensionales
Tienen ms de dos indices (no hay lmite)
float tabla[6][8];
... tabla[0][7]
tabla[1][0]
tabla[1][1] tabla[1][2] ...
tabla[1][7]
tabla[2][0]
tabla[2][1] tabla[2][2] ...
tabla[2][7]
................................................................................
................................................................................
tabla[5][0]
tabla[5][1] tabla[5][2] ...
tabla[5][7]
tabla[0][0]
55
tabla[0][1]
tabla[0][2]
Microcontroladores: Tema 4
Arreglos Multidimensionales
char cubo[5][4][2];
cubo[0][0][1]
cubo[0][1][1]
cubo[0][2][1]
cubo[0][3][1]
cubo[0][3][1]
cubo[1][0][0]
cubo[1][1][0]
cubo[1][2][0]
cubo[1][3][1]
cubo[1][3][1]
cubo[0][0][0]
cubo[0][1][0]
cubo[0][2][0]
cubo[0][3][0]
cubo[2][0][0]
cubo[2][1][0]
cubo[2][2][0]
cubo[2][3][1]
cubo[2][3][1]
cubo[1][0][0]
cubo[1][1][0]
cubo[1][2][0]
cubo[1][3][0]
cubo[3][0][0]
cubo[3][1][0]
cubo[3][2][0]
cubo[3][3][1]
cubo[3][3][1]
cubo[2][0][0]
cubo[2][1][0]
cubo[2][2][0]
cubo[2][3][0]
cubo[4][0][0]
cubo[4][1][0]
cubo[4][2][0]
cubo[4][3][1]
cubo[4][3][1]
cubo[3][0][0]
cubo[3][1][0]
cubo[3][2][0]
cubo[3][3][0]
cubo[4][0][0]
56
cubo[4][1][0]
cubo[4][2][0]
cubo[4][3][0]
Microcontroladores: Tema 4
Inicializacin de arreglos
int mi_arreglo[4] = {1,23,44,1000};
int mi_arreglo[]
= {1,23,44,1000};
57
Microcontroladores: Tema 4
58
Microcontroladores: Tema 4
Apuntadores y Arreglos
Cualquier operacin que se pueda realizar con indices
en los arreglos se puede realizar usando apuntadores.
int ax[20];`
int *ip;
ip = &ax[0]
59
Microcontroladores: Tema 4
60
Microcontroladores: Tema 4
//Prototipo funcion
void main(){
int arreglo[25];
//Funcion de promedio
int i;
total = 0;
for(i=0;i<n;i++) {
total = total + arr[i]; //Suma elemento i
}
return(total/n);
}
61
Microcontroladores: Tema 4
Estructuras
62
Microcontroladores: Tema 4
Estructuras
Las estructuras pueden contener arreglos y
apuntadores dentro de sus elementos
Se pueden tambin hacer arreglos de
estructuras
63
Microcontroladores: Tema 4
Uniones
Fuera del alcance del curso
64
Microcontroladores: Tema 4
65
Microcontroladores: Tema 4
vars
funcin
funcin
funcin
funcin
funcin
funcin
Variables
66
Variables
vars
vars
funcin
funcin
funcin
funcin
funcin
funcin
Microcontroladores: Tema 4
Variables Externas
Usadas cuando un programa es dividido en varios
archivos para facilitar su mantenimiento y con ello se
le indica al compilador que la variable con ese nombre
es la misma para todo el programa (como quiera se
tiene que declarar donde sea usada)
extern int x;
//Valida o global para todo el programa
void main{void){
}
67
Microcontroladores: Tema 4
68
Microcontroladores: Tema 4
Variables Registro
Le indica al compilador que la variable ser
almacenada en un registro del procesador en lugar de
la memoria convencional.
69
Microcontroladores: Tema 4
Compilador MCC18
Tipos de datos y lmites
70
Microcontroladores: Tema 4
Compilador MCC18
Tipos de datos y lmites
71
Microcontroladores: Tema 4
Compilador MCC18
Clases de almacenamiento
Auto,Static, Extern, Register, Overlay
Clase Overlay
Permite que que varias variables compartan las
mismas localidades de memoria con el fin de
optimizar el uso de la memoria RAM.
Solo puede aplicarse en variables locales (porque
se destruyen)
72
Microcontroladores: Tema 4
Compilador MCC18
Constantes numricas
Se soporta el prefijo 0x para hexadecimal
Se soporta el prefijo O para octal
Se adiciona el prefijo 0b para binario (0b01010101)
73
Microcontroladores: Tema 4
Compilador MCC18
Constantes tipo string
El compilador almacena automaticamente todos los
strings (cadenas de caracteres) en la memoria de
programa (ROM) dentro de un rea especial llamada
stringtable
Debido a lo anterior exisen 4 variantes para las
funciones estndares que accesan strings (cadenas)
74
Microcontroladores: Tema 4
Compilador MCC18
Ensamblador dentro de C
El MCC18 permite escribir bloques de cdigo usando
lenguaje ensamblador
El bloque debe de empezar con _asm y finalizar con
_endasm.
75
Microcontroladores: Tema 4
Compilador MCC18
Ensamblador dentro de C
76
Microcontroladores: Tema 4
Compilador MCC18
Ensamblador dentro de C
77
Microcontroladores: Tema 4
Compilador MCC18
Manipulacin de bits
Se puede utilizar las operaciones lgicas a nivel byte
para manipular bits, por ejemplo:
PORTD = PORTD | 0x81;
PORTD 0 1 1 0 0 0 1 0
OR
0x81 1 0 0 0 0 0 0 1
=
PORTD 1 1 1 0 0 0 1 1
78
Valor previo
Mscara
Microcontroladores: Tema 4
Compilador MCC18
Manipulacin de bits
PORTD = PORTD & 0xC3;
PORTD 1 1 0 1 0 1 1 1
AND
0xC3 1 1 0 0 0 0 1 1
=
PORTD 1 1 0 0 0 0 1 1
79
Valor previo
Mscara
Microcontroladores: Tema 4
Compilador MCC18
Manipulacin de bits
PORTD = PORTD ^ 0x86;
PORTD 1 1 0 1 0 1 1 1
XOR
0x86 1 0 0 0 0 1 0 1
=
PORTD 0 1 0 1 0 0 1 0
80
Valor previo
Mscara
Microcontroladores: Tema 4
Compilador MCC18
Resumen de manipulacin de bits
Para hacer 0 algunos bits de un registro o variable se
realiza un AND con una mscara que tiene 0 en las
posiciones de bit que requieren ser borradas
Para hacer 1 algunos bits, se realiza un OR con una
mscara que tiene 1 en las posiciones que se desean
hacer 1
Para cambiar de estado algunos bits, se requiere un
XOR con una mscara que tiene 1 en las posiciones
que se desea cambiar de estado (0 a 1 y visceversa),
81
Microcontroladores: Tema 4
Compilador MCC18
Manejo de bits por medio de archivos de
encabezado especficos.
Microchip provee archivos encabezado que
permiten la manipulacin de bits de los
registros SFR de una manera ms directa.
82
Microcontroladores: Tema 4
Compilador MCC18
Manejo de bits por medio de archivos de encabezado
especficos.
83
Microcontroladores: Tema 4
Compilador MCC18
Manejo de bits por medio de archivos de encabezado
especficos.
//Contiene la definicin de bits
**************
84
Microcontroladores: Tema 4
Compilador MCC18
Los archivos de encabezado tambin proveen Macros de
procesos escritos en ensamblador para realizar operaciones
no disponibles en C.
85
Microcontroladores: Tema 4
Compilador MCC18
El directivo #pragma
Es utilizado para controlar el comportamiento
del compilador. Pueden ser utilizadas para
definir espacios en memoria, interrupciones
etc. Es una manera de especificar cosas que
salen del estndard de C y es especfico de la
implementacin.
86
Microcontroladores: Tema 4
Mezclando C y Ensamblador
Es posible llamar funciones escritas en
ensamblador desde un programa en C o bien,
funciones escritas en C desde un programa de
ensamblador.
Este tipo llamados queda fuera del alcance del
curso
87
Microcontroladores: Tema 4
Startup Code
Cuando el microcontrolador es reiniciado, la
direccion de inicio es la 0x00000.
El compimador agrega una seccin de cdigo
dode se realiza toda la inicializacin para poder
hacer el llamado a nuestro programa main()
Este cdigo puede ser modificado por el usuario
de ser requerido.
88
Microcontroladores: Tema 4
Bibliotecas de funciones
Biblioteca (libreria) dependientes del procesador
Provee funciones que son dependientes del
procesador utilizado, como SFR y fuciones
para inicializar perifricos. (processor.lib)
Funciones generales y matemticas
Son soportadas en toda la familia del
procesador (clib.lib)
Caracteres, datos, delays, manipulacin de memoria y
strings. (Ver seccin 5.18.3 de libro)
89
Microcontroladores: Tema 4
90
Microcontroladores: Tema 4
Programas
91
Entender el problema
Definir la estrategia de solucin
Definir el algoritmo
Codificacin
Pruebas y depuracion (debug)
Liberacin
Mantenimiento
Microcontroladores: Tema 4
Banda Transportadora
TORRETA
SENSOR
CONTENEDOR
MOTOR
BOTON DE
ARRANQUE
CONTROLADOR
BASADO EN PIC18
92
Microcontroladores: Tema 4
Banda Transportadora
El programa de control deber de realizar lo
siguiente:
Esperar el botn de arranque
Contar el nmero de cajas
Si el nmero llega a un MAXIMO parar la
banda transportadora
Encender una torreta
Esperar de nuevo el botn de arranque.
93
Microcontroladores: Tema 4
Banda Transportadora
Seales en sensores y actuadores:
RB4
BOTON
PRESIONADO
RD0
MOTOR
ENCENDIDO
1
0
RB5
0
RD1
SENSOR
CAJA PRESENTE
TORRETA
ENCENDIDA
1
0
94
Microcontroladores: Tema 4
Ejemplo
El programa de control deber de realizar lo
siguiente:
Esperar el botn de arranque
Contar el nmero de cajas
Si el nmero llega a un MAXIMO parar la banda
transportadora
Encender una torreta
Detener la banda
Esperar de nuevo el botn de arranque.
95
Microcontroladores: Tema 4
96
Microcontroladores: Tema 4
97
Microcontroladores: Tema 4
Comparacin de ejecutables
Ensamblador
TEMA_03_1.HEX
98
Lenguaje C
TEMA_04_PIC_3.HEX