You are on page 1of 23

Arquitectura y mapa de memoria del 80C167

Cesreo Fernndez Martnez lvaro Snchez Miralles

Introduccin

Microcontrolador (Embedded Processor) de 16 bits


ALU y Registros de 16 bits

Diseado para tareas de control industrial


Robusto frente al ruido electromagntico

Rango direccionamiento: 16 Mbytes (memoria) Con memoria RAM interna


Ciertas versiones disponen tambin de ROM interna

Con muchos dispositivos integrados en el chip


Controladores de comunicaciones serie Puertos paralelo Temporizadores (timers) Convertidor analgico/digital (A/D) Moduladores PWM (electrnica de potencia).

Ttulo Presentacin - 2

Modelo de programador del 167

Memoria FF FFFF
R7 R6 R5 R4 R3 R2 R1 R0

CPU Registros
R15 R14 R13 R12 R11 R10 R9 R8 PC PSW SP

(SFRs)

00 0001 00 0000

(GPRs)

00 FE00

00 FE02

I/O (SFRs)

00 FE0X

Ttulo Presentacin - 3

Memoria
Organizada en celdas de 1 BYTE (8 bits). Cul es el valor mximo que se puede almacenar en una celda? Cada byte tiene su DIRECCIN Dada en 24 bits (16 Mbytes) Cuando se habla de direcciones en clase siempre por defecto estn en hexadecimal y con 24 bits. A veces se obvian los ceros a la izquierda. Ejemplo: 00 05FF se suele escribir 5FF Se accede a la memoria usando la direccin Lectura/escritura (datos/direcciones: 1s y 0s)

dato = READ (direccin) WRITE(dato, direccin)


Registros (CPU): Posiciones de memoria de acceso rpido I/O. En el 167 el acceso a puertos es similar al acceso a memoria
Ttulo Presentacin - 4

Primer ejemplo Suma de dos datos en ASS 167 Suma (0x100)+(0x102) en (0x104)

MOV MOV ADD MOV

R0,0x100 R0,0x102 R1,R0 0x104,R1

; READ ; READ ;WRITE

Para llenar R0 hacen falta dos bytes! (2 bytes por dato)


En direcciones consecutivas de memoria (0x100/0x101) Parte baja del dato (en R0) en direccin par
Ttulo Presentacin - 5

Programas en C y Ensamblador Primer ejemplo: bucle for En lenguaje C


for (i=1; i <=N; i++) j += 1;

En lenguaje ensamblador
Direccin inicial del programa
500 502 504 506 508 50C 50E 510

N = 5; j en 00FA00 H
E0 E0 48 AD 04 08 0D 10 11 05 05 F1 00 FA 01 FA MOV MOV CMP JMPR ADD ADD JMPR R0,#1 R1,#1 R0,#5 cc_sgt,0x510 0xfa00,R1 R0,#1 cc_uc,0x504 ; ; ; ; ; ; ; r0 (i) auxiliar if i>N then goto 512H j += 1 i += 1 salto sin condicin

Direccin de memoria

Codificacin de la instruccin
Ttulo Presentacin - 6

Notas
En Ensamblador ms largo que en C Lnea ensamblador = operacin elemental mov de un dato de memoria-registro (registromemoria) Suma dos datos Compara dos datos Saltos (con y sin condicin) Las instrucciones se almacenan en memoria en formato BINARIO (1s y 0s) Las instrucciones ocupan 2 4 bytes Las instrucciones se almacenan en posiciones de memoria CONSECUTIVAS. Se ejecutan en orden Salvo el los saltos La DIRECCIN (de memoria) de la prxima instruccin a ejecutar se almacena en el PC (Contador de Programa)

Ttulo Presentacin - 7

Cmo se ejecuta un programa?


Dos pasos: Captura de la instruccin (Instruction Fetch, usando el PC) Ejecucin (usando la ALU)

Fetch: Trae la instruccin de memoria, incrementa PC CPU = MEM(PC); PC++; Execute: La ALU realiza la operacin (suma, resta, etc.)
Ttulo Presentacin - 8

Programa ensamblador Traduce las instrucciones de pnemnico a binario Por ejemplo, la instruccin
MOV R0,#1

Se convierte en (Codificacin de instrucciones)


E0 10

Tipos de ensambladores
De lnea: No soporta etiquetas (reside en el monitor de la tarjeta) De PC: Soporta etiquetas (reside en el PC)

Ttulo Presentacin - 9

Ejemplo con etiquetas (ensamblador en PC) Las etiquetas facilitan la programacin en ASS
Etiquetas (op)
bucle:

En PC
MOV MOV CMP JMPR ADD ADD JMPS R0,#1 R1,#1 R0,#5 cc_sgt,fin 0xfa00H,R1 R0,#1 bucle ; ; ; ; ; ; ; r0 (i) auxiliar if i>N then goto fin j += 1 i += 1 = jmpr cc_uc,

fin:

Instruccin
500 502 504 506 508 50C 50E 510 MOV MOV CMP JMPR ADD ADD JMPR

Operandos En lnea
R0,#1 R1,#1 R0,#5 cc_sgt,0x510 0xfa00,R1 R0,#1 cc_uc,0x504 ; ; ; ;

Comentarios (opcional)
r0 (i) auxiliar if i>N then goto 512H ; j += 1 ; i += 1 ; salto sin condicin

Ttulo Presentacin - 10

Instrucciones y operandos (resumen) Operaciones


Transferencia: mov Aritmticas: add, sub, cmp, neg, mul, div Lgicas: and, or, not Desplazamientos: shr, shl Saltos: jmpr cc_uc (cc_eq, cc_ne, cc_ugt, cc_sgt, cc_ule, ...)

Nmeros
Decimal 14 Hexadecimal 0xE 0E H (0 por delante si empiezan por letra) Binario 00001110 B
Ttulo Presentacin - 11

Instruccin MOV
Directo a registro mov r0,r1 ; R0 <- R1 Inmediato mov r0,#3 ; R0 <- 3 (no olvidar # !) directo a memoria mov r0,0fa00H ; R0 <- Mem[fa00 H] Indirecto (normal, post-incremento, pre-decremento) mov r0,[r1] ; R0 <- Mem[R1] (R1 Puntero) mov r0,[r1+] ; R0 <- Mem[R1], R1 <- R1 + 2 mov r0,[-r1] ; R1 <- R1 - 2, R0 <- Mem[R1] mov r0,[r1+#4] ; R0 <- Mem[R1+#4] A nivel de byte movb rl0,#3 ; R0 <- 3 movb rh0,[r1+] ; R0 <- Mem[R1], R1 <- R1 + 1

Ttulo Presentacin - 12

Tipos de instrucciones
Aritmticas Add, Sub, Neg, Cmp, Mul add r0,r1 ; R0 <- R0 + R1 Saltos JMPR va precedido de CMP (compara), de forma que despus de comparar se realiza el salto segn una condicin.
CMP JMPR .... next: R0,R1 cc_ugt,next ;si R0 > R1

JMPR: Con condicin, sin condicin (unconditional)


Jmpr cc_eq, dir (equal, salta si igual) Jmpr cc_uc, dir (unconditional, salta siempre) Jmpr cc_ne, dir (not equal, salta si no igual) Jmpr cc_ugt, dir (unsigned greater than) Jmpr cc_sgt, dir (signed greater than) Jmpr cc_ule, dir (unsigned less or equal) ...
Ttulo Presentacin - 13

Ms ejemplos if ( )
Alto nivel

if (a == b) a = 0;

Ensamblador
MOV CMP JMPR MOV MOV next: R0,a R0,b cc_ne,next R0,#0 a,R0

Ttulo Presentacin - 14

Otro ejemplo while ( )


Alto nivel
i = 0; while (i<10) { a[i] = i; i += 1; }

Ensamblador
MOV MOV MOV CMP JMPR MOV ADD ADD JMPR R0,#0 R1,#1 R2,#0fa00h R0,#10 cc_sge,next [R2],R0 R0,R1 R2,#2 cc_uc, otro

otro:

next:

Ttulo Presentacin - 15

Mapa de memoria del 80C167

Mapa de memoria del 80C167 Segmentada, en cdigo. Paginada en datos.


FF FFFF FFFF

Pgina 3 (RAM Interna) 255 Segmentos de 64 kB

C000

Pgina 2
8000

16 Mb

Pgina 1 (RAM ext) S1 64Kb


01 0000 00 0000 4000

S0 64Kb

16 Kb

Pgina 0 (RAM ext)


0000

Hay versiones con ROM interna


Ttulo Presentacin - 17

Pgina 3: RAM interna + SFRs


Los registros de control de los perifricos estn en P3. Reciben el nombre de Special Function Registers (SFRs).
FFFF

SFRs acceso bit a bit SFRs SFRs


FE00 FF00

Acceso bit a bit


FD00

GPRs RAM STACK


F600 FC00

Cuntos registros caben?

Los General Purpose Registers (GPRs) son los registros R0 a R15


Ttulo Presentacin - 18

GPRs: General Purpose Registers Registros de propsito general (R0 a R15) Son de 16 bits
Los 8 primeros registros (R0 a R7) se pueden acceder a nivel de byte (8 bits). En este caso reciben los nombres: RL0 y RH0 (para R0) Los 4 primeros registros (R0 a R3) pueden almacenar direcciones (punteros)

Ubicados en la zona (0xFC00 H a 0xFD00 H) Se puede reubicar el banco de registros (los 16) en esta zona de memoria actuando sobre el registro (SFR):
CP (Contex Pointer) (SFR) CP inicial = 0xFC00
Ttulo Presentacin - 19

CP: Contex Pointer


Direcci n Dato ... ... 4400 FF00 FC04 A050 1034 Dato ... R4 ... 4400 FF00 FC04 A050 1034
Ttulo Presentacin - 20

Si CP = FC00, Qu vale 'a'?


... MOV MOV ... CP,#0FC00 H a, R0

... FC08 FC06 FC04 FC02 FC00

R4 R3 R2 R1 R0

Si CP = FC04, Qu vale 'a'?


... MOV MOV ... CP,#0FC04 H a, R0

Direcci n ... FC08 FC06 FC04 FC02 FC00

R3 R2 R1 R0

SFRs: Special Function Registers PSW (Processor Status Word). Contiene los flags, cdigos de condicin (para instrucciones de salto. P.e. jmpr cc_eq,dir)
N: Negative C: Carry (acarreo) V: Overflow (nmeros con signo) Z: Zero

SP (Stack Pointer)
Apunta a la zona de Stack (0xF600 a 0xFC00, crece hacia abajo).

Otros: Control de perifricos (p.e. Las luces en 0xFFC0)

Ttulo Presentacin - 21

PC: Program Counter Contador de programa (PC). 24 bits para el C167


IP: Instruction Pointer (16 bits, apunta dentro del segmento) CSP: Code Segment Pointer (8 bits, apunta al segmento en uso)
8 bits
FF FFFF

Si PC = 01 0000
CSP IP

CSP indica el segmento en uso de los 255 posibles

Segmentos

01
IP indica la zona del segmento en uso de las 64k posibles

0000

S1 64Kb
01 0000 00 0000

S0 64Kb

16 bits

Ttulo Presentacin - 22

DPPs: Data Page Pointer Registers Acceso a memoria


MOV R0, 0x100 ; R0 <- Mem(100)

Y si el dato est fuera del primer segmento? La direccin del dato tiene ms de 16bits. Por ejemplo: R0 <- Mem(0x0A7000)

Solucin: DPPs 10 bits. Hay 4: DPP0, DPP1, DPP2 y


DPP3.
DPP0 10bits

0000 1010 01 11 0000 0000 0000


Segmento seleccionado Nmero de DPP seleccionado DPP2 10bits

00 11 0000 0000 0000


Pgina seleccionada

MOV MOV

DPP0, #0x29 R0, 0x3000

0000 1010 01 11 0000 0000 0000 10 11 0000 0000 0000

MOV MOV

DPP2, #0x29 R0, 0xB000

Ttulo Presentacin - 23

You might also like