Está en la página 1de 98

Tema 4

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

Ventajas del C sobre Assembler?


Permite trabajar en un mayor nivel de abstraccin que
assembler
Programas ms legibles
Facilidad para el mantenimiento
Programas con mayor portabilidad a otros
microcontroladores (arquitecturas)
Mayor productividad de los programadores
Menor curva de aprendizaje al cambiar de micro
Se hace cada vez ms popular para aplicaciones embebidas
a medida que los microcontroladores tienen cada vez mas
RAM y ROM
Gran cantidad de cdigo libre disponible.
5

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

void No define nada


char Caracter (un caracter o byte)
int Entero (dos bytes )
long Entero (cuatro bytes)
float Punto flotante precisin simple (cuatro bytes)
double Punto flotante pres. doble (ocho bytes)

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

Operaciones a bit (bitwise)


C provee operadores para manipulacin a nivel bit
y son vlidos para operandos char, short, int, long
signados o no
&
AND
|
OR (barra)
^
XOR (gorrito)
~
NOT (tilde)
>>
rotacin derecha
<<
rotacin izquierda
17

Microcontroladores: Tema 4

Ejemplo de operaciones a bit


unsigned char a = 0x55;
a = a & 0x0F0;
a = a | 0x082;

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

Ejemplo de operaciones a bit


unsigned char a = 0x55;
a = a & 0x0F0;
a = a | 0x082;

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

Ejemplos operadores bitwise


//Enciende bit 0 de puerto B
PORTB = PORTB | 0x01
//Apaga el bit 1 del puerto B
PORTB = PORTB & 0xFD //0xFE = 11111101
//Recorre 4 bits hacia la izquierda variale xyz
xyz = xyz<<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

Las expresions en lenguaje C pueden ser escritas de varias formas


hay que privilegiar la claridad sobre la eficiencia en codificar ergo es ms
legible PORTB = PORTB | 0x01 que PORTB |= 0x01
http://www.ioccc.org/

Microcontroladores: Tema 4

Operadores relacionales y lgicos


Los relacionaes son empleados en expresiones para
comparar dos operandos, si la comparacin es
verdadera el resultado 0 si falsa y diferente de 0 si
verdadera

22

==
!=
>
>=
<
<=
&&
||
!

igual a (dos iguales)


no igual a
mayor que
mayor o igual que
menor que
menor igual que
y (lgico)
o (lgico)
no (lgico)

Microcontroladores: Tema 4

Ejemplos de operadores relacionales y lgicos


If( !(ADCTL & 0x80)){estatutos}
//Si bit 7 no es uno ejecuta estatutos
If( i > 0 && j < 10)){estatutos}
//Si I mayor que 0 y menor que 10 ejecuta
//estatutos
If(a1 == a2 ){estatutos}
//Si a1 igual a a2 ejecuta estatutos

23

Microcontroladores: Tema 4

Precedence of operators in C

24

Microcontroladores: Tema 4

Control de flujo (if)


El estatuto if es condicional, si la condicin es
evaluada como uno o verdadera, los estatutos se
ejecutan,
if(expresion){estatutos}

Ejemplo
if(a > b){
sum = sum + 2; //otra forma sum +=2
}

25

Microcontroladores: Tema 4

Control de flujo (if-else)


El estatuto if-else permite que se ejecuten estatutos
en caso de evaluacion uno y cero
if(expresion){estatutos}else{estatutos}

Ejemplo
if(a!=0){
r = b;
} else {
r = c;
}
26

El estatuto if-else puede ser reemplazado por el estatuto ? Como sigue


r=(a!=0) ? b:c ES DE LO QUE ESTAMOS HUYENDO, EVITENLO

Microcontroladores: Tema 4

Control de flujo (switch)


El estatuto switch es multi opciones basado en el
valor de las expresiones de control
switch(expresion){
case const1: {expresions1
}break;
case const2: {expresions2
}break;
case constn: {expresionsn
}break;
default:
{expresionsd}
}
27

Microcontroladores: Tema 4

Control de flujo (switch)


Ejemplo de switch
switch(i/2){
case 0:
printf(cero\n);
break;
case 1:
printf(uno\n);
break;
case 2:
printf(dos\n);
break;
default:
printf(no valido\n);
}
28

Microcontroladores: Tema 4

Control de flujo (for-loop)


Ejecuta un ciclo donde exp1 y exp3 son
asignaciones y exp2 es una expresion relacional
for(exp1;exp2;exp3){estatutos};

29

Microcontroladores: Tema 4

Control de flujo (for-loop)


Ejemplo, calcula la suma de los
cuadrados de enteros del 1 al 9
sum = 0;
for(i=1;i<10;i++){
sum = sum + i*i;
}
30

Microcontroladores: Tema 4

Control de flujo (while)


Mientras una expresin sea diferente de cero, el
while repite un bloque de cdigo. Cada ciclo se
evalua y no termina hasta que la evaluacin en la
expresin sea cero

while(expresin){estatutos};

31

Microcontroladores: Tema 4

Control de flujo (while)


Ejemplo: espera hasta que la condicin se
cumpla:
i=1;
while(i<5){
a++;
i++;
};

Repite el proceso para siempre


while(1){
a++;
};
32

Microcontroladores: Tema 4

Control de flujo (do-while)


El while verifica la expresin al incio, el
do-while verifica la expresin al final por lo
que el cuerpo de estatutos se realiza al
menos una vez
do{
estatutos}
while(expresin);
33

Microcontroladores: Tema 4

Control de flujo (do-while)


Ejemplo, desplegar en pantalla los digitos
del 9 al 1
int digito = 9;
do{
pritf(%d,digito);
digito = digito -1;
while(digito >=1);
34

Microcontroladores: Tema 4

Control de flujo (goto)


El goto causa que el control sea transferido
directamente al estatuto con la etiqueta que
se debe de encontrar dentro de la misma
funcin.
goto etiqueta;
Se recomienda evitar su uso porque rompe
con el concepto de programacin
estructurada
35

Microcontroladores: Tema 4

Control de flujo (goto)


Ejemplo:
if (i> 100) goto error_fatal;
****
****
error_fatal: printf(WTF\n);
return(1);

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(,,,)

//Returns type int


//Returns type float
//Returns nothing

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

int great_than(int a, int b)

{
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

La funcin puede ser llamada al colocar su nombre


y argumentos, si regresa valor y no se iguala a nada
el valor se pierde.
mayor_que(100,200);

Las funciones que regresan valor pueden ser


llamadas desde expresiones u otras funciones:
printf(\nEl mayor fue: %d,mayor_que(x,y));
if( x > mayor_que(x,y)) printf(\n x es mayor);
50

Microcontroladores: Tema 4

Apuntadores
Las variables almacenan datos, los
apuntadores almacenan direcciones de
memoria
type_name *pointer_name

51

int *aptr;

//Declara un apuntador a entero llamado aptr

int A,B;

//Declara un par de variables enteras

aptr = &A

//Pasa la direccin de memoria de variable A

B = *aptr

//Copia el contenido de la direccion a hacia b

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]

Indice, su rango para un arreglo de n elementos


es de 0 a n-1
53

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];

Se pueden usar expresiones como ndice del arreglo


(variables en ndice siempre enteras).
mi_arreglo[i+1] = 13;
mi_arreglo[i*2] = 2;
mi_arreglo[mis_indices[2]]= x;
54

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};

int mi_tabla[2][3] = {1,2,3,4,5,6};


int mi_tabla[2][3] = {{1,2,3},{4,5,6}};

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];`

//Declara Arreglo de 20 enteros

int *ip;

//Declara apuntador a enteros

ip = &ax[0]

//Pasa a ip direccion elemento 0 arreglo

//Los siguientes estatutos:


ax[0] = 0x01; //Guardamos 0x01 a elemento 0
ax[1] = 0x02; //Guardamos 0x02 a elemento 1
//pueden hacer con apuntadores asi:
*ip = 0x01

//Guardamos 0x01 apuntador elemento 0

ip = ip +1; //Incrementanmos a siguiente elemento


*ip = 0x02

59

//Guardamos 0x02 apuntador elemento 1

Microcontroladores: Tema 4

60

Microcontroladores: Tema 4

Paso de arreglos a funciones


Se puede usar un arreglo como argumento de funcin
int promedio(int,int arr[]);`

//Prototipo funcion

void main(){
int arreglo[25];

//Almacenar 25 enteros para promedio

//Mas estatutos que introducen los elementos al arreglo


printf(Promedio= %d\n,promedio(25,arreglo));
}
int promedio(int n,int arr[]){

//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

Una estructura es un conjunto de variables agrupada


bajo un mismo nombre para facilitar su manipulacin
struct coord {
//Se declara la estructura
int x;
int y;
}
void main(){
struct coord pos1,pos2; //Se declaran dos instancias de coord
//Los elementos de la estructura se usan como cualcuier variable
pos1.x = 1;
pos1.y = 2;
;
//Se pueden transferir el valor de una instancia a otra
pos2 = pos1;

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

Alcance de variables (Scope)


El alcance se refiere a que partes del programa
pueden accesar una variable; dicho de otro
modo, donde es visible.
El alcance define tambin el tiempo que
perdurar la variable en memoria

65

Microcontroladores: Tema 4

Alcance de variables (Scope)


Variables

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

Variables automticas y estticas

Las variables son por default automticas (se


destruyen al salir de la funcin) salvo que se
especifique lo contrario (estticas);

int funcin1 {void){


int x=0;
//Variable X es automtica
x = x +1 ;
//Alteramos el valor de x
return(x);
//El valor de x se destruye al salir
}
int funcin2 {void){
static int x=0;
//Variable X es esttica
x = x +1 ;
//Alteramos el valor de x
return(x);
//El valor de x se conserva
}

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;

//Puerto D = Puerto D OR 0x81


//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;

//Puerto D = Puerto D AND 0xC3


//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;

//Puerto D = Puerto D XOR 0x86


//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

Ejemplos usando MPLAB

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