Página 1
Programación C de microcontroladores (C515C) CMC 5 Guía de ejercicios para el estudiante SH5004-1E 3ra. edición Autor: equipo de autores ACMC Mittweida Lucas-Nülle Lehr- und Messgeräte GmbH Siemensstraße 2 • D-50170 Kerpen...
Programación C de microcontroladores (C515C) CMC 5 Índice Objetivo de los ensayos ....................1 Sinóptico de ensayos ....................1 Instalación de aparatos ....................2 Introducción y condiciones básicas ................4 Introducción resumida en C..................6 Tipos de datos estructurados ..................13 Puntero........................15 Control de programa y sentencias de control............18 Instrucciones de preprocesador ................22...
Programación C de microcontroladores (C515C) CMC 5 Objetivo de los ensayos Los aprendices / estudiantes adquieren conocimientos relativos a la estructura, al funcionamiento y a la programación C de un moderno sistema de microcontrolador. Los aprendices / estudiantes se familiarizan con la estructura del MC y con la perifería “on-chip”...
Programación C de microcontroladores (C515C) CMC 5 LM9040 PC mit IDE SO4000-1G Software SO4000-1K SO4001-9H SO4000-1E Figura 1: Instalación en el puesto de trabajo Instalación de aparatos Para una realización del ensayo efectiva y sin errores se representan a continuación y por separado: •...
SO4000-3N Unidad de memoria I SO4000-3O Unidad RTC-Temp. I SO4000-3P Cable de interfaz serial 9/9 polos LM9040 Cables medición 2mm, 15cm, azul SO5126-5K Cables medición 2mm, 15cm, amar. SO5126-5M CMC 5 Programación C de microcontroladores (C515C) SH5019-1E Introducción CMC 5...
Programación C de microcontroladores (C515C) CMC 5 Introducción y condiciones básicas Los lenguajes de programación de alto nivel ofrecen, en el desarrollo de programas para microcontroladores, una serie de ventajas. Las razones esenciales para su empleo son el más alto nivel de abstracción, la transportabilidad relativamente sencilla del código a diferentes sistemas de destino, así...
Página 9
® fondo seleccionados cursillos de Ensamblador del MCLS-modular Cursillo CMC1: Introducción en la técnica de microcontrolador (80C535 / C515C) Cursillo CMC3: Programación de perifería on chip (80C535 / C515C) Introducción CMC 5...
Programación C de microcontroladores (C515C) CMC 5 Introducción resumida en C Tipos de datos En el lenguaje de programación C se distingue entre 4 tipos de datos base con los que se puede determinar el margen de valores de variables, así como de funciones. Hay que observar que estos tipos de datos base dependen, en parte, del ordenador.
Página 11
Programación C de microcontroladores (C515C) CMC 5 Ejemplos: unsigned char signo; /* una variable de 8 bits sin signo */ int i; /* una variable de número entero con signo */ signed int h; /* una variable de número entero con signo */ float z;...
Programación C de microcontroladores (C515C) CMC 5 Funciones Normalmente, un programa C está dividido en diferentes funciones. Una función se compone, de un modo general, de un encabezamiento y de un cuerpo. Tipo de datos Nombre de función (parámetro) // Encabezamiento de función // Comienzo cuerpo de función...
Programación C de microcontroladores (C515C) CMC 5 Ejemplo: // Prototipos de funciones -------------------------------------- void func1(int) // Prototipo Función1 int func2(void); // Prototipo Función2 // Función principal ---------------------------------------------- void main(void) // Función principal int a; // Variable loc. func1(a); // Llamada a la función1 a = func2();...
Página 14
Programación C de microcontroladores (C515C) CMC 5 Signo Significado Adición (Más binario) Sustracción (Menos binario) Multiplicación División Módulo (resto de número entero de una división) << Arrastre a la izquierda >> Arrastre a la derecha & AND (Y) bit a bit...
Programación C de microcontroladores (C515C) CMC 5 Orden de operadores Los operadores de la tabla 5 están posicionados según su jerarquía desde el rango más alto (arriba) hasta el rango más bajo (abajo). Todos los operadores que se encuentran en una línea tienen la misma jerarquía y, cuando se presentan al mismo tiempo en una expresión,...
Programación C de microcontroladores (C515C) CMC 5 Operadores de aritmética Para las operaciones fundamentales se dispone de los operadores +, -, *, /. Adicionalmente existe un operador de módulo % , con el cual se puede determinar el resto de una división, así...
Programación C de microcontroladores (C515C) CMC 5 Operadores compuestos Para la escritura abreviada de asignaciones pueden utilizarse en C operadores compuestos. Se debe observar la siguiente estructura: Expresión1 Operando = Expresión2 Como operandos se pueden emplear +, -, *, /, %, <<, >>, &, ^, |.
Programación C de microcontroladores (C515C) CMC 5 Estructuras Las estructuras permiten combinar objetos de diferente tipo. Como componentes de una estructura son posibles variables, campos y también estructuras. Para la declaración se debe emplear la palabra clave struct: struct Nombre Objeto1;...
Programación C de microcontroladores (C515C) CMC 5 Puntero Para acceder de forma indirecta a áreas de memoria, por ejemplo variables, campos o estructuras, se emplean punteros. ¡Estos punteros o pointer no contienen el valor de una localidad de memoria, sino solamente su dirección! La ventaja principal radica en la mayor velocidad de acceso a localidades de memoria porque no se trabaja con el contenido.
Programación C de microcontroladores (C515C) CMC 5 Ejemplo: números int[5]; // Campo del tipo Integer con 5 elementos int *p; // Puntero en Integer p=números; // p apunta al 1º elemento números[0] *p=10; // Elemento números[0] recibe el valor 10 Análogamente a esta asignación de valores del primer elemento también es posible al...
Página 21
Programación C de microcontroladores (C515C) CMC 5 Para el procesamiento de cadenas de caracteres, el Compilador pone a disposición funciones de biblioteca que se pueden emplear tras la inclusión del archivo de encabezamiento string.h en el archivo fuente. En la siguiente tabla se representan funciones de biblioteca seleccionadas para el procesamiento de cadenas de caracteres: Función...
Programación C de microcontroladores (C515C) CMC 5 Control de programa y sentencias de control Para estructurar un problema de forma sinóptica, se deben emplear sentencias de control para el control del programa. Estas sentencias están divididas en selección y bucles.
Programación C de microcontroladores (C515C) CMC 5 La sentencia switch La sentencia switch representa una ampliación de la sentencia if. Mediante switch se puede realizar una selección múltiple. Como ejemplo se nombra la ramificación de programa mediante una variable que puede adoptar varios valores. La sentencia se representa de la siguiente manera: switch (expresión de prueba)
Página 24
Programación C de microcontroladores (C515C) CMC 5 La ramificación default es opcional, realizándose el procesamiento de las instrucciones contenidas en ella solamente si no ha habido coincidencia con las expresiones constantes. Por lo tanto debería introducirse al final del bloque switch.
Página 25
Programación C de microcontroladores (C515C) CMC 5 Nota: ¡La línea while(condición); de la sentencia while evaluada al final siempre se debe terminar con un punto y coma! La sentencia for La sentencia for permite la realización de bucles de conteo. Es un bucle evaluado al principio porque la condición de bucle siempre se realiza antes de ejecutar las instrucciones...
Programación C de microcontroladores (C515C) CMC 5 Instrucciones de preprocesador Antes de la traducción del código fuente C se llama al preprocesor. Éste inserta los archivos de encabezamiento y define los símbolos, así como los macros. Las instrucciones de preprocesador están marcadas con una almohadilla (#) antepuesta y no se terminan con el punto y coma.
Programación C de microcontroladores (C515C) CMC 5 Biblioteca ANSI El lenguaje de programación C fue estandarizado en 1988 por el "American National Standard Institute" (ANSI). En general, la definición de lenguaje resultante se denomina estándar ANSI o ANSI-C. La ventaja de la estandarización reside en la portabilidad de programas de un sistema a otro sistema de destino.
Programación C de microcontroladores (C515C) CMC 5 Programación C para Sistemas Integrados La programación C para Sistemas Integrados (Embedded Systems) con microcontroladores (MC) presenta algunas particularidades en comparación con la programación C para Estaciones de trabajo (Workstations). Éstas resultan por una parte de la multitud de posibles aplicaciones con MC y por otra de la necesidad de poder acceder directamente al hardware implementado del MC (memorias, puertos, temporizadores, ...).
Página 29
Programación C de microcontroladores (C515C) CMC 5 permite ahorrar comandos de transporte después de la ejecución de operaciones lógicas e aritméticas. Puesto que todos los registros de trabajo también están representados en el área de direcciones lineales, se puede realizar un acceso conforme a C a estos registros por medio de punteros.
Programación C de microcontroladores (C515C) CMC 5 El entorno de trabajo y el Compilador de C Sinópsis Para la programación de los ensayos de este manual, se utiliza el lenguaje de alto nivel C, junto con el Compilador Small Device C Compiler SDCC que está protegido por licencia pública general.
Página 31
"Módulos". Esto se refiere al módulo "PSD1-C515C-AS" con todas las herramientas y el perfil integrado del mismo nombre para la programación del Ensamblador del C515C y al módulo "PSD1-C515C-SDCC" con todas las herramientas y el perfil integrado del mismo nombre para la programación C del C515C.
Página 32
Programación C de microcontroladores (C515C) CMC 5 Crear un proyecto nuevo ® Primero se debe iniciar el IDE del MCLS-modular (Inicio Programas MCLS-modular). En la selección de perfiles para el microcontrolador se debe seleccionar el perfil integrado PSD1-C515C-SDCC. Figura 11: Nuevo proyecto con selección de perfiles A continuación, el proyecto se debe guardar en una carpeta opcional.
Programación C de microcontroladores (C515C) CMC 5 Nota: ¡Al guardar el archivo fuente, es imprescindible ajustar C-Source-File en la ventana Tipo de archivo! En otro caso podría darse el caso de que se guarden incorrectamente terminaciones de archivos lo que impide el proceso de compilación.
Programación C de microcontroladores (C515C) CMC 5 Bibliotecas de funciones Para los ensayos prácticos se ponen a disposición las siguientes bibliotecas de funciones (archivos de encabezamiento): delay.h Función para la generación de retardos de tiempo de software intbcd.h Funciones para convertir una variable del tipo de datos unsigned int en dígitos de BCD individuales...
Página 35
Programación C de microcontroladores (C515C) CMC 5 Valor transferido Retardo de tiempo delaytime resultante 0,5ms 1,5ms 1000 2500 5000 10ms 7500 15ms 10000 20ms 25000 50ms 50000 100ms Tabla 10: Retardos de tiempo típicos intbcd.h Función Descripción Transferencia de datos...
Página 36
Programación C de microcontroladores (C515C) CMC 5 7seg.h para la UNIDAD INDICADORA 1 Función Descripción Transferencia de datos seg_init Inicialización de la UNIDAD INDICADORA 1 sin parámetros seg_out Visualización de un número transferido en un unsigned char out unsigned char seg lugar definido de la indicadora 0 ..
Página 37
Programación C de microcontroladores (C515C) CMC 5 iic.h para el interfaz de I²C del software Las funciones representadas en la siguiente tabla forman la base para otras bibliotecas para la comunicación del módulo FLASH PSD1 con componentes de I²C. Por parte del hardware están definidos el Pin de puerto 5.0 = SDA y el Pin de puerto 5.1 = SCL.
Página 38
Programación C de microcontroladores (C515C) CMC 5 Función void IIC_ACK_SEND(void) / void IIC_NO_ACK_SEND(void) Al recibir un byte de datos, éste se debe confirmar con una señal Acknowledge o NO- Acknowledge. Estas secuencias se realizan con la llamada a la respectiva función. Las funciones no necesitan parámetros de transferencia y no crean valores de retorno.
Página 39
Programación C de microcontroladores (C515C) CMC 5 Ejemplo para una llamada a la función: LCD_gotoXY(2,3); // pone cursor en línea 2 carácter 3 Función void LCD_SENDSTRING(unsigned char *ptr_char) La función LCD_SENDSTRING(unsigned char *ptr_char) se puede utilizar para la visualización de cadenas de caracteres terminadas en cero en la unidad indicadora LCD.
Página 40
Programación C de microcontroladores (C515C) CMC 5 Descripción de la función Función void RTC_INIT(void) La inicialización de RTC DS1307 se hace necesaria después de cambiar de batería de apoyo. El siguiente proceso se encuentra implementado en la función: IIC_SEND(0x00); // Segundos = 00, reloj conect.
Página 41
Programación C de microcontroladores (C515C) CMC 5 lm75.h para la unidad RTC-Temp. de I2C Función Descripción Transferencia de datos TEMP_LCD Convertir byte de temperatura en código LCD unsigned char t2 Valores de retorno en variables globales temperatue1 y temperature10 TEMP_IN Entrada del 1º...
Página 42
Programación C de microcontroladores (C515C) CMC 5 Ejemplo para la llamada a la función: LCD_gotoXY(2,3); // Poner cursor de LCD TEMP_OUT(Variable); // Visualizar valor de temperatura de TEMP_IN() // en LCD iiccard.h para la Unidad de Tarjeta Inteligente de I2C Función...
Programación C de microcontroladores (C515C) CMC 5 CMC 5-1 Bloque de ensayos 1 Estructura base de un programa C, utilización de sentencias de control, utilización de puertos y pins de puerto El primer programa C MCLS - modular PSD2 PSD1...
Programación C de microcontroladores (C515C) CMC 5 Explicación del ensayo: En el primer ensayo se deberá compilar un programa sencillo que haga parpadear el díodo luminoso LED0 de la UNIDAD de LEDs. A ese fin se programará la siguiente secuencia en un bucle sinfín dentro de la función main:...
CMC 5 Nota: En el módulo FLASH PSD1 se emplea un C515C de Infineon. Este controlador posee, en comparación con el C515A, adicionalmente un interfaz CAN que sin embargo no se utiliza en los bloques de ensayos. La definición del tipo de microcontrolador 515A es suficiente porque en el archivo de encabezamiento disponible “mcs51reg.h“...
Programación C de microcontroladores (C515C) CMC 5 Luz de desplazamiento sucesivo MCLS - modular PSD2 PSD1 RESET LED - UNIT SO4000-1P PSD1-FLASH RESET INFINEON PSD1 C515C ANGND KEY - UNIT SO4000-1Q RESET UREF SO4000-1G (TxD) (RxD) 8 - BIT ADAPTER - UNIT...
Página 47
Programación C de microcontroladores (C515C) CMC 5 Para el control de dirección el programa debe incluir una evaluación de una tecla de la unidad de TECLAS que está conectada a un pin de puerto. A ese fin se puede emplear una sentencia de control if con ramificación else (...
Página 48
Programación C de microcontroladores (C515C) CMC 5 Ejemplo de solución: /********************************************************************/ Título: cmc5-12: Luz de desplazamiento sucesivo Autor: ACMC/hpo Fecha: 06/04 Software: SDCC Hardware: Flash PSD1 Nota: UNIDAD LED 0 ... 7 en Puerto 1.0 ... 1.7 UNIDAD TECLAS Tecla 1 en Puerto 5.0...
Programación C de microcontroladores (C515C) CMC 5 Contando accionamientos de tecla mediante Polling (modo de espera) MCLS - modular PSD2 PSD1 RESET PSD1-FLASH RESET INFINEON PSD1 C515C ANGND KEY - UNIT SO4000-1Q DISPLAY - UNIT 1 SO4000-1S RESET UREF SO4000-1G...
Página 50
Programación C de microcontroladores (C515C) CMC 5 void main(void) Bucle sinfín Leer puerto de tecla Enmascarar tecla 2 ¿Tecla 2 accionada? sí Visualizar nº accionamientos en UNID. INDICADORA 1 Retardo de tiempo La lectura del puerto al que están conectadas las teclas se puede realizar con una asignación sencilla:...
Página 51
Programación C de microcontroladores (C515C) CMC 5 Ejercicios de programación: • ¡Abra un proyecto nuevo! • ¡Lea las explicaciones de las bibliotecas de funciones intbcd.h y 7seg.h en la sección H! • ¡Compile un programa que lea el estado de los pins de puerto de las teclas separados por un retardo de tiempo y que al accionar la tecla 2 visualice el número de...
Programación C de microcontroladores (C515C) CMC 5 Preguntas de control para el bloque de ensayos CMC 5-1 ¿Qué misión tiene la función main dentro de un programa C? ¿Cómo se pueden realizar los bucles sinfín? ¿De qué sirve mcs51reg.h? ¿Cómo se introducen los estados de puerto?
Página 53
Programación C de microcontroladores (C515C) CMC 5 ¿Cómo se puede comprobar el nivel lógico en el Puerto 1.7? ¿Cómo se establece el nivel lógico alto en el pin de puerto P5.2? CMC 5-1 Bloque de ensayos 1...
Programación C de microcontroladores (C515C) CMC 5 CMC 5-2 Bloque de ensayos 2 Utilización de interrupciones, interrupción externa, interrupción por Timer, generación de PWM Contar y visualizar accionamientos de teclas con interrupción externa MCLS - modular PSD2 PSD1 RESET PSD1-FLASH...
Página 55
Programación C de microcontroladores (C515C) CMC 5 2. Compilar una rutina de servicio de interrupción y tratar la interrupción con el software Las rutinas de servicios de interrupción poseen, para el Compilador SDCC empleado, la siguiente estructura: void ex3_isr (void) interrupt IEX3_VECTOR using 1 …...
Programación C de microcontroladores (C515C) CMC 5 Ejercicio de programación: • ¡Abra un proyecto nuevo! • ¡Configure la interrupción externa3 ( manual de instrucciones para el módulo FLASH PSD1)! • ¡Cuente, en la rutina de servicio de interrupción ex3_isr, los accionamientos de la tecla 1 de la UNIDAD DE TECLAS! ¡Visualice el número de accionamientos de tecla como valor...
Página 57
Programación C de microcontroladores (C515C) CMC 5 // Variables globales -------------------------------------------- // Prototipos de funciones ------------------------------------------ void ex3_isr (void) interrupt IEX3_VECTOR using 1; void init(void); // Programa principal ------------------------------------------------ void main(void) // end main // ISR Interrupción 3 externa -------------------------------------...
Programación C de microcontroladores (C515C) CMC 5 Emisión de sonido mediante interrupciones cíclicas del Timer2 como temporizador MCLS - modular PSD2 PSD1 RESET SO4000-3G SPEAKER - UNIT PSD1-FLASH RESET INFINEON PSD1 C515C ANGND RESET UREF SO4000-1G (RxD) (TxD) 8 - BIT ADAPTER - UNIT...
Página 59
Programación C de microcontroladores (C515C) CMC 5 INIC. Timer 2 Resetear overflow-flag Precargar reg. contad. Ajustar registro de recarga Autorecarga Timer2, reloj 1/6 Activar interrupción Timer2 Inicio modo temporizador Activar todas las interrupc. Fin de función • ¡Emita la frecuencia generada por medio del pin de puerto P1.7 utilizando la rutina de servicio de interrupción del Timer2 Overflow como señal en la unidad de altavoces!
Página 60
Programación C de microcontroladores (C515C) CMC 5 Ejemplo de solución: /****************************************************************/ Título: cmc5-22: Emisión de sonido con Timer2 Overflow Interrupt autoreload (1kHz) Autor: ACMC/hpo Fecha: 06/04 Software: SDCC Hardware: Flash PSD1 Unidad de altavoces Uin -> P1.7 /****************************************************************/ #define MICROCONTROLLER_SAB80515A #include <mcs51reg.h>...
Programación C de microcontroladores (C515C) CMC 5 Regulación de la iluminación de fondo de la LCD mediante generación de PWM MCLS - modular PSD2 PSD1 -on- -on- RESET PSD1-FLASH I2C LCD - UNIT SO4000-3M RESET INFINEON PSD1 C515C ANGND KEY - UNIT...
Página 62
Programación C de microcontroladores (C515C) CMC 5 Nota: El valor para el evento de comparación tiene una anchura de 16 bits. Está dividido entre los dos registros de 8 bits CCH2 (parte alta) y CCL2 (parte baja). Ambos registros solamente se pueden inicializar por separado con valores.
Página 63
Programación C de microcontroladores (C515C) CMC 5 void init(void) void ex3_isr (void) / void ex4_isr (void) Precargar reg. conteo Timer2 (2kHz) Contador +/- 20 Ajustar registro de recarga Timer2 (2kHz) Limitar contador Cargar valor compar. Timer2 Parte baja del contador a CCL2 Recarga auto.
Página 64
Programación C de microcontroladores (C515C) CMC 5 Ejemplo de solución: /******************************************************************/ Título: cmc5-23: PWM para regular LED HG de LCD Autor: ACMC/hpo Fecha: 07/04 Software: SDCC Hardware: Flash PSD1 Note: UNIDAD LCD I2C BL -> Puerto1.2 UNIDAD TECLAS Tecla 1 -> P1.0 (Interrup3 ext.) Tecla 2 ->...
Página 65
Programación C de microcontroladores (C515C) CMC 5 CMC 5-2 Bloque de ensayos 2...
Programación C de microcontroladores (C515C) CMC 5 Medición de la frecuencia con Timer0 como contador, Timer2 como base de tiempo y la unidad DA para generar una frecuencia fijada MCLS - modular DA-Unit SO4000-3L PSD2 PSD1 RESET B AGND PSD1-FLASH...
Página 67
Programación C de microcontroladores (C515C) CMC 5 Ejercicios de programación: • ¡Abra un proyecto nuevo! • ¡Genere en el bucle sinfín del programa principal una frecuencia triangular mediante la función void impuls_out(void) y la unidad DA! void main(void) Contador auxiliar = 0;...
Página 68
Programación C de microcontroladores (C515C) CMC 5 • ¡Realice dentro de la rutina de servicio de interrupción del Timer2 un tiempo de ciclo de 1s! ¡Utilice una sentencia de control apropiada! void T2_isr (void) Resetear petición de interrupción Contador auxiliar + 1 ¿Cont.
Página 69
Programación C de microcontroladores (C515C) CMC 5 Ejemplo de solución: /********************************************************************/ Título: cmc5-24 Medición de frecuencia con UDA como entrada */ Autor: ACMC/hpo Fecha: 06/04 Software: SDCC Hardware: Flash PSD1 Nota: UNIDAD INDICADORA 1 Puerto5 -> Puerto de datos (segmentos a - h) Puerto 4.0...
Página 70
Programación C de microcontroladores (C515C) CMC 5 // Timer 2 ISR -------------------------------------------------- CMC 5-2 Bloque de ensayos 2...
Programación C de microcontroladores (C515C) CMC 5 Preguntas de control para el bloque de ensayos CMC 5-2 ¿Cuál es el propósito de la declaración de prototipos de funciones? ¿Qué registros de funciones especiales se deben inicializar para la utilización de la interrupción externa3? ¿Por qué, al pulsar una tecla dentro de una operación de interrupción, se debe...
Página 72
Programación C de microcontroladores (C515C) CMC 5 ¿Qué se entiende por Casting en la programación C? ¿Cómo se puede generar un tiempo de ciclo de 1 segundo utilizando el Timer 2 en modo de desbordamiento? CMC 5-2 Bloque de ensayos 2...
Programación C de microcontroladores (C515C) CMC 5 CMC 5-3 Bloque de ensayos 3 Bus I²C, control de la LCD, utilización del ADC (convertidor AD) Principio de funcionamiento del bus I²C El bus I²C (Inter Integrated Circuit Bus) fue desarrollado por Philips para la conexión en serie de circuitos integrados en una placa o en un aparato.
Página 74
Programación C de microcontroladores (C515C) CMC 5 Figura 302: Secuencia de inicio y direccionamiento de esclavo Con el siguiente reloj en la línea SCL del maestro en el sistema I²C se inicia el intercambio de datos, byte a byte, según la dirección de transmisión establecida en el byte de dirección.
Página 75
Programación C de microcontroladores (C515C) CMC 5 1º Enviar secuencia de inicio de I²C 2º Enviar dir. de esclavo 3º Recibir byte de 4º Byte de datos datos 1 del esclavo 2 del esclavo 5. Enviar secuencia de parada de I²C...
Programación C de microcontroladores (C515C) CMC 5 Visualización de caracteres en la indicadora LCD de I²C MCLS - modular PSD2 PSD1 -on- -on- RESET PSD1-FLASH I2C LCD - UNIT SO4000-3M RESET INFINEON PSD1 C515C ANGND UREF RESET SO4000-1G (TxD) (RxD)
Página 77
Programación C de microcontroladores (C515C) CMC 5 Exe- Instruction cute Time (max.) no Operation Clear Display Clears entire display and sets DDRAM 165ms address 0 in address counter Return Home Sets DDRAM address 0 in counter. Also 165ms returns shifted display to original position.
Página 78
Programación C de microcontroladores (C515C) CMC 5 Figura 306: Tabla interna de caracteres de la LCD de I²C CMC 5-3 Bloque de ensayos 3...
Página 79
Programación C de microcontroladores (C515C) CMC 5 Para la visualización de caracteres ASCII y especiales se debe observar la siguiente secuencia: Inicio TWI Direccionar LCD Preparar LCD para recepción de datos de caracteres (enviar secuencia de control 0x40) Observar tiempo de procesamiento secuencia control Enviar caracteres ASCII con función IIC_SEND(...);...
Programación C de microcontroladores (C515C) CMC 5 Ejercicios de programación: • ¡Abra un nuevo proyecto! • ¡Copie los archivos de encabezamiento iic.h y lcd.h al directorio de proyecto! • ¡Incluya los archivos de encabezamiento iic.h y lcd.h en el archivo fuente principal! •...
Programación C de microcontroladores (C515C) CMC 5 Visualización de cadenas de caracteres en la LCD MCLS - modular PSD2 PSD1 -on- -on- RESET PSD1-FLASH I2C LCD - UNIT SO4000-3M RESET INFINEON PSD1 C515C ANGND RESET UREF SO4000-1G (TxD) (RxD) 8 - BIT ADAPTER - UNIT...
Página 82
Programación C de microcontroladores (C515C) CMC 5 La función LCD_SENDSTRING() puede ser precedida de una llamada a la función LCD_gotoXY() para el posicionamiento de la cadena de caracteres terminada en cero en la LCD. Ejercicios de programación: • ¡Estudie el texto fuente de la función LCD_SENDSTRING(unsigned char *ptr_char);! •...
Programación C de microcontroladores (C515C) CMC 5 Visualización de un texto progresivo en la LCD MCLS - modular PSD2 PSD1 -on- -on- RESET PSD1-FLASH I2C LCD - UNIT SO4000-3M RESET INFINEON PSD1 C515C ANGND UREF RESET SO4000-1G (TxD) (RxD) 8 - BIT ADAPTER - UNIT...
Página 84
Programación C de microcontroladores (C515C) CMC 5 Tras las inicializaciones necesarias para la perifería, hay que implementar en el programa principal la siguiente secuencia de programa: void main(void) Inicializar offset (contador auxiliar) con 0 Bucle sinfín Inicializar puntero (con posición0 de la cadena + offset) Posicionar cursor de LCD al principio de la línea LCD deseada...
Página 85
Programación C de microcontroladores (C515C) CMC 5 Ejemplo de solución: /******************************************************************/ cmc5-33: Programa para la visualización de una cadena de texto progresiva en LCD de I2C Autor: ACMC/hpo Fecha: 07/04 Software: SDCC Hardware: Flash PSD1 Unidad LCD de I2C -> P5.2 SCL ->...
Página 86
Programación C de microcontroladores (C515C) CMC 5 CMC 5-3 Bloque de ensayos 3...
Programación C de microcontroladores (C515C) CMC 5 Figura 311: Registro de resultados del ADC Puesto que los registros de resultados del ADC solamente pueden leerse uno a uno, resulta conveniente la utilización de operaciones de manipulación de bits para guardar el resultado completo en una variable del tipo de datos unsigned int para su posterior utilización.
Página 89
Programación C de microcontroladores (C515C) CMC 5 Ejemplo de solución: /********************************************************************/ CMC5-34: Conversión AD continua de una tensión análoga Autor: ACMC/hpo Fecha: 07/04 Software: SDCC Hardware: Flash PSD1 Unidad LCD I2C SCL -> P5.1 SDA -> P5.0 UNIDAD DE TENSIÓN V0..5P...
Página 90
Programación C de microcontroladores (C515C) CMC 5 IIC_SEND(0xb0|bcd1); IIC_STOP(); ADin = ((ADin*49)/10); // Normalización de la variable // resultado // 5Volt / 1024 = 4,88mV => 49/10 // Convertir variable resultado en // dígitos BCD // Visualizar en línea 2 IIC_START();...
Programación C de microcontroladores (C515C) CMC 5 Medición y visualización cíclica de una tensión análoga por medio del ADC mediante interrupción de temporizador MCLS - modular PSD2 PSD1 -on- -on- RESET PSD1-FLASH I2C LCD - UNIT SO4000-3M RESET INFINEON PSD1...
Página 92
Programación C de microcontroladores (C515C) CMC 5 • ¡Inicialice el Timer 2 como temporizador para 800 milisegundos ( manual de instrucciones del módulo FLASH PSD1)! • ¡Inicialice el ADC en modo de conversión sencilla! ¡Utilice el manual de instrucciones del módulo FLASH PSD1 ( CMC5-3.4)!
Página 93
Programación C de microcontroladores (C515C) CMC 5 CMC 5-3 Bloque de ensayos 3...
Página 94
Programación C de microcontroladores (C515C) CMC 5 // INIC de MC ------------------------------------------------------- void init(void) IIC_INIT(); // Inic I2C LCD_INIT(); // Inic LCD = 0; // Bloquear todas las interrupciones // Timer 2 INIT TF2 = 0; // Resetear flag de desbordamiento = 0x3c;...
Programación C de microcontroladores (C515C) CMC 5 Preguntas de control del bloque de ensayos CMC5-3 ¡Indique algunas características esenciales del bus I²C! ¿Qué dirección de bus I²C tiene la indicadora LCD de I²C? ¿Qué secuencia es necesaria par visualizar un carácter ASCII en la indicadora LCD de I²C?
Página 96
¿Cómo se puede declarar una cadena de caracteres terminada en cero en la memoria de códigos? ¿Con qué resolución trabaja el convertidor análogo-digital del C515C? ¿Cómo se puede realizar la conversión o normalización del valor medido de 10bits en un valor de tensión en síntaxis de C?
Programación C de microcontroladores (C515C) CMC 5 CMC 5-4 Bloque de ensayos 4 Aplicación del sensor de temperatura I²C LM75, utilización de campos de datos Visualización de valores de temperatura del LM75 MCLS - modular PSD2 PSD1 -on- -on- RESET...
Página 98
Programación C de microcontroladores (C515C) CMC 5 Figura 402: Transmisión de datos del LM75 al módulo FLASH PSD1 Puesto que los datos del LM75 se reciben en formato de complemento a dos, deben convertirse en un formato compatible con la indicadora LCD. El valor del byte de datos puede utilizarse directamente para una temperatura completa positiva.
Página 99
Programación C de microcontroladores (C515C) CMC 5 Ejemplo de solución: /********************************************************************/ /* Título: cmc5-41: Visualizar temperatura del LM75 en LCD de I2C */ /* Autor: ACMC/hpo /* Fecha: 07/04 /* Software: SDCC /* Hardware: Flash PSD1 (C515) Unidad LCD I2C Unidad RTC-Temp.
Programación C de microcontroladores (C515C) CMC 5 Guardar varios valores de temperatura en un campo de datos, determinar valor máximo y valor mínimo MCLS - modular PSD2 PSD1 -on- -on- RESET PSD1-FLASH I2C LCD - UNIT SO4000-3M RESET INFINEON PSD1...
Página 101
Programación C de microcontroladores (C515C) CMC 5 Para la determinación de los valores de temperatura mínimo y máximo se deberán emplear sentencias de control, comparaciones y asignaciones apropiadas. Ejemplo de programa para la determinación del valor máximo de la temperatura: unsigned char temperature,tmin;...
Página 102
Programación C de microcontroladores (C515C) CMC 5 Ejemplo de solución: /*********************************************************/ /* cmc5-42: Programa para visualizar la temperatura de LM75 en LCD de I2C /* (C) HPO 06/2004 /* Software: SDCC Versión 2.3.5 (Sep 29 2003) Debug51w for MCLS-modular PSD1-Unit...
Página 103
Programación C de microcontroladores (C515C) CMC 5 // Funciones ------------------------------------------------------- void MiddleValue(void) CMC 5-4 Bloque de ensayos 4...
Página 104
Programación C de microcontroladores (C515C) CMC 5 CMC 5-4 Bloque de ensayos 4...
Programación C de microcontroladores (C515C) CMC 5 Inicialización de RTC DS1307, lectura y visualización de parámetros de tiempo MCLS - modular PSD2 PSD1 -on- -on- RESET PSD1-FLASH I2C LCD - UNIT SO4000-3M RESET INFINEON PSD1 C515C ANGND RESET UREF SO4000-3P...
Página 106
Programación C de microcontroladores (C515C) CMC 5 Figura 405: Estructura interna del DS1307 El reloj puede configurarse con el formato de 12 ó de 24 horas. Las transmisiones de datos desde y hacia el chip se realizan mediante protocolo I²C. El DS1307 trabaja como esclavo en el sistema I²C.
Página 107
Programación C de microcontroladores (C515C) CMC 5 • ¡Utilice el siguiente diagrama de flujo para la compilación del programa!: void main(void) Bucle sinfín Leer datos de RTC Visualizar datos en LCD Retardo de tiempo • ¡Lea mediante las funciones disponibles del archivo de encabezamiento rtc.h la información de RTC DS1307 y asigne los datos a los objetos de estructura declarados en...
Página 108
Programación C de microcontroladores (C515C) CMC 5 init(); // Inicialización while(1) // Bucle sinfín data_in(); // Leer datos de RTC data_out(); // Visualizar datos en LCD delay(50000); // Retardo de tiempo // end while // end main // INIC de MC -------------------------------------------------------- void init(void) IIC_INIT();...
Programación C de microcontroladores (C515C) CMC 5 Preguntas de control, bloque de ensayos CMC 5-4 ¿Qué formato de datos tienen los valores de temperatura medidos del LM75? ¿Cómo se puede determinar, en síntaxis C, el valor medio aritmético partiendo de n valores medidos? ¿Cómo se realiza, en síntaxis C, la declaración de un campo de datos con 10...
Página 110
Programación C de microcontroladores (C515C) CMC 5 ¿Qué función tiene el operador de punto en las estructuras? ¿En qué formato está guardada la información de los segundos dentro de la RTC DS1307? CMC 5-4 Bloque de ensayos 4...
Programación C de microcontroladores (C515C) CMC 5 CMC 5-5 Bloque de ensayos 5 Realización de una aplicación compleja (tarea de proyecto) MCLS - modular PSD2 PSD1 RESET I2C Smart - Card - UNIT PSD1-FLASH SO4000-3N RESET INFINEON PSD1 C515C ANGND...
Página 112
Programación C de microcontroladores (C515C) CMC 5 Indicadora Datos Sensor temperat. LCD I2C Tarjeta chip I2C LM75 I2C Bus I2C P1_0 FLASH PSD1 T2 Estado=1 ISR Interrup. Timer2 Programa externa3 ISR 5s principal Start/Stop T2 Estado=0 Figura 502: Estructura básica del ensayo complejo Descripción del programa:...
Página 113
Programación C de microcontroladores (C515C) CMC 5 La interrupción externa3 puede activarse mediante un flanco descendente o ascendente en el pin de puerto P1.0. El flanco que activa la rutina de servicio de interrupción puede configurarse mediante el bit de control I3FR en el registro de funciones especiales T2CON.
Página 114
Programación C de microcontroladores (C515C) CMC 5 El siguiente gráfico representa la rutina de servicio de interrupción: void T2_isr (void) Contador aux + 1 ¿Cont. aux. = 100 (*50ms = 5s)? sí Cont. aux. = 0 Poner bit de estado Fin de función...
Página 115
Programación C de microcontroladores (C515C) CMC 5 Nota acerca del formato de datos de los valores medidos para guardarlos en la tarjeta chip: Para un posterior procesamiento con un programa de hojas de cálculo en un PC (p. ej. MS- Excel) es conveniente guardar los valores medidos en la tarjeta chip en formato BCD comprimido.
Página 117
Programación C de microcontroladores (C515C) CMC 5 // Timer 2 ISR -------------------------------------------------- // ISR interrupción externa3 ------------------------------------- CMC 5-5 Bloque de ensayos 5...
Página 118
Programación C de microcontroladores (C515C) CMC 5 // Inicializaciones de MC ----------------------------------------- // Función para cargar la tarjeta chip con valores de temperatura -- CMC 5-5 Bloque de ensayos 5...
Página 119
Programación C de microcontroladores (C515C) CMC 5 CMC 5-5 Bloque de ensayos 5...
Programación C de microcontroladores (C515C) CMC 5 Preguntas de control, bloque de ensayos CMC 5-5 ¿Cuántos valores medidos de temperatura de 8 bits se pueden guardar en la tarjeta chip empleada? ¿Por qué es necesario conmutar el flanco que activa la interrupción de la interrupción externa3?
Página 121
Programación C de microcontroladores (C515C) CMC 5 Nos gusta trabajar con y para usted. Usted es nuestro mejor colaborador. En base a las experiencias que haya tenido con nuestros equipos, puede contribuir a mejorarlos dándonos sugerencias o avisándonos de cualquier error encontrado. Toda observación que nos haga será tratada con importancia y tomada en cuenta a la hora de actualizar nuestras guías de ejercicios.