Compilador C Keil para 8051:

 

Características principales:

            Nueve tipos de datos incluidos flotantes IEEE-754

            Interrupciones se pueden escribir en C;

            Optimización de registros, bucles.

            Soporte para diversas variantes del 8051.

           

Tipos de variables:

char v8;                       // variables de 8 bits

int v16;            // variables de 16 bits

long int v32:                 // variables de 32 bits

            bit  bb;                         // variables tipo bit

unsigned y signed     // para modificar el tipo

 

Definición de  SFR y bits:

sfr  TL2 = 0xCC;

sft  TH2 = 0xCD;

sbit TR2 = 0xCA;

sbit INM = P2 ^5;   // bit 5 del Puerto P2

 

Recordemos que el 8051 tiene tres tipos de memoria:

            De programa.

            De datos externa

            De datos interna.

Punteros:

float *p;           Puntero  genérico a valor flotante en cualquier memoria.

char data *dp; Puntero específico a memoria carácter en memoria de datos

long idata *ip; Puntero específico a memoria carácter en memoria de datos(@Ri)

int pdata *pp;  Puntero específico a memoria ent. Ram Ext (@Ri)

int xdata *xp;  Puntero específico a memoria Ram Ext (@DPTR)

int code *cp;    Puntero específico a memoria a entero en memoria de código.

xdata unsigned char CONV _at_ 0x08;    // fijando una posición externa

data unsigned long contador _at_ 0x10;    // finjando en memoria interna

code unsigned char tiempos[4] = {0.3.5.4};  // inicia valores

 

 

Interrupciones escritas en C:

 

void timer0 (void) interrupt 1 {  // rutina para el vector 1 de INt  (timer 0)

            Contador++;

}

 

void timer1 (void) interrupt 3  using 1{  // rutina para el vector 3 de Int  (timer 1)

            otroContador+=contador*2;   // utiliza banco 1 de registros

}

 

Directivas:

#pragma ot(6,size)                   // optimizacion nivel 6, + codigo

 

 

Ejemplo básico de programa:

 

#include <reg52.h>

#include <stdio.h>

 

sbit XX = P0^2;    // declaracion de un bit de un puerto

 

data unsigned char tabla[16];

 

 

void tx(unsigned char t) {  // transmite un character por el Puerto serie

            SBUF=t;;

            while (!TI) {}

            TI=0;

}

 

void main () {

int suma;

unsigned char v8;

 

            TL=253;          /* fija el timer1 *

            TH=253;

            TMOD=0x20;

            TR1=1;

            SCON=0x50;

 

for (v8=0;v8<8;v8++)  tabla[v8]=1<<v8;

for (v8=8;v8<16;v8++)  tabla[v8]=v8*2+2;

 

 

for (v8=0;v8<16;v8++)  sum+=tabla[v8];

printf(“suma=%i”,suma);

 

TR0=1;                       // acceso directo a bits

while (XX && (P1<28)) {

            P1++;              // inclremento del Puerto P1

}

tx(4);  // transmite un 4 por el puerto serie

printf(“fin\n”);

 

}