PROGRAMACIÓN EN C para uc MCS-51

Documentos relacionados
5 - Lenguaje Ensamblador

TIPOS DE DATOS BASICOS EN LENGUAJE C

Tema 3 Constantes, Variables y Tipos

UNIDAD I CONCEPTOS GENERALES. Conceptos Generales Microprocesadores Otoño 2011

XDR: Estándar de Representación Externa de Datos

Laboratorio de Arquitectura de Redes. Datos en lenguaje C

Tipos de datos y Operadores Básicos

Programación estructurada (Introducción a lenguaje C)

Elementos de un programa en C

Datos y tipos de datos

1. Presentación del lenguaje C Creado en 1972 por D. Ritchie Lenguaje de propósito general Portátil o transportable (generalmente) Inicialmente de niv

Tema 5.1: Presentación de datos en pantalla

PROGRAMACIÓN EN LENGUAJE C VARIABLES Y CONSTANTES

Tipos de variables. Lenguaje C. Departamento de Electrónica. Tipos de datos, variables y constantes. Fundación San Valero

IDENTIDAD EN PRECISIÓN VARIABLE

Represent. Información. Caracteres Alfanuméricos

Programación En Lenguaje C

Universidad Rey Juan Carlos HOJA DE PROBLEMAS TEMA 3: REPRESENTACIÓN DE LA INFORMACIÓN

El lenguaje C. if (a>3) { printf("hola"); // bloque printf("%d",a); // de getch(); //código } Partes de un programa en C.

EL SISTEMA DE INTERRUPCIONES

PROGRAMACION ESTRUCTURADA: Tema 1. El lenguaje de programación C

Curso de Programación Avanzada en C

Lección 2 Introducción al lenguaje C

Definición de Memoria

Estructuras de Datos Declaraciones Tipos de Datos

TIPOS DE DATOS BASICOS EN LENGUAJE C

3. Tipos primitivos de dato

CAPITULO 2: VARIABLES Y CONSTANTES

Tema 5. Presentación de datos por pantalla

INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA INGENIERIA EN COMUNICACIONES Y ELECTRÓNICA ACADEMIA DE COMPUTACIÓN

Programación estructurada (Tipos, operadores y expresiones)

Relación de Problemas I

GESTION DE MEMORIA EN LOS MICROCONTROLADORES DE LA FAMILIA MCS-51

Informática PRÀCTICA 3 Curs Práctica Nº 3: Tipos de datos simples. Constantes y variables. Operadores aritméticos. Formato de salida.

Qué es una computadora?

DISPOSICION CDD-T DEPARTAMENTO DE TECNOLOGÍA. CARRERA: Licenciatura en Sistemas de Información. PROGRAMA DE LA ASIGNATURA Organización de Computadoras

Fundamentos de la programación

Expresiones Lógicas y Operadores sobre Bits

Representación de la información Ejercicios resueltos

Introducción. Tema 1. Fundamentos de informática. Universidad de Oviedo. Fundamentos de Informática. Departamento de Informática Universidad de Oviedo

Introducción al lenguaje C

Unidad II Fundamentos de C++ M.C. Juan Carlos Olivares Rojas

Representación de la información

Unidad IV: Programación de microcontroladores

Unidad I Tipos de Datos en C

Datos y tipos de datos

Unidad 3. Lenguaje estructurado

Programación Digital I

CUESTIONARIO. Instituto Tecnológico de Iztapalapa Ingeniería en Sistemas computacionales. LENGUAJE ENSAMBLADOR Temas: 1.3 y 1.4

Variables y tipos de datos

TEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL.

INTRODUCCIÓN. Comunicación Serial.

VARIABLES TIPOS FUNDAMENTALES

XDR (External Data Representation) Tipos y codificación. Universidad de Oviedo / Dpto. de Informática

Introducción al análisis numérico

MICROPROCESADORES II LENGUAJE C EN LOS MICROCONTROLADORES PIC

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

vii Contenido CONTENIDO

Programación de los Microcontroladores 8052/8051 (I)

Tema 05: Elementos de un programa en C

LENGUAJES DE PROGRAMACION I. Propósito del curso :

1. Lenguajes de programación. 2. Compilador. 3. Mi primer programa. EDM. Introducción al lenguaje C _ 1

Programación I Teoría I.

Práctica 0: Repaso de C básico

Arquitectura y mapa de memoria del 80C167. Cesáreo Fernández Martínez Álvaro Sánchez Miralles

Informática PRÀCTICA 9 Curs Práctica Nº 9: Rango y precisión de representación de números en el ordenador.

Representación de números en binario

PROGRAMACIÓN EN ASSEMBLER SIMULADOR MSX88

4.4 OPERACIONES BÁSICAS DE ENTRADA-SALIDA... 16

UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INFORMÁTICA GRADO EN INGENIERÍA INFORMÁTICA. ESTRUCTURA DE COMPUTADORES

Constantes. Las constantes no cambian durante la ejecucion de un programa en C++, en C++ existen 4 tipos de constantes:

Arquitectura de Computadores II Clase #3

abril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

MICROCONTROLADORES. 1. El PIC 16F84A es un microcontrolador de: a) 16 bits b) 8 bits c) 4 bits d) 32 bits e) 64 bits

2. SISTEMAS Y CÓDIGOS DE NUMERACIÓN

UNIDAD 2 Descripción de un programa

Los tipos de datos primitivos

REPRESENTACIÓN INTERNA DE LA INFORMACIÓN

Universidad simón Bolívar Departamento de Electrónica y Circuitos / Sección de Sistemas Digitales EC2721 Arquitectura del Computador I

Guía rápida para gestionar el puerto paralelo del PC

Manejo de Entrada-Salida. Arquitectura de Computadoras

Transcripción:

PROGRAMACIÓN EN C para uc MCS-5

Resumen de contenidos - Objetivos 2 - Justificación 3 - Compiladores cruzados 4 - Compiladores Keil uvision2 5 - Uso del entorno de programación 6 - Ejemplos 7 - Bibliografía PROGRAMACIÓN EN C 2

- Objetivos PROGRAMACIÓN EN C 3

- Objetivos Conocer la posibilidad de programación de los microcontroladores en lenguajes de alto nivel Programar sistemas empotrados en C Analizar las extensiones de ANSI C disponibles para la familia MCS5 Ejercitarse en el uso de la herramientas de programación seleccionada PROGRAMACIÓN EN C 4

2 - Justificación PROGRAMACIÓN EN C 5

2 - Justificación Los microprocesadores y microcontroladores ejecutan secuencias de instrucciones máquina particulares El lenguaje ensamblador es una traducción inmediata de los códigos máquina, por lo que son muy dependientes del procesador (código no exportable) Los lenguajes de alto nivel: Son más independientes del procesador Facilitan la escritura de programas al estar más cercanos a un razonamiento lógico-matemático PROGRAMACIÓN EN C 6

3 - Compiladores cruzados PROGRAMACIÓN EN C 7

3 - Compiladores cruzados Hay compiladores para muchos lenguajes de programación de alto nivel (Pascal, C, Ada, Forth, etc.) que generan código para microcontrolador Son normalmente COMPILADORES CRUZADOS, donde el equipo de desarrollo tiene un procesador diferente (por ejemplo un PC con Pentium) al equipo destino (por ejemplo un freno ABS con T89C5CC0) sfr P0=0x80; sfr P=0x90; void main(void){ while() P=~P0; } Equipo de desarrollo Equipo destino Sin duda el lenguaje más extendido es C, por la disponibilidad de compiladores, depuradores, librerías, ejemplos de aplicación, etc. C genera código máquina eficiente PROGRAMACIÓN EN C 8

4 Entorno Compilador uvision2 de Keil PROGRAMACIÓN EN C 9

4 - Compilador µvision2 Hay versiones gratuitas de evaluación (con capacidades recortadas) de este compilador Otro compiladores C con versiones de evaluación gratis IAR http://www.iar.com Franklin http://www.fsinc.com Compilador C gratuito (GNU) SDCC sdcc.sourceforge.net PROGRAMACIÓN EN C 0

4 - Compilador µvision2 Características generales 00 % compatible con ANSI-C Librerías estándar C disponibles para sistemas empotrados Aritmética en punto flotante compatible con IEEE Extensiones para características MCS5 Generación de código Optimización seleccionable entre tamaño o velocidad Compatible con depuradores de alto nivel (C-SPY,...) Generación de código PROMABLE en diferentes formatos PROGRAMACIÓN EN C

Gestión de memoria Diferentes modelos de memoria (zonas donde se crean las variables) Existen tres modelos: 4 - Compilador µvision2 SMALL: Todas las variables se almacenan en la memoria interna. El acceso a las variables es muy eficiente. Existe limitación en cuanto al tamaño de la memoria interna. Es el mejor modelo. COMPACT: Las variables se almacenan en la memoria externa. Puede almacenar un máximo de 256 bytes de variables. LARGE: Todas las variables se almacenan en memoria externa sin limitación es el menos efectivo de los tres. PROGRAMACIÓN EN C 2

Gestión de memoria 4 - Compilador µvision2 Localización de variables flexible DATA: zona direccionamiento directo IDATA: zona direccionamiento indirecto XDATA: zona memoria de datos externa CODE: zona de memoria de programa PROGRAMACIÓN EN C 3

4 - Compilador µvision2 Gestión de memoria El modelo de memoria elegido influye drásticamente en la velocidad y tamaño del código Por ejemplo, suponiendo la instrucción en C int i=520; al compilarlo, en función del modelo de memoria, quedaría: Código DATA IDATA XDATA MOV R0,#i MOV @R0,#2 INC R0 MOV @R0,#8 MOV i,#2 MOV i+,#8 Byte/Ciclos maq. 6/4 7/4 0/9 Rango direcciones 0-7F 0-FF 0-FFFF MOV DPTR,#i MOV A,#2 MOVX @DPTR,A INC DPTR MOV A,#8 MOVX @DPTR,A PROGRAMACIÓN EN C 4

Representación de los datos Tipos estándar Tipo de dato signed char unsigned char signed int unsigned int signed short unsigned short signed long unsigned long float double 4 - Compilador µvision2 Bytes ocupados 2 2 4 Rango -28..27 0..255-32768..32767 0..65535-32768..32767 0..65535-247483648..247483647 0..4294967295 Notas -2 5..2 5-0..2 6 - como int -2 3..2 3-0..2 32-4?.8e -38..?3.39e +38 como float Extensiones para la familia MCS5 Tipo de dato Bytes ocupados Rango Notas bit bit 0.. área DATA direccionable por bit sbit bit 0.. área SFR sfr 0..255 área SFR PROGRAMACIÓN EN C 5

4 - Compilador µvision2 Tipo unsigned char Permite declarar un entero positivo en el rango 0...255 Ocupa en memoria byte Como el microcontrolador es de 8 bits es el tipo de dato más eficiente en cuanto a velocidad y tamaño del código Declaración unsigned char nombre_variable; Ejemplo unsigned char a,b; b=35; a=0x0f; a=a*b; Tipo signed char Permite declarar un entero en el rango -28..27 Ocupa en memoria byte Declaración signed char nombre_variable; PROGRAMACIÓN EN C 6

4 - Compilador µvision2 Tipo int, signed int, short, short int Permite declarar un entero en el rango -32768...32767 Ocupa en memoria 2 bytes Declaración int nombre_variable; Ejemplo int a,b; b=35; a=0x0f; a=a*b; Tipo unsigned int, unsigned short, unsigned short int Permite declarar un entero positivo en el rango 0..65535 Ocupa en memoria 2 bytes Declaración unsigned int nombre_variable; PROGRAMACIÓN EN C 7

4 - Compilador µvision2 Tipo long, long int Permite declarar un entero en el rango -247483648..247483647 Ocupa en memoria 4 bytes Declaración long nombre_variable; Ejemplo long a,b; b=35; a=0x0f; a=a*b; Tipo unsigned long, unsigned long int Permite declarar un entero positivo en el rango 0..4294967295 Ocupa en memoria 4 bytes Declaración unsigned long nombre_variable; PROGRAMACIÓN EN C 8

4 - Compilador µvision2 Tipo float, double, long double Permite declarar un real en el rango?.8e-38..? 3.39e+38 Ocupa en memoria 4 bytes Usa el formato IEEE 754 de simple precisión (precisión de 7 dígitos decimales) 3 30 23 22 0 S EXPONENTE MANTISA Las operaciones con reales son lentas y ocupan mucha memoria por lo que se debe intentar evitarlas Declaración float nombre_variable; Ejemplo float a,b; b=35.5; a=0.07; a=a*b; Valor=(-) Signo 2 (Exponente-27).Mantisa PROGRAMACIÓN EN C 9

Tipo sfr Permite declarar un entero positivo en el rango 0..255 Corresponde a una variable en la zona de registros especiales (SFR) Se usa igual que un unsigned char Declaración sfr nombre_variable =dirección de memoria; Ejemplo sfr P0=0x80; sfr P=0x90; void main(void){ while() P=~P0; } 4 - Compilador µvision2 PROGRAMACIÓN EN C 20

4 - Compilador µvision2 Tipo bit Permite declarar un entero positivo en el rango 0.. La variable se crea en la zona direccionable bit a bit de memoria directa (20h a 2Fh) Declaración bit nombre_variable; Tipo sbit Permite declara posiciones direccionables bit a bit en la zona SFR Dirección terminada en 0h u 8h (80h, 88h, 90h...) Declaración sbit nombre_variable =dirección de memoria; Ejemplo bit lleno; sbit valvula=0x90^0; /* bit 0 puerto digital P, P.0 */ lleno = ; if (lleno==) valvula = ; else valvula = 0; PROGRAMACIÓN EN C 2

4 - Compilador µvision2 Actividad Definir en lenguaje C las siguientes variables: De la zona SFR los registros: PSW, IEN, TMOD, TH, P4 De la zona SFR los bits: 80h bit 7, 88h bit 4, 90h bit 7 Asignar el valor cero a: IEN, TH, P4, 88h bit 4 (Nota: En el caso de los bits se le asignará cualquier nombre) PROGRAMACIÓN EN C 22

4 - Compilador µvision2 Funciones de interrupción Permiten definir fácilmente las rutinas de servicio de interrupción Declaración: void nombre_funcion (void) interrupt N { } PROGRAMACIÓN EN C 23

4 - Compilador µvision2 Funciones de interrupción Permiten definir fácilmente las rutinas de servicio de interrupción Ejemplo: Instalación de una rutina de interrupción que cada vez que desborde el Timer0 (vector 0x000b) incremente una variable tiempo. long tiempo=0; void incrementar_tiempo(void) interrupt { tiempo++; } PROGRAMACIÓN EN C 24

5 - Uso del entorno de programación PROGRAMACIÓN EN C 25

5 - Uso del entorno de programación Se deberá realizar la práctica 3 para tener un contacto con el entorno de programación. PROGRAMACIÓN EN C 26

6 - Ejemplos PROGRAMACIÓN EN C 27

6 - Ejemplos: puertos PROGRAMA EJEMPLO sfr P=0x90; sfr P2=0xA0; void main(void) { while () P2=P+5; } Actividad: Editar, compilar y generar el fichero hexadecimal. Ver el ensamblador generado. PROGRAMACIÓN EN C 28

6 - Ejemplos: puertos sfr P=0x90; unsigned char i; void main(void) { i=0; while () { P=i; i=(i+)%0; } } Actividad: Editar, compilar y generar el fichero hexadecimal. Ver el ensamblador generado. Repetir lo hecho cambiando unsigned char por int. PROGRAMACIÓN EN C 29

6 - Ejemplos: puertos UN PRIMER PROGRAMA EJEMPLO sfr P=0x90; void main(void){ P=0xaa; /* Enviar al Puerto P el Dato: 0000 */ while();} /* Espera Indefinida */ Actividad: Editar, compilar y generar el fichero hexadecimal. Ver el ensamblador generado. PROGRAMACIÓN EN C 30

6 - Ejemplos: puertos Ejemplo de Decodificador de 3 Entradas a 8 Salidas Código P3.0..P3.2 Pulsadores del Entrenador Salida P.0..P.7 Diodos Luminiscentes del Entrenador Lógica sfr P=0x90; sfr P3=0xB0; void main(void){ Negativa-Negativa unsigned char contador,codigo,salida; while(){ codigo=((~p3)&0x07); for(salida=0x0,contador=0;contador<codigo;contador++) salida=salida<<; P=~salida;}} Ejemplo: P3.0 P3. P3.2 0 LSB MSB 0 2 3 4 5 6 7 0 P.0 P. P.2 P.3 P.4 P.5 P.6 P.7 PROGRAMACIÓN EN C 3

6 - Ejemplos: puertos sfr P=0x90; sfr P3=0xB0; void main(void){ unsigned char contador,codigo,salida; while(){ codigo=((~p3)&0x07); for(salida=0x0,contador=0;contador<codigo;contador++) salida=salida<<; P=~salida;}} Actividad: Realizar una traza de ejecución del programa suponiendo que el valor binario en P3 es: 0 00. PROGRAMACIÓN EN C 32

6 - Ejemplos: puertos Codificador de 8 Entradas a 3 Salidas (Código por Defecto = 0) sfr P=0x90; Entrada P3.0..P3.7 Pulsadores del Entrenador Código P.0..P.2 Diodos Luminiscentes del Entrenador Lógica Negativa-Negativa sfr P3=0xB0; void main(void){ unsigned char contador,entrada,codigo; while(){ entrada=~p3; for(codigo=0,contador=0;(!(entrada==)&&(contador<8));contador++, entrada>>) codigo++; P=~codigo;}} Ejemplo: P3.0 P3. P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 0 0 2 3 4 5 6 7 LSB MSB 0 P.0 P. P.2 PROGRAMACIÓN EN C 33

6 - Ejemplos: puertos sfr P=0x90; sfr P3=0xB0; void main(void){ unsigned char contador,entrada,codigo; while(){ entrada=~p3; for(codigo=0,contador=0;(!(entrada==)&&(contador<8));contador++, entrada>>) codigo++; P=~codigo;}} Actividad: Realizar una traza de ejecución del programa suponiendo que el valor binario en P3 es: 0. PROGRAMACIÓN EN C 34

7 - Bibliografía PROGRAMACIÓN EN C 35

7 - Bibliografía www.atmel.com Introducción a los Microcontroladores; Hardware, Software y Aplicaciones; 8x52, 8x5 José Adolfo González Vázquez McGraw-Hill The 805 family of microcontrollers Richard H. Barnett Prentice Hall, 995 http://www.disca.upv.es/aperles/web5 PROGRAMACIÓN EN C 36