Sunteți pe pagina 1din 55

Tecnologa Informtica

Tema 1
Departamento de Informtica de Sistemas y Computadores
Pedro Yuste

ndice
Repaso de la arquitectura del 8051
Programacin de microcontroladores en
lenguajes de alto nivel
Acceso a puertos
Diseo de sistemas de memoria
Acceso a dispositivos de E/S mapeados en
memoria

Arquitectura
Divisin memoria programa / datos en el MCS-51
Organizacin:

Distingue entre accesos a programa o datos


Permite utilizar memoria segregada o combinada
Otros microcontroladores no hacen esta distincin

Slo permiten sistemas de memoria combinada

Programa
Hasta 64 Kbytes de memoria ROM:

interna, externa o combinada segn patilla /EA

Datos:
128 o 256 bytes internos
Hasta 64 Kbytes de memoria RAM externa

Arquitectura
Dentro de la memoria interna se reservan
algunas posiciones como registros de
funciones especiales, (SFR) para la gestin
de perifricos

Memoria interna
128 bytes de datos iniciales

Acceso directo ( MOV A, dir / MOV dir, A )


Se incluyen 4 bancos de 8 registros ( R0 - R7 )
Se incluyen 128 posiciones accesibles bit a bit
(MOV C, dir / MOV dir, C)

128 bytes de datos adicionales

Acceso indirecto ( MOV A, @R0 / MOV @R0, A )

La pila del sistema puede utilizar ambas

Memoria interna
128 bytes en el rea SFR

Incluye 128 posiciones accesibles bit a bit


Acceso directo

Acceso indirecto
255

RAM
interna
adicional

255

rea
SFR

127

127

RAM
interna
0

Memoria interna
Detalles de la
RAM interna:

127

47 b120
Direcciones
byte

33
32
31

7
0

... b127
...
b8 b9 ... b15
b0 b1 ... b7

Zona
direccionable
bit a bit
Banco 3
Banco 2
Banco 1

R7
...
R0

Banco 0

Memoria interna
rea SFR

Puertos E/S
Direccionables
bit a bit (128 a 255)

Acceso a
RAM externa

Control
energa

Memoria externa
Acceso indirecto ( registro DPTR o PC )
Bus multiplexado datos / parte baja dir.

Direcciones cuando ALE = 1

Hasta 64 Kbytes de datos

Lectura y escritura gobernadas por /RD y /WR

Hasta 64 Kbytes de programa, accesibles si


patilla /EA = 0

Lectura gobernada por /PSEN

Gestin eficiente de la memoria


Ubicacin de las variables del programa

Elegir con cuidado dnde se almacenan las


variables del programa
Las ms utilizadas en la memoria ms rpida (interna)
Tener en cuenta que la pila del sistema (para llamadas
a procedimientos) tambin gasta la memoria interna
Verificando siempre que no sobrepasamos el lmite
fsico de la memoria disponible

Programacin en alto nivel


Evitar recurrir al lenguaje ensamblador

Su incorporacin a un programa en alto nivel es


costosa
Difcil de programar, depurar y mantener

Slo si el compilador especializado para el


microcontrolador lo soporta
Generalmente se utilizan extensiones al
lenguaje estndar

Programacin en alto nivel


Ubicacin de las variables del programa en
alto nivel
Para nuestro caso concreto (Keil C para
microcontroladores de la familia MCS-51)
data int a;
idata int b;
xdata int c;
code int d;
int f;

/* Memoria interna de acceso directo */


/* Memoria interna de acceso indirecto */
/* Memoria externa (acceso indirecto) */
/*Memoria externa de datos */
/* Esta variable se ubicar en la zona de
datos utilizada por defecto en el compilador */

Programacin en alto nivel

.c

.obj

Compilador

Ejecutable

libreras.lib

libreras.h
C_Startup

Linker

Programacin en alto nivel


Lo que nosotros vemos:
#include "c8051f310.h"
sbit flagxd=P2^5;
sbit flagxi=P2^6;
void main(void)
{
char entrada;
P1=0xf8;
entrada=P2;
flagxd=1;
}

C8051f310.h

/* BYTE Registers */
sfr P0
= 0x80; /* PORT 0 */
sfr P1
= 0x90; /* PORT 1 */
sfr PCON = 0x87; /* POWER CONTROL */
sfr TCON = 0x88; /* TIMER CONTROL */
sfr TMOD = 0x89; /* TIMER MODE
*/
sfr TL0
= 0x8A; /* TIMER 0 - LOW BYTE /*
*/ BIT Registers */
sfr TL1
= 0x8B; /* TIMER 1 - LOW BYTE */

/* TCON 0x88 */
sbit IT0 = TCON ^ 0;
sbit IE0 = TCON ^ 1;
sbit IT1 = TCON ^ 2;
sbit IE1 = TCON ^ 3;
sbit TR0 = TCON ^ 4;
sbit TF0 = TCON ^ 5;
sbit TR1 = TCON ^ 6;
sbit TF1 = TCON ^ 7;

/* EXT INTERRUPT 0 TYPE */


/* EXT INTERRUPT 0 EDGE FLAG */
/* EXT INTERRUPT 1 TYPE
*/
/* EXT INTERRUPT 1 EDGE FLAG */
/* TIMER 0 ON/OFF CONTROL */
/* TIMER 0 OVERFLOW FLAG
*/
/* TIMER 1 ON/OFF CONTROL */
/* TIMER 1 OVERFLOW FLAG */

Programacin en alto nivel


Lo que nosotros vemos:

.c

.obj

Compilador

Ejecutable

libreras.lib

libreras.h
C_Startup

Linker

La memoria externa para el uC


Acceso indirecto ( registro DPTR o PC )
Bus multiplexado datos / parte baja dir.

Direcciones cuando ALE = 1, datos cuando ALE = 0

Hasta 64 Kbytes de datos

Lectura y escritura gobernadas por /RD y /WR

Hasta 64 Kbytes de programa, accesibles si


patilla /EA = 0

Lectura gobernada por /PSEN

La memoria externa para el uC


Organizacin segregada de la memoria

Dos espacios de direccionamiento:


Programa y Datos
La misma direccin para ambos espacios, pero
diferenciados por las seales de control

Las seales /PSEN, /WR y /RD son generadas


directamente por el C
Direcciones
Memoria de
Programa
C
Memoria de
Datos
Datos

La memoria externa para el uC


Organizacin combinada de la memoria

Un nico espacio de direcciones para datos y


programa
La seal /WR se genera directamente
La seal de lectura de la memoria se genera con
lgica combinacional a partir de las seales del
microcontrolador /PSEN y /RD
Direcciones

Datos

Memoria de
Programa y Datos

Conexin de una memoria ROM


/PSEN

Bus de Datos y Dir. (P. Baja)

P0
/OE

/EA

DATOS

80C51

LATCH

EPROM

ALE
Bus Dir.
(P. Baja)

P2
/WR
/RD

Bus Dir. (P. Alta)

DIR

Conexin de una memoria RAM


/PSEN

P0

Bus de Datos y Dir. (P. Baja)

DATOS

80C51

LATCH

Bus Dir. (P. Baja)

DIR

ALE

RAM
Bus Dir. (P. Alta)

P2
/WR
/RD

/WR
/RD

Conexin de memorias ROM y


RAM
Bus de Datos y Dir. (P. Baja)

/PSEN
P0

/EA

Bus Dir.
(P. Baja)

DATOS /OE
DATOS

LATCH

80C51

EPROM
DIR

ALE

RAM
Bus Dir. (P. Alta)

DIR

P2
/WR
/RD

/WR
/RD

Funcionamiento del sistema de


memoria
Estructura del sistema (uC + dos memorias)
/RD

/WR + /CS
Bus datos

D Q
/WR

Q D
/RD
/WR
/CS

/RD
/WR

Memoria 0

/RD + /CS

/WR + /CS

Memoria 1

Bus direcciones
Circuito
decodificador

/CS0
/CS1

Q D
/RD
/WR
/CS

/RD + /CS

Funcionamiento del sistema de


memoria
Escritura en memoria 0
/RD

/WR + /CS Memoria 0


Bus datos

D Q
/WR

/RD
/WR

Q D
/RD
/WR
/CS

/RD + /CS

/WR + /CS

Memoria 1

Bus direcciones
Circuito

/CS0

decodificador

/CS1

Q D
/RD
/WR
/CS

/RD + /CS

Funcionamiento del sistema de


memoria
Lectura de memoria 1
/RD

/WR + /CS
Bus datos

D Q
/WR

/RD
/WR

Memoria 0

Q D
/RD
/WR
/CS

/RD + /CS

/WR + /CS

Memoria 1

Bus direcciones
Circuito
decodificador

/CS0
/CS1

Q D
/RD
/WR
/CS

/RD + /CS

Funcionamiento del sistema de


memoria
Error de decodificacin en escritura
/RD

/WR + /CS Memoria 0


Bus datos

D Q
/WR

/RD
/WR

Q D
/RD
/WR
/CS

/RD + /CS
El mismo dato se
escribe en las dos
(b) 1
/WR + /CSmemorias!
Memoria

Bus direcciones
Circuito
decodificador

El decodificador activa
las dos memorias! (a)

/CS0
/CS1

Q D
/RD
/WR
/CS

/RD + /CS

Funcionamiento del sistema de


memoria
Error de decodificacin en lectura
/RD

/WR + /CS Memoria 0


(b)
Cortocircuito en
el bus de datos!

D Q
/WR

/RD
/WR

Q D
/RD
/WR
/CS

/RD + /CS

/WR + /CS

Memoria 1

Bus direcciones
Circuito
decodificador

El decodificador activa
las dos memorias! (a)

/CS0
/CS1

Q D
/RD
/WR
/CS

/RD + /CS

Sistemas de decodificacin
Parte del diseo de un sistema consiste en
incorporar memorias (programa y/o datos)

En algunos sistemas es suficiente con las memorias


internas incorporadas en el chip del uC

Manejo de perifricos como posiciones de memoria

Perifricos mapeados en la memoria del sistema


Sw sencillo: El acceso a los registros internos del perifrico
se consigue mediante operaciones de lectura/escritura
normales de memoria
Hay que disear una interfaz para el caso de que las
seales del uC no se ajusten a lo que exige el perifrico

Sistemas de decodificacin
Sistema segregado simple

Memorias permanentemente activas


/CSEPROM = 0, /CSRAM = 0

No existe conflicto en el bus de datos, porque


/PSEN, /RD y /WR son mutuamente excluyentes ,
/OEEPROM = /PSENuC, /OERAM = /RDuC, /WRRAM = /WRuC, y
Las memorias necesitan tener activas al mismo tiempo /CS y
/OE o bien /CS y /WE

Aunque las entradas /CS estn siempre activas, EPROM y RAM


nunca operan simultneamente

El consumo es alto
Las memorias que no ests siendo accedidas tambin estn
activadas (su /CS = 0)

Sistemas de decodificacin
Sistema segregado simple mejorado

Activar slo la memoria que se vaya a utilizar


/CSEPROM = /PSENuC
/CSRAM = /RDuC AND /WRuC

El consumo se reduce
Slo est activa la memoria que se est usando

Sistemas de decodificacin
Sistemas complejos: En general, habr ms
de un dispositivo en cada zona de memoria
(programa, datos)
Circuito de decodificacin o seleccin

Circuitera que selecciona a un nico dispositivo en


cada ciclo de acceso a memoria
Seleccionar equivale a activar su seal /CS
Slo uno (o ninguno) de los dispositivos del sistema debe
ser seleccionado

La seleccin se basa en la direccin de memoria,


aunque tambin se puede basar en la operacin

Sistemas de decodificacin
Tabla de memoria

Recopilacin tabular de la informacin que debe


manejar el circuito de decodificacin
Cada dispositivo utiliza lneas de direccin para
seleccionar cada una de las posiciones internas
Ej: Una memoria de 32Kbytes necesita 15 lneas de
direcciones (de A0 a A14) para seleccionar,
internamente, una de los 32K posiciones
Dichas lneas de seleccin no intervienen en la
seleccin de dicho dispositivo
El resto de lneas se utilizan para decidir si debemos
activar o no el dispositivo

Sistemas de decodificacin
Ejemplo: ROM 64K + RAM 32K + RAM 32K

Memoria Segregada

A15
x

A14
x

A13
x

A12
x

A11
x

A15
0
1

A14
x
x

A13
x
x

A12
x
x

A11
x
x

0/1: Lnea
utilizada por el
circuito de
decodificacin

Memoria de programa
A10 A9
...
A2
x
x
...
x
Memoria de datos
A10 A9
...
A2
x
x
...
x
x
x
...
x

A1
x

A0
x

Dispositivo
ROM 64K

A1
x
x

A0
x
x

Dispositivo
RAM 32K-1
RAM 32K-2

Memoria Programa:
x: Lnea
No necesita circuito de decodificacin
utilizada
Memoria Datos:
internamente
A15 = 0 selecciona la RAM 32K-1
por el dispositivo
A15 = 1 selecciona la RAM 32K-2

Sistemas de decodificacin
Ejemplo: ROM 32K + RAM 32K, memoria
combinada
A15
0
1

A14
x
x

A13
x
x

A12
x
x

Memoria de programa / datos


A11 A10 A9
...
A2
x
x
x
...
x
x
x
x
...
x

A1
x
x

A0
x
x

Dispositivo
ROM 32K-1
RAM 32K-2

/PSEN y /RD del uC se combinan en una nica seal de lectura (/RD*)


D7-D0uC
A14-A0uC
A15uC
/WRu
/RDuCC
/PSENuC

DATOS
DIR

DIR
ROM

/CS
/RD*

DATOS

/RD

RAM
/CS
/WR
/RD

Sistemas de decodificacin
Ejemplo: ROM 32K + ROM 8K + ROM 8K
+ RAM 16K + RAM 16K + RAM 8K,
memoria (necesariamente) segregada
A15
0
1
1
1
A15
0
0
1
1
1

A14
x
0
0
1
A14
0
1
0
0
1

A13
x
0
1
x
A13
x
x
0
1
x

A12
x
x
x
x
A12
x
x
x
x
x

A11
x
x
x
x

Memoria de programa
A10 A9
...
A2
x
x
...
x
x
x
...
x
x
x
...
x
x
x
...
x

A1
x
x
x
x

A0
x
x
x
x

Dispositivo
ROM 32K
ROM 8K-1
ROM 8K-2
Libre (16K)

A11
x
x
x
x
x

Memoria de datos
A10 A9
...
x
x
...
x
x
...
x
x
...
x
x
...
x
x
...

A1
x
x
x
x
x

A0
x
x
x
x
x

Dispositivo
RAM 16K-1
RAM 16K-2
RAM 8K
Libre (8K)
Libre (16K)

A2
x
x
x
x
x

Sistemas de decodificacin
completa
Circuito de decodificacin completa del
ejemplo anterior

Activar cada /CS slo si la direccin de la CPU


coincide con la parte constante del patrn
Memoria de programa
/CSROM32K = A15,
/CSROM8K-1 = /A15 OR A14 OR A13,
/CSROM8K-2 = /A15 OR A14 OR /A13

Memoria de datos
/CSRAM16K-1 = A15 OR A14,
/CSRAM16K-2 = A15 OR /A14,
/CSRAM8K = /A15 OR A14 OR A13

Sistemas de decodificacin
incompleta
Circuito de decodificacin incompleta

Permite reducir el circuito decodificador


Hay lneas que no se utilizan ni en la decodificacin
interna del dispositivo ni en la externa para generar /CS

Crea rplicas de las memorias / los dispositivos


Existen rplicas cuando utilizando ms de una direccin
de memoria en el uC se accede a la misma posicin
fsica de una memoria
Estas rplicas no suponen ningn problema

Suponiendo que en el Sw se ha tenido esto en cuenta!

Sistemas de decodificacin
incompleta
Circuito de decodificacin incompleta del
ejemplo anterior

Activar cada /CS con la parte ms pequea


posible de la parte fija del patrn de direcciones
Memoria de programa
/CSROM32K = A15,
/CSROM8K-1 = /A15 OR A14 OR A13 = /A15 OR A13,
/CSROM8K-2 = /A15 OR A14 OR /A13 = /A15 OR /A13,

Memoria de datos
/CSRAM16K-1 = A15 OR A14,
/CSRAM16K-2 = A15 OR /A14,
/CSRAM8K = /A15 OR A14 OR A13 = /A15

Sistemas de decodificacin
incompleta
Tabla de direcciones del circuito anterior...
A15
0
1
1
A15
0
0
1

A14
x
0
0
A14
0
1
0

A13
x
0
1
A13
x
x
0

A12
x
x
x
A12
x
x
x

A11
x
x
x

Memoria de programa
A10 A9
...
A2
x
x
...
x
x
x
...
x
x
x
...
x

A1
x
x
x

A0
x
x
x

Dispositivo
ROM 32K
ROM 8K-1
ROM 8K-2

A11
x
x
x

Memoria de datos
A10 A9
...
x
x
...
x
x
...
x
x
...

A1
x
x
x

A0
x
x
x

Dispositivo
RAM 16K-1
RAM 16K-2
RAM 8K

A2
x
x
x

Esta situacin la representaremos habitualmente como -:


Lnea no utilizada ni en la decodificacin del dispositivo (en la
generacin de /CS) ni internamente por el dispositivo

Sistemas de decodificacin
incompleta
Rplicas de las memorias del circuito anterior...
111111
111000
110111
110000
101111
101000
100111
100000

ROM 8K-2

Rplica

ROM 8K-1

Rplica

ROM 8K-2
ROM 8K-1

111111
111000
110111
110000
101111
101000
100111
100000

RAM 8K

Rplica

RAM 8K

Rplica

RAM 8K

Rplica

RAM 8K

011111

011111

RAM 16K-2
ROM 32K

010000
001111
RAM 16K-1

000000

000000

Sistemas de decodificacin Ejemplo


Ejemplo

Memorias del sistema


ROM 16K + RAM 16K + RAM 1K

Decodificacin con memoria segregada


Decodificacin con memoria combinada
Una sola lnea de lectura (programa + datos)

Memoria

Decodificacin completa
Decodificacin incompleta
Decodificacin

Segregada Combinada
Completa

Incompleta

Sistemas de decodificacin Ejemplo


ROM 16K + RAM 16K + RAM 1K

A15
0

A) Memoria segregada - Decodificacin completa


A14
0

A13
x

A12
x

A11
x

Memoria de programa
A10 A9
...
A2
x
x
...
x

A1
x

A0
x

Dispositivo
ROM 16K

A1
x
x

A0
x
x

Dispositivo
RAM 16K
RAM 1K

/CSROM16K = A15 or A14


A15
0
0

A14
0
1

A13
x
0

A12
x
0

A11
x
0

Memoria de datos
A10 A9
...
A2
x
x
...
x
0
x
...
x

/CSRAM16K = A15 or A14


/CSRAM1K = A15 or /A14 or A13 or A12 or A11 or A10

Sistemas de decodificacin Ejemplo


ROM 16K + RAM 16K + RAM 1K

A15
-

A14
0

B) Memoria segregada - Decodificacin incompleta


A13
x

A12
x

A11
x

Memoria de programa
A10 A9
...
A2
x
x
...
x

A1
x

A0
x

Dispositivo
ROM 16K

/CSROM16K = A14 (o tambin /CSROM16K = 0,


pero aumenta el consumo)
A15
-

A14
0
1

A13
x
-

A12
x
-

A11
x
-

Memoria de datos
A10 A9
...
A2
x
x
...
x
x
...
x

/CSRAM16K = A14
/CSRAM1K = /A14

A1
x
x

A0
x
x

Dispositivo
RAM 16K
RAM 1K

Sistemas de decodificacin Ejemplo


ROM 16K + RAM 16K + RAM 1K

A15
0
0
1

C) Memoria combinada - Decodificacin completa


A14
0
1
0

A13
x
x
0

A12
x
x
0

Memoria de programa / datos


A11 A10 A9
...
A2
x
x
x
...
x
x
x
x
...
x
0
0
x
...
x

A1
x
x
x

A0
x
x
x

/CSROM16K = A15 or A14,


/CSRAM16K = A15 or /A14, y
/CSRAM1K = /A15 or A14 or A13 or A12 or A11 or A10,
podra ser
A15
0
0
1

A14
0
1
0

A13
x
x
0

A12
x
x
0

Memoria de programa / datos


A11 A10 A9
...
A2
x
x
x
...
x
x
x
x
...
x
0
0
x
...
x

A1
x
x
x

A0
x
x
x

Dispositivo
ROM 16K
RAM 16K
RAM 1K

pero no
Dispositivo
RAM 16K
ROM 16K
RAM 1K

Sistemas de decodificacin Ejemplo


ROM 16K + RAM 16K + RAM 1K

A15
0
0
1

A14
0
1
0

D) Memoria combinada - Decodificacin


incompleta
A13
x
x
-

A12
x
x
-

Memoria de programa / datos


A11 A10 A9
...
A2
x
x
x
...
x
x
x
x
...
x
x
...
x

A1
x
x
x

A0
x
x
x

Dispositivo
ROM 16K
RAM 16K
RAM 1K

/CSROM16K = A15 or A14,


/CSRAM16K = /A15 or A14, y
/CSRAM1K = /A15 or /A14, y tambin podra ser
A15
0
1
1

A14
0
1

A13
x
x
-

A12
x
x
-

Memoria de programa / datos


A11 A10 A9
...
A2
x
x
x
...
x
x
x
x
...
x
x
...
x

A1
x
x
x

A0
x
x
x

Dispositivo
ROM 16K
RAM 16K
RAM 1K

Sistemas de decodificacin Ejercicios


Ejercicios

1.- ROM 32K + ROM 32K + RAM 32K + RAM


16K + RAM 8K + RAM 8K
Con memoria segregada y decodificacin completa

2.- ROM 16K + RAM 16K + RAM 8K + RAM 8K


Con memoria segregada/combinada y decodificacin
completa/incompleta

Sistemas de decodificacin Ejercicios


Ejercicios (cont.)

3.- ROM 16K + RAM 16K + 2x8255 + A/D de 16


bits y 4 canales con seleccin de byte (HBEN)
El 8255 ocupa 4 posiciones de byte (Ver esquema)
El convertidor A/D con 4 canales de 16 bits necesitar 8
posiciones de byte (Ver esquema)

HBEN distingue en el A/D cuando accedemos a la parte


alta de la conversin (HBEN = 1) o a la baja (HBEN = 0)

Con memoria combinada y decodificacin incompleta

Sistemas de decodificacin Ejercicios


Ejercicios (cont.)

3.- ROM 16K + RAM 16K + 2x8255 + A/D de 16


bits y 4 canales con seleccin de byte (HBEN)
8
2

DATOS
DIR
PPI 8255
/CS
/WR
/RD

8
2

DATOS
DIR
HBEN
Conv. A/D
/CS
/RD

Acceso a dispositivos de E/S


mapeados en memoria
Cuando hay espacio sin utilizar en el mapa de memoria
podemos utilizarlo para ubicar algn perifrico externo.
Declararemos una variable asignndole una posicin concreta
en la memoria:

xdata char salida at 0x8000;


code char registros[4] at 0xF000;

El decodificador de la memoria debe generar un /CS que se


active al acceder a las zonas de memoria asignadas al
perifrico.
Tambin se activarn las seales /RD /WR o /PSEN,
dependiendo del tipo de acceso y de la zona de memoria
(datos/cdigo)

Entradas mapeadas en memoria


Ejemplo: Mapear un integrado 244 en el mapa
de memoria
Es interesante si ya se usan memorias externas o
existen otros dispositivos mapeados en memoria

El mapeado no supone la sobrecarga adicional de los


buses de direcciones y datos, pues ya se usan

1 lnea adicional de seleccin (/CS244)

/CS244 se conecta a ambos /OE, y se leen las 8 entradas


en una sola operacin
/CS244 proviene del decodificador, no del uC

Sw para leer todas las entradas, para leer 1 entrada

Entradas mapeadas en memoria


Ejemplo (cont): Mapear un integrado 244 en el
mapa de memoria
D7-D0uC
4

E7-E0
DATOS

A15-A0uC
8

Circuito
Decodif.

/CS244
/RDuC
/WRuC

DIR
RAM-1
/CS
/RD
/WR

DATOS
DIR
RAM-2
/CS
/RD
/WR

Tambin podramos haber hecho /CS244 OR /RDuC para


activar el 244 y garantizar as que la operacin del uC es
una lectura

Entradas mapeadas en memoria


Ejemplo (cont): Mapear un integrado 244 en el
mapa de memoria
1.
2.

Sw para leer todas las entradas en un vector e


Sw para leer una entrada i

typedef unsigned char byte;

typedef unsigned char byte;

/* Variable global en dir. fija */


xdata byte ent_244 at 0x8000;
...
for (i=0; i < 8; i++) {
e[i] = (ent_244 >> i) & 0x01;
}

/* Variable global en dir. fija */


xdata byte ent_244 at 0x8000;
...
int leer_entr (int i) {
return (ent_244 >> i) & 0x01;
}

Salidas mapeadas en memoria


Ejemplo: Construir 3 salidas S0 a S2, de 4 bits
cada una, mapeando 3 latches
D7-D0uC

S0
4

S1
4

S2

Latch
Latch
Latch

LE
CSS1
LE
LE

CSS2

DIR
RAM-1
/CS

A15-A0uC
CSS0
Circuito
Decodif.
Activas a nivel
alto (como LE)

DATOS

/RDuC
/WRuC

/RD
/WR

Tambin podamos haber operando CSSi con AND


NOT(/WRuC)

DATOS
DIR
RAM-2
/CS
/RD
/WR

Salidas mapeadas en memoria


Ejemplo: Construir 3 salidas S0 a S2, de 4 bits
cada una, mapeando 3 latches
Sw para escribir en una salida s el dato d
/* Supondremos que el decodificador activa las
salidas /CS de los latches en las
direcciones 0x8000, 0x8001 y 0x8002
xdata byte salidas[3] at 0x8000;
void escribir_sal (int s, char dato) {
/* Esto genera un MOVX @DPTR, A con A = dato y
DPTR = 0x8000, 0x8001 0x8002 (en funcin de s)
salidas[s % 3] = dato; /* tambin dato & 0x0F
}

*/

*/
*/

Salidas mapeadas en memoria


Ejercicio: Disear una nueva solucin
Mapeando dos latches de 8 bits
S0 y S1 en el primer latch, S2 en el segundo
latch
Sw para escribir en una salida S el dato d

S-ar putea să vă placă și