Академический Документы
Профессиональный Документы
Культура Документы
Iniciacin a la programacin
en C del microcontrolador 8051
Organizacin de la memoria
en el 8051
1
Organizacin de la memoria
en el T89C51RD2
- 256 bytes (128 + 128)
Interna -XRAM (1024 bytes)
Especificadores de
memoria de datos interna
FFH FFH
Direcc. Direcc.
Indirecto Directo
128 bytes SFR
Especificador
128 bytes
idata
7FH 7FH
Direcc. Indirecto Direcc.
(Hasta 256 bytes) Especificador
Directo
& data
Indirecto Direcc. Directo
128 bytes Accesos rpidos
00H
2
Especificadores de memoria
de datos externa y de programa
Ejemplos:
1) char data x, y; /*vbles x, y residen en memoria interna, acceso directo (rapidez) */
2) unsigned int xdata buffer[100]; /* array buffer situado en memoria externa */
3) unsigned char code parametros[]={0x10, 0x20, 0x40, 080}; /*constantes
almacenadas en la memoria de programa (ROM)*/
Especificadores de
almacenamiento.
En general
3
Modelos de memoria
Ejemplo:
#pragma COMPACT ; /* memoria definida por defecto para todo el programa */
Modelos de memoria
Ejemplo:
int func (int x, int y) large
{
x=10;
y=20;
printf (la suma es %d \n, x+y);
return (x-y+5);
}
4
Constantes, variables
y tipos de datos
Ejemplos:
1) bit flag1=0, semaforo; /*define vbles flag y semaforo de tipo bit e inicializa flag1=0*/
2) char bdata valor;
sbit valor_3=valor^3; /* valor en rea direccionable bit a bit; valor_3 = cuarto bit de valor*/
3) unsigned int bdata numero;
sbit num_8=numero^8;
sbit num_0=numero^0;
numero=0x0100; /* num_0 valdr 1 y num_8 valdr 0 */
4) sbit at 0xAF EA; /* establece EA como vble. tipo bit cuya dir es la 0xAF de mem. interna*/
Universidad de Alcal. Escuela Politcnica
Sistemas Electrnicos Digitales II (I. T. Telecomunicacin)
5
Nuevos tipos de datos del C51 (II)
Ejemplos:
Todos los registros SFR estn definidos en el archivo reg51.h
1) sfr at 0x80 P0 ;
sfr P0 = 0x80; /* dos formas de definir el puerto 0 */
2) sbit P0_7 = P0^7; /* bit 7 del puerto 0 (empezando por el 0)*/
3) sfr16 DPTR = 0x82; /* SFR de 16 bits */
Ejemplo:
int xdata temp[20]; /*define un array de 20 datos de tipo int, que se almacenan en la RAM
externa. Los datos se referencian del 0 al 19 */
unsigned char code tabla_orden[]=
{primero,
segundo,
tercero}; /* define los datos de tipo char que se almacenan
en la memoria de programa */
6
Estructuras
datos relacionados
Estructuras
igual o distinto tipo
Ejemplo:
Situacin en memoria
struct coordenadas{
unsigned char punto[10]; punto 10 bytes
unsigned int x; x 2 bytes
unsigned int y; y 2 bytes
}; /*define la estructura coordenadas*/
14 bytes
Estructuras
Ejemplo:
.
.
struct coordenadas coor_robot={R2D2, 10, 5};
printf (El robot %s tiene como coordenadas %d , %d \n,
coor_robot.punto, coor_robot.x, coor_robot.y);
7
Estructuras
Ejemplo:
Estructuras
Ejemplo:
8
Estructuras
Estructuras
Ejemplo:
; SOURCE LINE # 31
Datos2.bit0 = 0; CLR Datos2.0
; SOURCE LINE # 32
Datos2.bit1 = 1; SETB Datos2.1
Datos2.bit2 = 1; SETB
; SOURCE LINE # 33
Datos2.2
Datos2.bit3 = 0; ; SOURCE LINE # 34
CLR Datos2.3
Datos2.bit4 = 1; ; SOURCE LINE # 35
Datos2.bit5 = 1; SETB Datos2.4
; SOURCE LINE # 36
Datos2.bit6 = 1; SETB Datos2.5
Datos2.bit7 = 0; SETB
; SOURCE LINE # 37
Datos2.6
; SOURCE LINE # 38
CLR Datos2.7
while (1); ?WHILE1:
} ; SOURCE LINE # 41
SJMP ?WHILE1
9
Uniones
datos relacionados
Uniones
igual o distinto tipo
Los datos se superponen en la memoria, no se guardan correlativos
& Tiene sentido cuando los datos se tratan en distinto instante de tiempo
Ejemplo: union Ttemporizador{
unsigned int word;
struct {
unsigned char hi;
unsigned char low;
} bytes;
};
union Ttemporizador new_count; 1 byte char hi
new_count.bytes.hi = TH1; int word 2 bytes
new_count.bytes.low = TL1; 1 byte char lo
old_count = new_count.word;
Universidad de Alcal. Escuela Politcnica
Sistemas Electrnicos Digitales II (I. T. Telecomunicacin)
Punteros
void main(void)
{
char x, *px; /* declara vble x y puntero px tipo carcter*/
px=&x; /* puntero px apuntando a la direccin que contiene x*/
x='m'; /* valor de la variable x= 'm' */
printf ("px apunta a la direccin %p, que contiene %c \n", px, *px);
}
10
Punteros tipo en C51
Punteros en C51
& La memoria que ocupa por un puntero tipo depende del dato al que apunte:
punteros a idata, data, bdata, y pdata 1 byte
punteros a code y xdata 2 bytes
Universidad de Alcal. Escuela Politcnica
Sistemas Electrnicos Digitales II (I. T. Telecomunicacin)
11
Punteros en C51
Ejemplo:
unsigned char data * xdata x_ptr;
dato
Tipo de memoria donde reside el puntero
4
x_ptr
4A
4B
4A xxxxxxxx
49
data xdata
12
Conversin de punteros
Punteros a arrays
13
Arrays de punteros
Ejemplo: *(nombres+i)[n]
i=0.
char *nombres[]=
{Jose, *nombres[0] Jose
Julio, *nombres[1] Julio
Antonio, *nombres[2] Antonio
Ana
}; *nombres[3] Ana
Ejemplo:
struct medida {
int tiempo, *ptr
tiempo
int retardo,
char patron retardo
};
struct medida x, *ptr; patron
ptr =&x;
14
Sentencias de control (I)
while (P1&0x20)
{
x=P1;
P1=0x00; El bucle se repite mientras la condicin sea cierta
P2=0x0C;
}
Sentencias ifelse
Sintaxis:
if (test)
cierta (0)sentencia1
sentencia1;
Ifelse evala la expresin test
else falsa (=0)sentencia2
sentencia2;
15
Sentencias de control (III)
Sentencia for
Sintaxis:
for (expresin_inicio; expresin_test; expresin_rep)
{
sentencias de C;
} Expresin_inicio
falso
test
Ejemplo
void main (void) verdadero
{ Sentencias
int n, factorial=1;
for(n=6;n!=1;n--) factorial*=n;
Expresin_rep.
printf (el factorial de 6 es %d \n,factorial);
}
16
Funciones
Nombre
Declaracin (prototipado)
Argumentos
Datos que devuelve
Tipo de memoria utilizada
& Emplear memoria tipo small es ms rpido, pero tiene poco tamao
Funciones (II)
return_tipo: Tipo del valor retornado por la funcin. Si no se especifica, se asume por
defecto el tipo int.
using: Especifica el banco de registros utilizado por la funcin (0-3) (ej. Using 2)
17
Funciones (III)
Ejemplo
Funciones (IV)
3 R3 R2,R3 R1-R3
18
Funciones (V)
char (1 byte) R4
int (2 bytes) R4,R5
Funciones (VI)
2) Paso de parmetros a travs de memoria
#pragma NOREGPARMS
extern int bfunc(float, int, char) La directiva NOREGPARAMS
void main (void) activa el paso a travs de memoria
{
int i=10, j=20, n, k;
float x=3.1416;
char ch=65;
n=bfunc(x, i, ch);
k=xfunc(i, j);
printf (%d, %d , n, k);
}
#pragma REGPARMS
int xfunc(int x, int y)
{ REGPARAMS
int z; activa el paso a travs de registros
z=x*y;
return(z-x-y);
}
Universidad de Alcal. Escuela Politcnica
Sistemas Electrnicos Digitales II (I. T. Telecomunicacin)
19
Funciones (VI)
Funciones reetrantes
Funciones (VII)
Funciones de interrupcin
Interrupcin Nmero
Externa 0 0
Timer 0 1
Externa 1 2
Timer 1 3
P. Serie 4
Timer 2 5
PCA 6
Universidad de Alcal. Escuela Politcnica
Sistemas Electrnicos Digitales II (I. T. Telecomunicacin)
20
Funciones (VII)
Funciones de interrupcin
Interrupcin Timer 1
Ejemplo
Programas y mdulos
mod_1.c mod_2.c
21