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”);
}