programacion en c

33
 Programación en C del uC 8051 Informática Industrial Sebastián Tornil Octubre 2007 2 Programación en C del uC 8051 Programación en C del uC 8051 Ensamblador, lenguaje s de alto nivel y C ANSI C C51 Ejemplos  Informática Industrial C estándar C para µC 8051

Upload: 530yer

Post on 04-Nov-2015

13 views

Category:

Documents


0 download

DESCRIPTION

Programación en C para microcontroladores

TRANSCRIPT

  • Programacin en Cdel uC 8051

    Informtica Industrial

    Sebastin TornilOctubre 2007

    2Programacin en C del uC 8051

    Programacin en C del uC 8051

    Ensamblador, lenguajes de alto nivel y C ANSI C C51 Ejemplos

    Informtica Industrial

    C estndar

    C para C 8051

  • 3Programacin en C del uC 8051

    Ensamblador, lengs de alto nivel y C

    Programacin en ensamblador: bajo nivel de abstraccin:

    datos simples instrucciones y modos de direccionamiento

    rudimentarios y no totalmente compatibles entre s control de flujo bsico mediante instrucciones de

    comparacin y salto gestin directa del paso de parmetros

    cdigo no portable, totalmente dependiente del lenguaje y los recursos del micro cdigo eficiente

    Informtica Industrial

    4Programacin en C del uC 8051

    Ensamblador, lengs de alto nivel y C

    Programacin en lenguaje de alto nivel: alto nivel de abstraccin:

    datos estructurados: enumerados, tablas, records potentes estructuras para control de flujo: estructuras

    condicionales (if-else), bucles (for, while, ...) ocultacin del paso de parmetros

    mayor portabilidad: separacin entre cdigo independiente de los

    recursos y cdigo dependiente (drivers) cdigo menos eficiente

    Informtica Industrial

  • 5Programacin en C del uC 8051

    Ensamblador, lengs de alto nivel y C

    El lenguaje C: creado en 1972 por D. Ritchie para la programacin del

    S.O. UNIX lenguaje de medio nivel (entre ensamblador y alto nivel) permite acceso directo a memoria y a dispositivos E/S eficiencia del cdigo generado gracias a una sintaxis

    concisa y la existencia de compiladores eficientes permite programacin modular: funciones y estructuras

    de datos portabilidad ampliamente utilizado en la programacin de Cs

    Informtica Industrial

    6Programacin en C del uC 8051

    Ensamblador, lengs de alto nivel y C

    ANSI C y C51: C es un lenguaje de alto nivel independiente del micro

    cuya sintaxis estndar se conoce como ANSI C para poder aprovechar las caractersticas particulares del

    8051 (organizacin de memoria, instrucciones de manipulacin de bits, acceso a puertos) existe una extensin del estndar conocida como C51

    Informtica Industrial

  • 7Programacin en C del uC 8051

    Ensamblador, lengs de alto nivel y C

    Ejemplo: inc/dec P6 en funcin de P4.7

    Informtica Industrial

    USES 80537ORG 8000H

    LEDS EQU 20hINICIO MOV LEDS,#00H

    MOV P6,LEDSLOOP JB P4.7,CONTAR

    DEC LEDSSJMP VISUAL

    CONTAR INC LEDSVISUAL MOV P6,LEDS

    MOV R1,#0AHACALL RETARDOAJMP LOOP

    RETARDO MOV R2,#0FFHRETARD2 MOV R3,#0FFH

    DJNZ R3,$DJNZ R2,RETARD2DJNZ R1,RETARDORETEND

    #include sbit SWITCH = P4^7;void retardo (unsigned int n);void main(){

    unsigned char leds=0;while (1){

    if (SWITCH==1)leds++;

    elseleds--;

    P6 = leds;retardo(0x0A);

    }}void retardo (unsigned int n){

    unsigned int i,j;for (i=0;i

  • 9Programacin en C del uC 8051

    Estructura general y sintaxis

    Estructura general de un programa C:/* ... */...

    void main(void){

    ...}

    programaprincipal

    Informtica Industrial

    comentariosdirectivas

    variables globalesdeclaracin funciones

    programacinfunciones

    los comentarios pueden aparecer en cualquier punto del

    programa

    la programacin de funciones puede

    aparecer junto con la declaracinvariables

    instrucciones

    10Programacin en C del uC 8051

    Estructura general y sintaxis

    Ejemplo:/* clculo del permetro del crculo*/#include #define PI 3.1416void main(void){

    float radio,perimetro;scanf(%f,&radio);perimetro = 2*PI*radio;printf(%f,perimetro);

    }

    declaracinde variables

    lectura deteclado

    escritura porpantalla

    clculo y asignacin

    Informtica Industrial

    inclusin de declaracin de

    funcionesdeclaracin

    de constantes

  • 11Programacin en C del uC 8051

    Estructura general y sintaxis

    Generalidades de la sintaxis de C: los comentarios se enmarcan entre /* ... */ ; para

    comentarios de una lnea // ... inclusin de ficheros: #include las secuencias de instrucciones se enmarcan entre llaves

    {...} debe colocarse un punto y coma ; tras cada instruccin el lenguaje distingue minsculas de maysculas; las

    palabras clave en minscula

    Informtica Industrial

    12Programacin en C del uC 8051

    Datos elementales y operaciones

    Tipos de datos: identificadores bsicos

    char entero de 8 bitsint entero de 16/32 bits, depende de y compiladorfloat real de simple precisin, normalm. 32 bitsdouble real de doble precisin, normalm. 64 bits

    modificadoresunsigned entero sin signo, aplicable a char e intshort tamao pequeo, aplicable a intlong tamao grande, aplicable a int y double

    Informtica Industrial

    short int

  • 13Programacin en C del uC 8051

    Datos elementales y operaciones

    Constantes y variables: declaracin de constantes

    declaracin de variables

    #define identificador valor

    id_tipo id_var_1, ..., id_var_n;

    nombre dela constante

    valor

    identificadorde tipo

    + modificador

    nombres delas variables

    Informtica Industrial

    #define PI 3.1416void main(void){

    unsigned int a;char b = 0;float x,y;...

    }inicializacinde la variable

    ejemplo

    14Programacin en C del uC 8051

    Datos elementales y operaciones

    Operadores bsicos: asignacin

    = actualiza una variable con el resultado de una secuencia de operaciones

    aritmticos+ suma- resta* producto/ divisin, entera/real en funcin de operandos% resto de la divisin entera-- decremento++ incremento

    Informtica Industrial

  • 15Programacin en C del uC 8051

    Datos elementales y operaciones

    compuestos+= suma y actualizacin de variable-= resta y actualizacin*= producto y actualizacin/= cociente y actualizacin%= resto y asignacin

    ejemplos

    Informtica Industrial

    char a=1;int b=3;float x;

    a = a+1;a++;a+=1;b = b%2;x = (float)(b/2);

    16Programacin en C del uC 8051

    Datos elementales y operaciones

    Manipulacin de bits: operadores de bits

    ~ complemento lgico (NOT) bit a bit& producto lgico (AND)| suma lgica (OR)^ suma exclusiva (XOR)> desplazamiento hacia la derecha

    ejemplos

    Informtica Industrial

    unsigned char a=0x33;a = a & 0x0F;a = a | 0xF0;a = a>>2;

    00110011000000111111001100111100

    0x indica valorhexadecimal

    la & se utiliza para poner bits a 0

    la | se utiliza para poner bits a 1

    utilizada en acceso a dispositivosaplicables a tipos de datos enteros

  • 17Programacin en C del uC 8051

    Datos elementales y operaciones

    Operadores relacionales y lgicos: relacionales

    < menor estricto> mayor estricto= mayor o igual= = igual!= diferente

    operadores lgicos! negacin lgica (NOT)&& producto lgico (AND)|| suma lgica (OR)

    Informtica Industrial

    utilizados encontrol de flujo

    el compilador de C interpreta que 0 es falso y cualquier otra cosa cierto; devuelve 0 cuando el resultado de una operacin relacional o lgica es falso y 1 cuando es cierto

    18Programacin en C del uC 8051

    Datos elementales y operaciones

    Evaluacin de expresiones: los parntesis se evalan de dentro hacia fuera los operadores tienen diferentes prioridades

    operadores de misma prioridad se evalan de izquierda a derecha

    ! ++ --* / %+ ->< >=== !=&|&&||= += -= *= /= %=

    prioridad

    Informtica Industrial

    +

    -

  • 19Programacin en C del uC 8051

    Entrada/Salida

    Salida estndar: declaracin en stdio.h sintaxis: la cadena de control especifica el formato y nmero de

    argumentos (valores a mostrar) y el texto asociado formato de un argumento:

    lista de argumentos separados por comas; los argumentos son las variables o expresiones cuyo valor se ha de mostrar

    printf(cadena_control,lista_argumentos);

    %c carcter%d entero%u entero sin signo%f float/double%s cadena de carcteres

    Informtica Industrial

    pantalla

    20Programacin en C del uC 8051

    Entrada/Salida

    ejemplos#include

    unsigned int a=2;char car=a; float x=1.0;

    printf(El valor de a es %u,a);

    printf(El valor de a es %u y el de car es %c,a,car);

    printf(El doble del valor de x es %f \n,2*x);salto de lnea

    Informtica Industrial

  • 21Programacin en C del uC 8051

    Entrada/Salida

    Entrada estndar: declaracin - stdio.h sintaxis: los argumentos son los nombres variables en que se han

    de almacenar los valores leidos; cada nombre debe ir precedido por el smbolo & ejemplo

    scanf(lista_argumentos)

    int num;printf(Introduce un valor entero:);scanf(%d,&num);

    Informtica Industrial

    teclado

    22Programacin en C del uC 8051

    ejemplo

    Control de flujo

    Estructura if-else: sintaxis

    if (expr_logica_1){

    sec_instr_1}else if (expr_logica_2){

    sec_instr_2}...else{

    sec_instr_n}

    opcionales

    condicininstrucciones ejecutadas si

    se cumple la condicin

    Informtica Industrial

    if ((x>=y)&&(x>=z))max = x;

    else if (y>=z)max = y;

    elsemax = z;

    opcionalessi slo 1

    instruccin

  • 23Programacin en C del uC 8051

    Control de flujo

    Estructura switch: sintaxis

    switch (expresion){

    case valor_1:sec_instr_1;break;

    ...case valor_m:

    sec_instr_m;break;

    default:sec_instr_n

    }

    variable/expresinde tipo entero

    opcional

    valor/sec.valores

    separadospor comas

    salto al fin switch

    Informtica Industrial

    switch (a){

    case 1,2:b=1;

    case 2:c=1;break;

    default:b=3;

    }

    ejemplo

    ejecutadas si la expresin toma uno de los valores

    opcional

    ejecutadas si el valor de la expresin no iguala uno especificado en los casos

    24Programacin en C del uC 8051

    Control de flujo

    Bucle for: sintaxis

    for (instruccion; expr_logica; instruccion){

    sec_intrucciones}

    inicializacinprevia

    condicin deiteracin

    actualizacin alfin cada iteracin

    instrucciones ejecutadasa cada iteracin

    Informtica Industrial

    for (i=1;i

  • 25Programacin en C del uC 8051

    Control de flujo

    Bucle while: sintaxis

    Bucle do-while: sintaxis

    while (expr_logica){

    sec_instrucciones}

    Informtica Industrial

    i = 1;while (i

  • 27Programacin en C del uC 8051

    Datos estructurados

    Tablas (arrays): declaracin

    acceso indexado

    id_tipo id_var[valor_1]...[valor_n];

    tipo de loselementos

    nombrede la tabla

    dim = ntamaos de lasdimensiones

    id_var[indice_1]...[indice_n]

    nombredel array

    ndices(comenzando por 0)

    Informtica Industrial

    permiten guardar un conjunto de datos del mismo tipo

    int matriz[2][3];for (i=0;i

  • 29Programacin en C del uC 8051

    Funciones

    Declaracin de funciones: sintaxis

    parmetros por valor por referencia

    id_tipo id_funcion(esp_param_1,...,esp_param_n);tipo del resultado

    void sin resultadonombre dela funcin parmetros formales

    id_tipo id_parametroid_tipo *id_parametro

    tipo nombre

    Informtica Industrial

    la funcin recibe un valor,

    un dato de entradarecibe la @ de una variable del programa que la llama, donde puede encontrar un dato de entrada y/o dejar un resultado

    cabecera

    30Programacin en C del uC 8051

    Funciones

    ejemplos

    Programacin de funciones: sintaxis

    acceso a parmetros por valor como a variables acceso a parmetros por referencia devolucin de resultados

    int potencia(float base, int exp, float *pot);

    entradas

    resultado

    cdigode error

    resultadoentradas

    *id_parametroreturn (expresion);

    Informtica Industrial

    float potencia(float base, int exp);

  • 31Programacin en C del uC 8051

    Funciones

    ejemploint potencia(float base, int exp, float *pot){

    unsigned int i;float result=1;if (exp

  • 33Programacin en C del uC 8051

    Funciones

    ejemplo:

    int potencia(float base, int exp, float *pot){...}

    void main(){

    int err, exponente=-1;float base=3.0,result;...err = potencia(2.0,3,&result);err = potencia(base,exponente,&result);

    }

    result 8.0err 0

    result 1.0err -1

    Informtica Industrial

    parmetros y variables locales de la funcin pueden coincidir en nombre

    con variables del programa

    34Programacin en C del uC 8051

    Funciones

    Funcionamiento del ejemplo:

    Informtica Industrial

    int potencia(float base, int exp, float *pot){

    unsigned int i;float result=1;if (exp

  • 35Programacin en C del uC 8051

    C51

    Tipos de datos Acceso a dispositivos Interrupciones Keil

    Informtica Industrial

    entorno de desarrollo

    36Programacin en C del uC 8051

    Tipos de datos

    Tipos de datos en C51:

    Informtica Industrial

    unsigned char 8 bits 0 255char 8 bits -128 127unsigned int 16 bits 0 65535int 16 bits -32768 32767unsigned long 32 bits 0 4294967295long 32 bits -2147483648 2147483648float 32 bits +/-1.175E-38 +/-3.403E+38

    Identificador Tamao Rango

  • 37Programacin en C del uC 8051

    Acceso a dispositivos

    Acceso a registros: el tipo de datos sfr permite el acceso a los registros de los

    dispositivos del micro

    la declaracin puede aparecer en el fichero del programa o en un fichero externo con extensin .h

    IE se manipula como cualquier variable char (8 bits)

    Informtica Industrial

    sfr IE = 0xA8;...

    IE = IE|0x80;

    sfr IE = 0xA8;#include ...

    IE = IE|0x80;

    reg51.h

    38Programacin en C del uC 8051

    Acceso a dispositivos

    Acceso a bits: el tipo sbit permite el acceso individual a bits de registros

    el registro ha de ser direccionable bit a bit (en caso contrario utilizar operadores de bits y mscaras sobre el registro completo, como en transparencia anterior) no son vlidos:

    Informtica Industrial

    IE.7 = 1;

    sbit EA = IE^7;sbit EA = 0xA8^7;sbit EA = 0xAF;...

    EA = 1;

    equivalentes

    IE^7 = 1;

  • 39Programacin en C del uC 8051

    Acceso a dispositivos

    Ejemplo: coche fantstico en LEDS colgados de P6

    Informtica Industrial

    sfr P6 = 0xFA;void retardo (unsigned int n){

    unsigned int i,j;for (i=0;i

  • 41Programacin en C del uC 8051

    Interrupciones el compilador genera cdigo ensamblador

    para salvar en la pila los registros utilizados por la rutina: ACC, B, DPTR, PSW, R0-R7

    correspondiente al cdigo C de la funcin para restaurar de la pila los registros salvados acaba con RETI instruccin de salto a la rutina en la entrada

    correspondiente del V.I.

    Informtica Industrial

    void RSI (void) interrupt n{

    ....}

    ORG 8*n+3LJMP RSI...

    RSI: PUSH ACC...POP ACCRETI

    42Programacin en C del uC 8051

    Interrupciones

    Ejemplo: coche fantstico utilizando Timer0

    Informtica Industrial

    void RSI_Timer0(void) interrupt 1{

    TH0 = 0x00;TL0 = 0x00;P6 = P6

  • 43Programacin en C del uC 8051

    Keil

    Proceso de desarrollo:

    Informtica Industrial

    main.c main.objC51

    cmo se obtiene el ejecutable a partir del fuente?

    ?.c ?.objC51

    ?.asm ?.objA51

    A51startup.asm startup.obj

    main.lst

    c51*.lib

    BL51 main.binmain.hex

    main.m51

    opciones de ubicacin de

    datos y cdigo en memoria

    44Programacin en C del uC 8051

    Keil

    C51 compiler para cada fichero fuente (*.c) genera un fichero objeto

    (*.obj) que contiene cdigo mquina reubicable adicionalmente genera un listado (*.lst) con

    informacin del cdigo ensamblador generado A51 assembler

    procesa los ficheros fuente en ensamblador (*.asm) BL51 linker+locator

    enlaza los diferentes objetos y les proporciona una ubicacin fija en memoria, dando lugar al ejecutable (*.bin) o al HEX (*.hex)

    genera un listado (*.m51) con informacin sobre la ubicacin de cdigo y datos en memoria

    Informtica Industrial

  • 45Programacin en C del uC 8051

    Keil

    KEIL entorno de desarrollo IDE interfaz de usuario, incluye editor C51, A51, BL51 C51*.lib libreras estndar startup.asm cdigo de inicializacin

    Informtica Industrial

    46Programacin en C del uC 8051

    Keil

    Opciones de configuracin: suponiendo que el cdigo se ha de ejecutar en las placas

    del laboratorio, con variables en memoria interna y cdigo en RAM externa a partir de la @ 8000h

    modificacin del fichero startup.a51

    Informtica Industrial

    ...CSEG AT 8000h

    ?C_STARTUP: LJMP STARTUP1...

    sita una instruccin de salto al cdigo

    de inicializacin en la direccin especificada

  • 47Programacin en C del uC 8051

    Keil

    ubicacin de variables en memoria interna:

    Informtica Industrial

    48Programacin en C del uC 8051

    Keil

    ubicacin del vector de interrupciones:

    Informtica Industrial

  • 49Programacin en C del uC 8051

    Keil

    ubicacin de cdigo:

    Informtica Industrial

    50Programacin en C del uC 8051

    Keil

    generacin del fichero HEX:

    Informtica Industrial

  • 51Programacin en C del uC 8051

    Keil

    generacin de ficheros lst y m51:

    Informtica Industrial

    52Programacin en C del uC 8051

    Ejemplos

    Prctica 4 Reloj digital

    Informtica Industrial

  • 53Programacin en C del uC 8051

    Prctica 4

    Montaje HW:

    Objetivo: contaje sobre display

    Posibles soluciones:1 rutina de incremento BCD3 incremento en binario y rutina de conversin a BCD4 utilizacin del Timer0 para temporizacin incremento

    Informtica Industrial

    54Programacin en C del uC 8051

    Prctica 4

    Solucin 1

    Informtica Industrial

  • 55Programacin en C del uC 8051

    Prctica 4Informtica Industrial

    56Programacin en C del uC 8051

    Prctica 4

    Solucin 2

    Informtica Industrial

  • 57Programacin en C del uC 8051

    Prctica 4Informtica Industrial

    58Programacin en C del uC 8051

    Prctica 4

    Solucin 3

    Informtica Industrial

  • 59Programacin en C del uC 8051

    Prctica 4Informtica Industrial

    60Programacin en C del uC 8051

    Reloj digital

    Montaje HW:

    Funcionamiento: visualizacin dinmica de horas y minutos parpadeo de los separadores cada medio segundo SEL permite seleccionar entre modos: normal,

    incremento horas, dec. horas, inc. minutos, dec. minutos MOD incrementa/decrementa horas/minutos segn SEL

    Informtica Industrial

    trafo comp

    T0

    /INT0

    /INT1

    87C51

    ABCD

    4511

    P2.0P2.1P2.2P2.3

    a

    g

    P2.4

    P2.5P2.6

    74156

    BA

    1Y01Y11Y21Y3

    20 ms

    SEL

    +Vcc4584

    MOD

    +Vcc4584

  • 61Programacin en C del uC 8051

    Reloj digital

    Solucin:

    Informtica Industrial

    62Programacin en C del uC 8051

    Reloj digitalInformtica Industrial

  • 63Programacin en C del uC 8051

    Reloj digitalInformtica Industrial

    64Programacin en C del uC 8051

    Reloj digitalInformtica Industrial

  • 65Programacin en C del uC 8051

    Reloj digitalInformtica Industrial