Está en la página 1de 60

MCUs

Microcontroladores

C3
Programación del MCU
en lenguaje de alto
nivel
C3 Programación del MCU en lenguaje de alto nivel

.3.1. Introducción a la programación en lenguaje de alto nivel en MCUs.


3.1.1. Estructura del programa.
3.2. Puertos de entrada/salida digital.
3.3. Interrupciones.
3.3.1. Tipos de interrupciones.
3.3.2. Características de la rutina manejadora de interrupción.
3.3.3. Las interrupciones externas.
3.3.4. Fuentes internas de interrupciones.
3.4. Convertidor analógico/digital.
3.4.1. Arquitectura interna.
3.4.2. Configuración y programación.
3.4.3. Aplicación en un control de señal analógica.
3.5. Temporizador, generador de señales, medidor de intervalos, decodificador de pulsos de cuadratura (QEP) y PWM.
3.6. Lectura y escritura en la memoria interna
2
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.1 Program Structure

3.1 Int. Prog. En Leng Alto Nivel para MCUS


3.1.1 Program structure
Todos los programas en C contienen:
• Directivas de preprocesador
• Declaraciones
• Definiciones
• Expresiones
• Sentencias
• Funciones.

Directiva de preprocesador
• Una directiva de preprocesador es un comando para el
preprocesador C (que es se invoca automáticamente como
el primer paso en la compilación de un programa). 3
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.1 Program Structure

• Las dos directivas de preprocesador más comunes son la


directiva #define y directiva #include
• La directiva #define sustituye el texto por el identificador
especificado
• La directiva #include, incluye el texto de un archivo externo
en un programa.

Declaración (Declaration)
• Una declaración establece los nombres y atributos de las
variables, funciones y tipos utilizados en el programa.
• Las variables globales declaran funciones externas y son
visibles desde el final de la declaración hasta el final del
archivo.
4
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.1 Program Structure

• Una variable local se declara dentro de una función y es


visible desde el final de la declaración hasta el final de la
función.

Definición
• Una definición establece el contenido de una variable o
función.
• A la definición se le asigna el almacenamiento necesario
para variables y funciones.

Expresión
• Una expresión es una combinación de operadores y
operandos que produce un valor único
5
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.1 Program Structure

Sentencia (Statement)
Las sentencias controlan el flujo o el orden de ejecución del
programa en un C programa.

Función
• Una función es una colección de declaraciones,
definiciones, expresiones y sentencias que realizan una
tarea específica.
• Las llaves encierran el cuerpo de una función.
• Las funciones no pueden estar anidadas en C.

Función principal
Todos los programas en C deben contener una función
llamada main donde el programa comienza la ejecución. 6
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.1 Program Structure

• Las llaves que encierran la función principal definen el


punto de inicio y fin del programa.

Example: General C program structure

#include <stdio.h> /* preprocessor directive include*/


stándar C header file*/
#define PI 3.142 /* define symbolic constant */
float area; /* global declaration */

main ()
{ /* beginning of main function and program*/
int radius_squared; /* local declaration */
int radius = 3; /* declaration and initialisation */
radius_squared = square(radius); /* pass a value to a function */ 7
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.1 Program Structure

area = PI * radius_squared; /* assignment statment */


printf("Area is %6.4f square units\n", area)
/*end of main function & program */

square(r) /* function head */


{
int r_squared; /* declarations here are known only to
square */
r_squared = r * r;
returner_squared); /* return value to calling statement */
}

8
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.2 Componentes of a C program

3.1.2 Components of a C program


Todos los programas en C contienen ciertos componentes
esenciales como sentencias y funciones.
• Las sentencias (statements) son las partes del programa
que realmente realizan operaciones.
• Todos los programas en C contienen una o más funciones
• Las funciones son subrutinas, cada una de las cuales
contiene uno o más declaraciones y puede ser llamado por
otras partes del programa.
• Al escribir programas, las sangrías, líneas en blanco y
comentarios mejoran la legibilidad del programa.

El siguiente ejemplo muestra algunas de las partes


requeridas de un programa en C. 9
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.2 Componentes of a C program

#include <stdio.h>
/* My 1st C program */

Main( )
{
printf("Hello world!");
}

La instrucción #include <stdio.h> le dice al compilador que


incluya el código fuente del archivo 'stdio.h' en el programa.

La extensión .h significa archivo de encabezado.


• Un archivo de encabezado contiene información sobre las
funciones estándar que se utilizan en el programa. 10
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.2 Componentes of a C program

• El archivo de encabezado stdio.h es llamado archivo de


encabezado de entrada y salida estándar y contiene la
mayoría de las funciones de entrada y salida.
• Es necesario usar solo los archivos incluidos que
pertenecen a la librería de funciones estándar de biblioteca
en su programa.

/* Mi primer programa en C*/ es un comentario en C.


• Todos los comentarios son precedidos de /* y finaliza con
*/.
• Los comentarios son ignorados por el compilador y, por lo
tanto, no afectan la velocidad o la longitud del compilado
código.
11
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.2 Componentes of a C program

Todos los programas en C deben tener una función main().


• Este es el punto de entrada a el programa.
• Todas las funciones tienen el mismo formato que es:
FunctionName()
{
code
}

Las declaraciones dentro de una función se ejecutan


secuencialmente, comenzando con la llave abierta y
terminando con la llave cerrada.

Las llaves “{“ y “ }“ muestran el principio y el final de los


bloques de código en C 12
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.2 Componentes of a C program

Finalmente, la declaración printf ("¡Hola mundo!");


representa una típico sentencia de C.
• Casi todas las sentencias en C terminan con un punto y
coma (;).
• El carácter fin de línea no es reconoce por C como un
terminador de línea.
• Por lo tanto, no hay restricciones sobre la posición de las
declaraciones dentro de una línea o el número de
sentencias en una línea.

Todas las líneas de código tienen un punto y coma (;) al final


para informar al compilador que ha llegado al final de la
sentencia.
13
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.2 Componentes of a C program

• Si no se incluye esto, se marcará como un error en la línea


SIGUIENTE.
• La excepción a esto es el comando if donde el “;” debe
estar al final de la siguiente línea, es decir,
if(ThisIsTrue)
DiThisFunction;

14
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.2 Componentes of a C program

Ejemplo
1. Hola Mundo

15
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.2 Componentes of a C program

Ejemplo
2 Led – Push Button

16
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.3 #Pragma

3.1.3 #pragma
El comando pragma le indica al compilador que realice una
determinada acción en el momento de la compilación, como
especificar el PIC que se está utilizando
#pragrna device PIC16C54

17
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.4 Main

3.1.4 Main
Cada programa debe tener una función main que sólo puede
aparecer una vez.
• No se pueden colocar parámetros entre los paréntesis ( )
que siguen.

Como main se clasifica como una función, todo el código que


sigue debe colocarse dentro de un par de llaves { } o
corchetes.
main()
{
{cuerpo del programa}
}
18
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.5 #Include dirfective

3.1.5 #include directive


El archivo de encabezado (indicado por la extensión .h)
contiene información sobre funciones de biblioteca tales
como argumento(s) que acepta la función y argumento(s)
que devuelve la función, o la ubicación de los registros PIC
para un PIC específico.

#include <16C54.h>

El compilador utiliza esta información para vincular todos los


detalles del hardware y programas fuente juntos.
• El include anterior permitirá que al registro portb se le
asigne un valor 06h y al registro trisb un 86h en
ensamblador, es decir. 19
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.5 #Include dirfective

portb equ 06h ;port registro


trisb equ 86h ;port direction register

Un ejemplo de incluir archivos de encabezado usando


#include en un programa C es:
#include <stdio.h> //standart input and output routines
#include <conio.h> //console input and outup routines

main()
{
printf{“Microchip is”);
while ( !kbhit());
printf(“#1!);
} 20
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.5 #Include dirfective

La función printf() se encuentra en el archivo de cabecera


stdio. h mientras que la funcion kbhi t() se encuentra en el
archivo de cabecera conio.h.
• Ambos archivos de encabezado deben usarse en este
programa, por lo que el compilador tiene información
sobre las funciones que está utilizando.

Corchetes triangulares en #include le indican al


preprocesador que busque en otro directorio el archivo.

#include <thisfile.h>

Las comillas en #include le dicen al preprocesador que


busque en el directorio actual al archivo. 21
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.5 #Include dirfective

#include “thisfile.h”

Probablemente haya notado que la directiva #include no


tiene un punto y coma al final.
• La razón es que la directiva #include no es una palabra
clave de C, sino una instrucción para el compilador.

La totalidad del archivo de inclusión se inserta en el archivo


de origen en la etapa de compilación.

22
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.6 print function

3.1.6 printf function


La función printf es una función de biblioteca estándar que
está contenida en el archivo de encabezado 'stdio.h’.
• printf permite al programador imprimir información a la
pantalla.

El formato general para una instrucción printf () es:


printf(“control_string”, argument_list);

control_string
• Es una cadena con comillas dobles en cada extremo.
• Dentro de esto se puede utilizar cualquier combinación de
letras, números y símbolos.
23
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.6 print function

• Los símbolos especiales denominados especificadores de


formato se indican con un %.
• control_string siempre debe estar presente en la función
printf().

argument_list
• Puede no ser necesario si no hay especificadores de
formato en la cadena de formato.
• La argument_list puede estar compuesta de constantes y
variables.
• Los siguientes dos ejemplos muestran sentencias printf()
utilizando una constante y luego una variable.
printf("Hello world!"};
printf("Microchip is #%d!", 1}; 24
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.6 print function

Especificador de formato
• El especificador de formato (%d) depende del tipo de datos
que se desplegaran

La siguiente tabla muestra todos los especificadores de


formato en C y los tipos de datos a los que afectan.

Format Specifiers printf( )


%c single character
%uc unsigned character
%s string
%d signed decimal integer
%f floating point (decimal notation - must include decimal
point)
25
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.6 print function

%e floating point (exponential or scientific notation)


%g floating point {%f or %e, whichever is shorter- general
format}
%u unsigned decimal integer
%x unsigned hexadecimal integer
%p pointer
%0 unsigned octal integer
1 prefix used with %d, %u, %x, %0 to specify long integer

NOTA
• Un 0 (cero) seguido de un carácter % dentro de una cadena
de formato forza ceros iniciales que se imprimirán.
• El número siguiente especifica el ancho del campo impreso

printf("The Hex of decimal 12 is %02x\n", 12); 26


C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.6 print function

Imprimiría
The Hex of decimal 12 is Oc

Escape Sequences
\n newline \a audible bell
\t horizontal tab \b backspace
\r carriage return \0 null character
\f formfeed \v vertical tab
\‘ single quote \xhhh inset HEX code hhh
\“ double quote
\\ backs lash
%% percent sign
\? question mark

27
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.6 print function

El formato de especificación también se puede mostrar como


%[flags][width][.precision], de un ejemplo anterior la línea:

printf{"Area is %6.4f square units\n", area) ;

imprimirá el valor de area en un ancho de campo de 6 con


una precisión de 4 lugares decimales.

28
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.6 print function

Ejemplo
2 Led – Push Button

29
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.6 print function

Ejemplo
3 Corrimiento de bits

30
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.6 print function

Ejemplo
4 Contador binario

31
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.6 print function

Ejemplo
4 Teclado Matricial

32
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.6 print function

Ejemplo
4 Teclado Matricial

33
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.6 print function

Ejemplo
4 Teclado Matricial Continuación

34
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.7 Variables

3.1.7 Variables
Un variable es un nombre para una ubicación de memoria
específica.
• Esa localidad de memoria puede contener varios valores
dependiendo de cómo se haya declarado la variable.
• En C, todas las variables deben declararse antes de usarse.
• La declaración de variables le dice al compilador qué tipo
de variable se usará.
• Todas las declaraciones de variables son sentencias en C,
por lo tanto, terminan con un punto y coma.

Los cinco tipos de datos básicos que admite C son char, int,
float, doble, vacío.
35
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.7 Variables

El formato general para declarar un IS vanable:


type variable_name;

Un ejemplo de declaración de una variable es char ch;


• El compilador interpretará esta sentencia como la variable
ch declarada como un char (entero sin signo de 8 bits).

36
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.7 Constants

1.8 Constants
Una constante es un valor fijo que el programa no puede
cambiar.
• Por ejemplo, 25 es una constante.
• Las constantes enteras se especifican sin parte fraccionario,
como -100 o 40.
• Constantes de punto flotante requieren el punto decimal
seguido de la parte fraccionaria, el número 456,75 es una
constante de punto flotante.
• Las constantes de carácter se encierran entre comillas
simples como 'A' o '&’.

Cuando el compilador encuentra una constante en su


programa, debe decidir qué tipo de constante es. 37
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.8 Constants

• El compilador de C, por defecto, se ajustará al tipo de dato


de la constante compatible más pequeño que lo contendrá
• Entonces 15 es un int, 64000 es un unsigned y 105020 es
un long.

Una constante se declara usando la sentencia #define.

#define <label> value

<label> define el nombre que utilizará a lo largo de su


programa, valor es el valor que está asignando a <label>.

#define TRUE 1
38
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.8 Constants

#define pi 3.14159265359

Usted puede especificar el tipo de una constante al usar los


siguientes subfijos.
F floating point
FL long double
U unsigned
L long

C le permite especificar constantes en formato hexadecimal y


octal.
• Las constantes hexadecimales deben tener el prefijo ‘0x’,
• Por ejemplo 0xA4 es una constante hexadecimal válida.
39
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.8 Constants

C admite constantes de cadena.


• Las constantes de cadena son un conjunto de caracteres.
encerrado entre comillas dobles.

40
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.9 Comments

3.1.9 Comments
Los comentarios se utilizan para documentar el significado y
el funcionamiento del código fuente.
• El compilador ignora todos los comentarios.
• Un comentario puede colocarse en cualquier parte del
programa
• El comentario NO se debe colocar en medio de una palabra
clave, nombre de una función o nombre de una variable.
• Los comentarios pueden tener muchas líneas y también se
pueden usar para eliminar temporalmente una línea de
código.
• Finalmente, los comentarios no se pueden anidar.

41
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.9 Comments

Los comentarios tienen dos formatos.


• El primer formato es usado por todos los compiladores de
C. y es

/* This is a comment */

• El segundo formato es compatible con la mayoría de los


compiladores y es:

II This is a comment

42
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.9 Comments

Ejercicios
¿Cuáles de los siguientes comentarios son validos?
1. / My comment is very short */

2. /* My comment is very, very, very, very, very very, very,


very, very, very, very, very,
very, very, very long and is valid */

3. /* This comment /* looks */ ok, but is …*/

43
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.10 Functions

3.1.10 Functions
Las funciones son los componentes básicos de un programa
en C. Todos los programas en C contener al menos una
función, main ( ) . La mayoría del programa que escribirás
contendrá muchas funciones. El formato para un programa
en C con muchas funciones ES:

main( )
{
}

function1( )
{
} 44
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.10 Functions

function2()
{
}

main() es la primera función llamada cuando se ejecuta el


programa.
• Las otras funciones, function1() y function2(), pueden ser
llamadas por cualquier función en el programa.

Tradicionalmente, main () no es llamado por ninguna otra


función, sin embargo, no hay restricciones en C.

El siguiente es un ejemplo de dos funciones en C.


45
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.10 Functions

#include <stdio.h>
main( )
{
printf("I ");
function1();
printf("C.");

function1( )
{
}
Recuerde que al escribir sus propias funciones ábralas y
ciérrelas con llaves.
• El programa comenzará a ejecutar la función una vez que
fue llamada. 46
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

3.1.11 Keywords

1.11 C keywords
El estándar ANSI C define 32 palabras clave para usar en el
lenguaje C.
• En C, ciertas palabras están reservadas para que las use el
compilador para definir tipos de datos o para uso en auto double int struct
bucles. break else long switch
case enum register typedef
• Todas las palabras clave en C deben estar en minúsculas char extern return union
para que el compilador las reconozca. const float short unsigned
• Típicamente, muchos compiladores de C agregan varias continue for signed void
palabras clave adicionales que aprovechan la arquitectura default goto sizeof volatile
do if static while
del procesador.
• La lista de la derecha presenta las palabras clave:

47
C3 Programación del MCU en lenguaje de alto nivel 3.1 Int. A la prog. En leng. De alto nivel en MCUs

Ejercicios

Ejercicios
1. Escriba un programa que imprima su nombre en la
pantalla.

2. Escriba un programa que declare una variable entera


llamada año. A esta variable se le debe dar el valor del año
en curso y luego, utilizando una instrucción printf(), muestre
el valor del año en la pantalla. El resultado de su programa
debería verse así:
El año es 1998

48
C3 Programación del MCU en lenguaje de alto nivel 3.2 Puertos de entrada salida digital

3.2. Puertos de entrada/salida digital.

49
C3 Programación del MCU en lenguaje de alto nivel 3.3 Interrupciones

3.3. Interrupciones.

50
C3 Programación del MCU en lenguaje de alto nivel 3.3 Interrupciones

3.3.1 Tipos de interrupciones

3.3.1. Tipos de interrupciones.

51
C3 Programación del MCU en lenguaje de alto nivel 3.3 Interrupciones

3.3.2. Características de la rutina manejadora de interrupciones

3.3.2. Características de la rutina manejadora de


interrupciones

52
C3 Programación del MCU en lenguaje de alto nivel 3.3 Interrupciones

3.3.3 Las interrupciones externas

3.3.3. Las interrupciones externas.

53
C3 Programación del MCU en lenguaje de alto nivel 3.3 Interrupciones

3.3.4 Fuentes internas de interrupción

3.3.4. Fuentes internas de interrupciones.

54
C3 Programación del MCU en lenguaje de alto nivel 3.4 Convertidor analógico digital

3.4. Convertidor analógico/digital.

55
C3 Programación del MCU en lenguaje de alto nivel 3.4 Convertidor analógico digital

3.4.1 Arquitectura interna

3.4.1. Arquitectura interna.

56
C3 Programación del MCU en lenguaje de alto nivel 3.4 Convertidor analógico digital

3.4.2 Configuración y programación

3.4.2. Configuración y programación.

57
C3 Programación del MCU en lenguaje de alto nivel 3.4 Convertidor analógico digital

3.4.3. Aplicación en un control de señal analógica.

3.4.3. Aplicación en un control de señal analógica.

58
3.5 Temporizador, generador de señales, medidor de intervalos,
C3 Programación del MCU en lenguaje de alto nivel
decodificador de pulsos de cuadratura (QEP) y PWM.

3.5. Temporizador, generador de señales, medidor de


intervalos, decodificador de pulsos de cuadratura (QEP) y
PWM.

59
C3 Programación del MCU en lenguaje de alto nivel 3. 6 Lectura y escritura en la memoria interna

3.6 Lectura y escritura en la memoria interna

60

También podría gustarte