PROGRAMACIÓN EN C para uc MCS-51

PROGRAMACIÓN EN C para uC MCS-51 Resumen de contenidos 1 - Objetivos 2 - Justificación 3 - Compiladores cruzados 4 - Compiladores Keil uVision2 5 -
Author:  Xavier Rojo Crespo

10 downloads 35 Views 1MB Size

Recommend Stories


Jabra MOTION UC Jabra MOTION UC+
Jabra MOTION UC Jabra MOTION UC+ Manual de usuario jabra.com/motionuc 2.1 KIT DE VIAJE Y CARGA (JABRA MOTION UC+ SOLAMENTE) 2.2 JABRA LINK 360 EN

OpenScape UC Application
OpenScape UC Application Una mejor forma de comunicarse ¿Cuán productivos son sus equipos virtuales? La realidad actual: una fuerza de trabajo móvil,

Programación en C para microcontroladores
Programación en C para microcontroladores. Introducción. C es un lenguaje bastante conciso y en ocasiones desconcertante. Considerado ampliamente como

Previously Published Works UC Irvine
Previously Published Works UC Irvine A University of California author or department has made this article openly available. Thanks to the Academic Se

Story Transcript

PROGRAMACIÓN EN C para uC MCS-51

Resumen de contenidos

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

1 - Objetivos

PROGRAMACIÓN EN C

3

1- 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 MCS51 • 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 T89C51CC01)

sfr P0=0x80; sfr P1=0x90; void main(void){ while(1) P1=~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

10

4 - Compilador µVision2

• Características generales – – – –

100 % 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 MCS51

• 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

11

4 - Compilador µVision2 • Gestión 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 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

12

4 - Compilador µVision2 • Gestión de memoria – 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

13

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 MOV i,#2 MOV i+1,#8

Byte/Ciclos maq. Rango direcciones

6/4 0-7F

MOV MOV INC MOV

7/4 0-FF

IDATA R0 ,#i @R0,#2 R0 @R0,#8

XDATA MOV DPTR,#i MOV A ,#2 MOVX @DPTR,A INC DPTR MOV A,#8 MOVX @DPTR,A 10/9 0-FFFF

PROGRAMACIÓN EN C

14

4 - Compilador µVision2 • 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

Bytes ocupados 1 2 2 4 4

Rango

Notas

-128..127 0..255 -32768..32767 0..65535 -32768..32767 0..65535 -2147483648..2147483647 0..4294967295 ? 1.18e-38 .. ? 3.39e+38

-215..215-1 0..216 -1 como int -231..231-1 0..232 -1 como float

– Extensiones para la familia MCS51 Tipo de dato bit sbit sfr

Bytes ocupados 1 bit 1 bit 1

Rango

Notas

0..1 0..1 0..255

área DATA direccionable por bit área SFR área SFR

PROGRAMACIÓN 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 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 -128..127 Ocupa en memoria 1 byte

Declaración signed char nombre_variable; PROGRAMACIÓN EN C

16

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

17

4 - Compilador µVision2 Tipo long, long int Permite declarar un entero en el rango -2147483648..2147483647 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

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 precisión (precisión de 7 dígitos decimales) 31

30

23

S

EXPONENTE

22

0 MANTISA

Valor=(-1)Signo2(Exponente-127)1.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;

PROGRAMACIÓN 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

Declaración sfr nombre_variable =dirección de memoria; Ejemplo sfr P0=0x80; sfr P1=0x90; void main(void){ while(1) P1=~P0; }

PROGRAMACIÓN 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)

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 P1, P1.0 */ lleno = 1; if (lleno==1) valvula = 1; else valvula = 0; PROGRAMACIÓN EN C

21

4 - Compilador µVision2 Actividad • Definir en lenguaje C las siguientes variables: – De la zona SFR los registros: PSW, IEN1, TMOD, TH1, P4 – De la zona SFR los bits: 80h bit 7, 88h bit 4, 90h bit 7

• Asignar el valor cero a: IEN1, TH1, 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 1 { 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 P1=0x90; sfr P2=0xA0; void main(void) { while (1) P2=P1+15; }

Actividad: Editar, compilar y generar el fichero hexadecimal. Ver el ensamblador generado.

PROGRAMACIÓN 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. PROGRAMACIÓN EN C

29

6 - Ejemplos: puertos

UN PRIMER PROGRAMA EJEMPLO sfr P1=0x90; void main(void){ P1=0xaa; /* Enviar al Puerto P1 el Dato: 10101010 */ while(1);} /* 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 Salida Lógica

P3.0..P3.2 Pulsadores del Entrenador P1.0..P1.7 Diodos Luminiscentes del Entrenador Negativa-Negativa

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

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.