Escolar Documentos
Profissional Documentos
Cultura Documentos
Resumen de contenidos
1 - Objetivos 2 - Justificacin 3 - Compiladores cruzados 4 - Compiladores Keil uVision2 5 - Uso del entorno de programacin 6 - Ejemplos 7 - Bibliografa
PROGRAMACIN EN C
1 - Objetivos
PROGRAMACIN EN C
1- Objetivos
Conocer la posibilidad de programacin de los microcontroladores en lenguajes de alto nivel Programar sistemas empotrados en C Analizar las extensiones de ANSI C disponibles para la familia MCS51 Ejercitarse en el uso de la herramientas de programacin seleccionada
PROGRAMACIN EN C
2 - Justificacin
PROGRAMACIN EN C
2 - Justificacin
Los microprocesadores y microcontroladores ejecutan secuencias de instrucciones mquina particulares
El lenguaje ensamblador es una traduccin inmediata de los cdigos mquina, por lo que son muy dependientes del procesador (cdigo no exportable)
PROGRAMACIN EN C
3 - Compiladores cruzados
PROGRAMACIN EN C
3 - Compiladores cruzados
Hay compiladores para muchos lenguajes de programacin de alto nivel (Pascal, C, Ada, Forth, etc.) que generan cdigo 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 T89C51CC01)
sfr P0=0x80; sfr P1=0x90; void main(void){ while(1) P1=~P0; }
Equipo de desarrollo Equipo destino
Sin duda el lenguaje ms extendido es C, por la disponibilidad de compiladores, depuradores, libreras, ejemplos de aplicacin, etc. C genera cdigo mquina eficiente
PROGRAMACIN EN C 8
PROGRAMACIN EN C
4 - Compilador Vision2
PROGRAMACIN EN C
10
4 - Compilador Vision2
Caractersticas generales
100 % compatible con ANSI-C Libreras estndar C disponibles para sistemas empotrados Aritmtica en punto flotante compatible con IEEE Extensiones para caractersticas MCS51
Generacin de cdigo
Optimizacin seleccionable entre tamao o velocidad Compatible con depuradores de alto nivel (C-SPY,...) Generacin de cdigo PROMABLE en diferentes formatos
PROGRAMACIN EN C
11
4 - Compilador Vision2
Gestin de memoria
Diferentes modelos de memoria (zonas donde se crean las variables) Existen tres modelos:
SMALL: Todas las variables se almacenan en la memoria interna. El acceso a las variables es muy eficiente. Existe limitacin en cuanto al tamao de la memoria interna. Es el mejor modelo. COMPACT: Las variables se almacenan en la memoria externa. Puede almacenar un mximo de 256 bytes de variables. LARGE: Todas las variables se almacenan en memoria externa sin limitacin es el menos efectivo de los tres.
PROGRAMACIN EN C
12
4 - Compilador Vision2
Gestin de memoria
Localizacin de variables flexible
DATA: zona direccionamiento directo IDATA: zona direccionamiento indirecto XDATA: zona memoria de datos externa CODE: zona de memoria de programa
PROGRAMACIN EN C
13
Cdigo
6/4 0-7F
7/4 0-FF
PROGRAMACIN EN C
14
PROGRAMACIN EN C
15
4 - Compilador Vision2
Tipo unsigned char
Permite declarar un entero positivo en el rango 0...255 Ocupa en memoria 1 byte Como el microcontrolador es de 8 bits es el tipo de dato ms eficiente en cuanto a velocidad y tamao del cdigo
4 - Compilador Vision2
Tipo int, signed int, short, short int
Permite declarar un entero en el rango -32768...32767 Ocupa en memoria 2 bytes
PROGRAMACIN EN C
17
4 - Compilador Vision2
Tipo long, long int
Permite declarar un entero en el rango -2147483648..2147483647 Ocupa en memoria 4 bytes
PROGRAMACIN EN C
18
4 - Compilador Vision2
Tipo float, double, long double
Permite declarar un real en el rango ? 1.18e-38.. ? 3.39e+38 Ocupa en memoria 4 bytes Usa el formato IEEE 754 de simple precisin (precisin de 7 dgitos decimales)
31 S 30 EXPONENTE 23 22 MANTISA 0
Valor=(-1)Signo2(Exponente-127)1.Mantisa
Las operaciones con reales son lentas y ocupan mucha memoria por lo que se debe intentar evitarlas
PROGRAMACIN EN C
19
4 - Compilador Vision2
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
PROGRAMACIN EN C
20
4 - Compilador Vision2
Tipo bit
Permite declarar un entero positivo en el rango 0..1 La variable se crea en la zona direccionable bit a bit de memoria directa (20h a 2Fh)
PROGRAMACIN EN C
22
PROGRAMACIN EN C
23
Ejemplo:
Instalacin de una rutina de interrupcin que cada vez que desborde el Timer0 (vector 0x000b) incremente una variable tiempo . long tiempo=0; void incrementar_tiempo(void) interrupt 1 { tiempo++; }
PROGRAMACIN EN C
24
PROGRAMACIN EN C
25
PROGRAMACIN EN C
26
6 - Ejemplos
PROGRAMACIN EN C
27
PROGRAMACIN EN C
28
6 - Ejemplos: puertos
sfr P1=0x90; unsigned char i; void main(void) { i=0; while (1) { P1=i; i=(i+1)%10; } }
Actividad: Editar, compilar y generar el fichero hexadecimal. Ver el ensamblador generado. Repetir lo hecho cambiando unsigned char por int.
PROGRAMACIN EN C 29
6 - Ejemplos: puertos
Ejemplo:
P3.0 1 P3.1 1 P3.2 0
LSB
sfr P1=0x90; MSB sfr P3=0xB0; void main(void){ unsigned char contador,codigo,salida; while(1){ codigo=((~P3)&0x07); for(salida=0x01,contador=0;contador<codigo;contador++) salida=salida<<1; P1=~salida;}}
PROGRAMACIN EN C
0 1 2 3 4 5 6 7
1 1 1 1 0 1 1 1
31
6 - Ejemplos: puertos
sfr P1=0x90; sfr P3=0xB0; void main(void){ unsigned char contador,codigo,salida; while(1){ codigo=((~P3)&0x07); for(salida=0x01,contador=0;contador<codigo;contador++) salida=salida<<1; P1=~salida;}}
Actividad: Realizar una traza de ejecucin del programa suponiendo que el valor binario en P3 es: 1101 1010.
PROGRAMACIN EN C 32
6 - Ejemplos: puertos
Codificador de 8 Entradas a 3 Salidas (Cdigo por Defecto = 0)
Entrada Cdigo Lgica P3.0..P3.7 Pulsadores del Entrenador P1.0..P1.2 Diodos Luminiscentes del Entrenador Negativa-Negativa Ejemplo:
P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 1 1 1 1 0 1 1 1
LSB sfr P1=0x90; P1.0 1 P1.1 sfr P3=0xB0; 0 P1.2 MSB void main(void){ unsigned char contador,entrada,codigo; while(1){ entrada=~P3; for(codigo=0,contador=0;(!(entrada==1)&&(contador<8));contador++, entrada>>1) codigo++; P1=~codigo;}}
PROGRAMACIN EN C 33
0 1 2 3 4 5 6 7
6 - Ejemplos: puertos
sfr P1=0x90; sfr P3=0xB0; void main(void){ unsigned char contador,entrada,codigo; while(1){ entrada=~P3; for(codigo=0,contador=0;(!(entrada==1)&&(contador<8));contador++, entrada>>1) codigo++; P1=~codigo;}}
Actividad: Realizar una traza de ejecucin del programa suponiendo que el valor binario en P3 es: 1111 1011.
PROGRAMACIN EN C 34
7 - Bibliografa
PROGRAMACIN EN C
35
7 - Bibliografa
www.atmel.com Introduccin a los Microcontroladores; Hardware, Software y Aplicaciones; 8x52, 8x51
Jos Adolfo Gonzlez Vzquez McGraw-Hill
http://www.disca.upv.es/aperles/web51
PROGRAMACIN EN C
36