Está en la página 1de 90

OBJETIVO: Dominar aspectos referidos a los programas y materiales de los sistemas a microprocesadores, en vista de sus aplicaciones industriales, principalmente

en el dominio de los automatismos. CONTENIDOS:


Programacin de un microprocesador: -Lenguaje assembler (juego de instrucciones, directivas) y lenguaje C -Edicin, ensamblaje, compilacin, depuracin. Las interfaces de entrada/salida -Roles de controladores en un sistema e inters particular de interfaces de E/S -Gestin de las entradas/salidas por polling e interrupcin. Gestin del tiempo y eventos: -Importancia de la medida del tiempo y del conteo de eventos en los sistemas industriales, ejemplos prcticos. -Rol y utilizacin de los circuitos counter-timer, watch-dog. Las conexiones serie: -Rol y utilizacin de sistemas de conexin serie en los sistemas industriales -Principio de funcionamiento de las conexiones en serie RS232 y CAN.

Bloques de un microcontrolador (C)

RAM

ROM

CPU

E/S

Bloques de un microcontrolador (2)


Puertos Puertos Paralelos TIMER2 Timers CPU E/S EEPROM CCP USB A/D
Perifricos bsicos
Perifricos comunes Perifricos especiales

PWM UART SPI I2C

RAM

ROM

CAN
Comps Analgicos

Int LCD

Sistema de Cmputo Programable

programa y datos ( constantes e intermedios ) almacenamiento de datos temporales

instrucciones datos

datos de entrada datos de salida

Interfaz E/S

Procesamiento de los datos

Arquitectura Von Neumann


n

bus de datos
D[(n-1)..0] D[(n-1)..0] D[(n-1)..0]

D[(n-1)..0]

CPU
A[(m-1)..0]

ROM
A[(m-1)..0]

RAM
A[(m-1)..0]

E/S
A[(m-1)..0]

bus de control
m

bus de direcciones

Data Bus: n bits Address Bus: m bits

BUS DE DATOS

BUS DE DIRECCIONES

8 bits para cdigo de instruccin (hasta 256)


8 bits para operandos (0..255) 8 16 bits para direcciones de operandos

Hasta 65536 posiciones RAM-ROM-ES

bit 15

bit 7
bit 0

bit 0

CPU
datos/instrucciones direcciones control

ROM

RAM

E/S

Ms de un ciclo de reloj por instruccin Repertorio de instrucciones complejo (CISC) Normalmente mayor capacidad de direccionamiento y de pila

Arquitectura Harvard
(C de Microchip, Atmel)

control direcciones de operandos datos (operandos)

ROM

CPU

RAM

E/S

Instrucciones (programa) direcciones de programa control

Instrucciones en un ciclo Repertorio de instrucciones reducido (RISC)

Arquitectura Harvard
(C de Microchip, Atmel)
bit 7 bit 0

control direcciones de operandos datos (operandos)

ROM

CPU

RAM

E/S

bit 13

Instrucciones (programa) direcciones de programa control Ej: en un C de 14 bits de ancho de instruccin (PIC 16xxx): 6 bits para cdigo de instruccin 8 bits para operandos constantes 8 bits para direcciones de operandos (RAM-E/S)

bit 0

CPU

ROM

RAM

E/S

CPU tipo Von Neumann


bus de Datos n

1
+ RE
selA

1 A

ALU

m
ckCP

CP

ckRD

RD

ckRI

RI

ckAC

AC

m
selB
0 1 B

n
ckCP ckRD ckRI ckAC selA selB

Unidad de Control

R/W

bus de Direcciones

Ejemplo: Un juego de instrucciones (1)


c o d 0 1 2 3 4 5 Mnemnico

Sintaxis

Explicacin
Carga constante k en el acumulador AC. El segundo byte es k. ACk AND bit a bit entre el contenido de AC y la constante k. El segundo byte es k. El resultado se carga en AC. ACAC and k OR bit a bit entre el contenido de AC y la constante k. El segundo byte es k. ACAC or k Resta al contenido de AC la constante k. El segundo byte es k. ACAC k Suma aritmtica entre el contenido de AC y la constante k. El segundo byte es k. ACAC + k Salto incondicional del programa. D es la direccin donde contina la ejecucin del programa. CP D

LEEC ANDC ORC RESTAC SUMAC SALTA

2 2 2 2 2 2

LEEC k ANDC k ORC k RESTAC k SUMAC k SALTA D

SALTAZ

SALTAZ D

Salto de programa si el resultado de la ltima operacin de la ALU es cero (bit Z del RE activado). D es la direccin donde contina la ejecucin del programa. CP D si Z=1
Salto de programa si el resultado de la ltima operacin de la ALU es negativo (bit N del RE activado). D es la direccin donde contina la ejecucin del programa. CP D si N=1

SALTAN

SALTAN D

juego de instrucciones (2)


c o d 8 9 Mnemnico

Sintaxis

Explicacin
Carga variable X en el acumulador AC. El segundo byte es la direccin de N. AC [X] AND bit a bit entre AC y la variable X. El segundo byte es la direccin de X. El resultado se carga en AC. ACAC and [X] OR bit a bit entre AC y la variable X. El segundo byte es la direccin de X. El resultado se carga en AC. ACAC or [X] Resta al contenido de AC la variable X.El segundo byte es la direccin de X. El resultado se carga en AC. ACAC - [X] Suma aritmtica entre el contenido de AC y la variable N. El segundo byte es la direccin de N. El resultado queda en AC. ACAC + [N]

LEE AND

2 LEE [X] 2 AND [X]

OR

2 OR [X]

RESTA

2 RESTA [X] 2 SUMA [X]

C SUMA

D NOT
E F ESCRIBE NOP

1 NOT
2 ESCRIBE [X] 1 NOP

Complementa a 1 el acumulador ACnot AC


Escribe en variable N el valor de AC. [N] AC No realiza operacin aritmtico-lgica. Slo se incrementa CP

CPU

ROM

RAM

E/S

Operacin a nivel registros


bus de Datos

RESET

00
1
+ RE ALU

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

01 02 03 04

selA

1 A

ckCP

CP

ckRD

RD

ckRI

RI

ckAC

AC

05

selB

1 B

Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

1 - Un reset pone al Contador de programa CP en cero (inicio de programa). La seal RW est en 1, por lo que la ROM/RAM es leda
bus de Datos
RESET

00
1
+ RE ALU

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

01 02 03 04

selA

ckCP

00

ckRD

RD

ckRI

RI

ckAC

AC

05

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

1b Por el Bus de direcciones se presenta el valor de CP (00). La RAM/ROM entrega en el bus de datos el valor que tiene en la posicin 00, en este caso 00, que es la instruccin LEEC (leer constante)
bus de Datos
RESET

00
1
+ RE ALU

00 01 02 03 04

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

selA

ckCP

00

ckRD

RD

ckRI

RI

ckAC

AC

05

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

00

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

2 Este valor es almacenado en el Registro de Instrucciones RI. La Unidad de Control decodifica la instruccin, y la ALU se pone en modo LEER (deja pasar el dato presente en su rama derecha)
bus de Datos
RESET

00
1
+ RE LEE

00 01 02 03 04

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

selA

ckCP

00

ckRD

RD

ckRI

00

ckAC

AC

05

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

00

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

3 El contador de programa CP se incrementa, por lo que ahora se direcciona la posicin 01 de la memoria

bus de Datos
RESET

06
1
+ RE LEE

00 01 02 03 04

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

selA

ckCP

01

ckRD

RD

ckRI

00

ckAC

AC

05

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

01

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

3b En esa posicin est la CONSTANTE a ser leda, en este caso 06

bus de Datos
RESET

06
1
+ RE LEE

00 01 02 03 04

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

selA

ckCP

01

ckRD

RD

ckRI

00

ckAC

AC

05

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

01

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALTA 06 SALTA Z 07 SALTA N 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCRI BE 0F NOP

4 Dicha constante se almacena en el acumulador AC

bus de Datos
RESET

06
1
+ RE LEE

00 01 02 03 04

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

selA

ckCP

01

ckRD

RD

ckRI

00

ckAC

06

05

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

01

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALTA 06 SALTA Z 07 SALTA N 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCRI BE 0F NOP

4b Una vez almacenada tambin est presente en la rama izquierda de la ALU y en la entrada del buffer Triestate

bus de Datos
RESET

06
1
+ RE LEE

00 01 02 03 04

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

selA

ckCP

01

ckRD

RD

ckRI

00

ckAC

06

05

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

01

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

5 El contador de programa CP se incrementa, por lo que ahora se direcciona la posicin 02 de la memoria

bus de Datos
RESET

0C
1
+ RE LEE

00 01 02 03 04

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

selA

ckCP

02

ckRD

RD

ckRI

00

ckAC

06

05

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

02

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

5b En esa posicin est el CDIGO de la siguiente instruccin en este caso 0C (Sumar variable)

bus de Datos
RESET

0C
1
+ RE LEE

00 01 02 03 04

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

selA

ckCP

02

ckRD

RD

ckRI

00

ckAC

06

05

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

02

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

6 Este valor es almacenado en el Registro de Instrucciones RI. La Unidad de Control decodifica la instruccin, y la ALU se pone en modo SUMAR (suma aritmtica de ambas ramas)
bus de Datos
RESET

0C
1
+ RE SUMA

00 01 02 03 04

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

selA

ckCP

02

ckRD

RD

ckRI

0C

ckAC

06

05

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

02

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

5 El contador de programa CP se incrementa, por lo que ahora se direcciona la posicin 03 de la memoria

bus de Datos
RESET

81
1
+ RE

00 01

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

06
SUMA

02 03 04

selA

ckCP

03

ckRD

RD

ckRI

00

ckAC

06

05

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

03

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

5b En esa posicin est la DIRECCIN de la variable a sumar, en este caso 81

bus de Datos
RESET

81
1
+ RE

00 01

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

06
SUMA

02 03 04

selA

ckCP

03

ckRD

RD

ckRI

00

ckAC

06

05

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

03

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

6 Dicha direccion se almacena en el Registro de Direcciones RD

bus de Datos
RESET

81
1
+ RE SUMA

00 01 02 03 04

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

selA

ckCP

03

ckRD

81

ckRI

00

ckAC

06

05

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

03

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

7 Moviendo selB el multiplexor inferior deja pasar el valor de RD (81) al bus de direcciones.

bus de Datos
RESET

15
1
+ RE

00 01

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

06
SUMA

02 03 1B 04 05

selA

ckCP

03

ckRD

81

ckRI

00

ckAC

06

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

81

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

7b La Memoria presenta el valor almacenado en dicha posicin, en este caso 15. La ALU, que est en modo suma, presenta el resultado de la misma a la entrada de AC, en este caso 06+15=1B (hexadecimal)
bus de Datos
RESET

15
1
+ RE

00

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

06
SUMA

15

01 02 03

selA

1B
ckCP

04 05

03

ckRD

81

ckRI

00

ckAC

06

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

81

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

8 El resultado se almacena en el acumulador

bus de Datos
RESET

15
1
+ RE

00

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

06
SUMA

15

01 02 03

selA

1B
ckCP

04 05

03

ckRD

81

ckRI

00

ckAC

1B

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

81

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

8b Una vez almacenado tambin est presente en la rama izquierda de la ALU y en la entrada del buffer Triestate

bus de Datos
RESET

15
1
+ RE

00

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

1B
SUMA

15

01 02 03 04

selA

ckCP

03

ckRD

81

ckRI

00

ckAC

1B

05

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

81

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

9 El contador de programa CP se incrementa y el selector selB vuelve a dejar pasar el CP al bus de direcciones por lo que ahora se direcciona la posicin 04 de la memoria
bus de Datos
RESET

0E
1
+ RE SUMA

00 01 02 03 04

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

selA

ckCP

04

ckRD

81

ckRI

00

ckAC

1B

05

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

04

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

9b En esa posicin est el CDIGO de la siguiente instruccin en este caso 0E (Escribir variable)

bus de Datos
RESET

0E
1
+ RE SUMA

00 01 02 03 04

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

selA

ckCP

04

ckRD

81

ckRI

00

ckAC

1B

05

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

04

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

10 Este valor es almacenado en el Registro de Instrucciones RI. La Unidad de Control decodifica la instruccin. La operacin que realice la ALU es indiferente.
bus de Datos
RESET

0E
1
+ RE ---

00 01 02 03 04

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

selA

ckCP

04

ckRD

81

ckRI

0E

ckAC

1B

05

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

04

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

11 El contador de programa CP se incrementa, por lo que ahora se direcciona la posicin 05 de la memoria

bus de Datos
RESET

82
1
+ RE ---

00 01 02 03 04

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

selA

ckCP

05

ckRD

81

ckRI

0E

ckAC

1B

05

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

05

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

11b Esa posicin (82) es la DIRECCIN donde debe escribirse lo que contiene el acumulador

bus de Datos
RESET

82
1
+ RE ---

00 01 02 03 04

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

selA

ckCP

05

ckRD

81

ckRI

00

ckAC

1B

05

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

05

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

12 Dicha direccion se almacena en el Registro de Direcciones RD

bus de Datos
RESET

82
1
+ RE ---

00 01 02 03 04

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

selA

ckCP

05

ckRD

82

ckRI

00

ckAC

1B

05

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

05

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

13 Moviendo selB el multiplexor inferior deja pasar el valor de RD (82) al bus de direcciones.

bus de Datos
RESET

??
1
+ RE ---

00 01 02 03 04

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

selA

ckCP

05

ckRD

82

ckRI

00

ckAC

1B

05

selB

1 B

Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

82

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

14 Al poner la seal R/-W en 0 el buffer Triestate deja pasar el valor del acumulador (1B) al Bus de Datos. Al mismo tiempo pone a la RAM en modo escritura. El dato (1B) se escribe en la posicin 82
bus de Datos
RESET

1B
1
+ RE ---

00 01 02 03 04

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

selA

ckCP

05

ckRD

82

ckRI

00

ckAC

1B

05

selB

1 B

Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 1B

X Y

82

82

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

Seales de control para la operacin Y=6+X

reset LEEC 6 (AC 6 )


1 2 3/4 5 6 7 8 9 10 11

SUMA [X]
12 13 14 15

(ACAC+b) 16 17 18

ESCRIBIR [Y]
19 20

([Y]AC)

clkRI
clkCP

clkRD selB

clkAC
R/W bus direcc bus datos

00

01 6

02
0C(suma)

03
81(dir B)

81
15(B)

04
0E(escrib)

05 82(dir C)

82
1B

06
....

08 (lee)

Seales de control para la operacin C=A+B

reset LEEC [a]


1 2 3/4 5 6 7

(ACa) 8

SUMA [b]
9 10 11 12 13 14

(ACAC+b) 15 16 17

ESCRIBIR [c]
18 19 20

([c]AC)

clkRI
clkCP

clkRD selB

clkAC
R/W bus direcc bus datos

00

01
81(dir A)

81 15

02
0C(suma)

03
82(dir B)

82
1A(B)

04
0E(escrib)

05
83(dir C)

83
2F

06
....

08 (lee)

Operacin de Salto
1-El CP apunta a la direccin 31 donde hay una instruccin de salto

bus de Datos
RESET

05
1
+ RE ALU

30 31 32 33 34 05 40 ---SALTA 40 ----

selA

ckCP

31

ckRD

RD

ckRI

RI

ckAC

AC

35

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

40
R/W

00 91

LEE [91]

41

04

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

Operacin de Salto
2-La instruccin de salto se presenta en el Bus de Datos

bus de Datos
RESET

05
1
+ RE ALU

30 31 32 33 34 05 40 ---SALTA 40 ----

selA

ckCP

31

ckRD

RD

ckRI

RI

ckAC

AC

35

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

40
R/W

00 91

LEE [91]

41

04

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

Operacin de Salto
3-La instruccin de salto se carga en el RI La ALU es indiferente

bus de Datos
RESET

05
1
+ RE --

30 31 32 33 34 05 40 ---SALTA 40 ----

selA

ckCP

31

ckRD

RD

ckRI

05

ckAC

AC

35

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

40
R/W

00 91

LEE [91]

41

04

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

Operacin de Salto
4-El CP se incrementa y apunta a 32, donde se encuentra la direccin de destino del salto (en este ejemplo 40)
bus de Datos
RESET

40
1
+ RE ---

30 31 32 33 34 05 40 ---SALTA 40 ----

selA

ckCP

32

ckRD

RD

ckRI

RI

ckAC

AC

35

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

40
R/W

00 91

LEE [91]

41

32

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

Operacin de Salto
5-La direccin de destino del salto (en este ejemplo 40) se presenta en el bus de datos
bus de Datos
RESET

40
1
+ RE ---

30 31 32 33 34 05 40 ---SALTA 40 ----

selA

ckCP

32

ckRD

RD

ckRI

RI

ckAC

AC

35

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

40
R/W

00 91

LEE [91]

41

32

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

Operacin de Salto
6-El multiplexor A selecciona el bus de datos (en vez de CP+1)

bus de Datos
RESET

40
1
+ RE ---

30 31 32 33 34 05 40 ---SALTA 40 ----

selA

ckCP

32

ckRD

RD

ckRI

RI

ckAC

AC

35

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

40
R/W

00 91

LEE [91]

41

32

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

Operacin de Salto
7- Al dar clock a CP, ste adopta el valor 40. El programa contina en dicha direccin.
bus de Datos
RESET

08
1
+ RE ---

30 31 32 33 34 05 40 ---SALTA 40 ----

selA

ckCP

40

ckRD

RD

ckRI

RI

ckAC

AC

35

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

40
R/W

08 91

LEE [91]

41

40

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

Operacin de Salto
8-El multiplexor A vuelve a la posicin habitual (CP+1). Se apunta a la instruccin Lee
bus de Datos
RESET

08
1
+ RE ---

30 31 32 33 34 05 40 ---SALTA 40 ----

selA

ckCP

40

ckRD

RD

ckRI

RI

ckAC

AC

35

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

40
R/W

08 91

LEE [91]

41

40

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

Operacin de Salto
(...) Cuando se produce un nuevo clock en CP ste se incrementa al valor 41
bus de Datos
RESET

91
1
+ RE ---

30 31 32 33 34 05 40 ---SALTA 40 ----

selA

ckCP

41

ckRD

RD

ckRI

Lee

ckAC

AC

35

selB
Unidad de Control

ckCP ckRD ckRI ckAC selA selB

40
R/W

08 91

LEE [91]

41

41

bus de Direcciones
00 LEEC 01 ANDC 02 ORC 03 REST AC 04 SUMA C 05 SALT A 06 SALT AZ 07 SALT AN 08 LEE 09 AND 0A OR 0B REST A 0C SUMA 0D NOT 0E ESCR IBE 0F NOP

Llamados a subrutina

LEE ESCRIBE

[A] [dividendo]

LEE
ESCRIBE LLAMA LEE

[B]
[divisor] division [cociente] division LEE RESTA [dividendo] [divisor]

ESCRIBE
LEE ESCRIBE LEE ESCRIBE LLAMA LEE [C] [dividendo] [D] [divisor] division [cociente] RETORNA

[cociente]

Llamados a subrutina:
Hardware que no soporta llamado a subrutina

bus de Datos
RESET

00
1
+ RE ALU

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

01 02 03 04

selA

1 A

ckCP

CP

ckRD

RD

ckRI

RI

ckAC

AC

05

selB

1 B

Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

bus de Direcciones

Llamados a subrutina:
Hardware que soporta 1 nivel de llamado a subrutina

bus de Datos
RESET

00
1
+ RE ALU

00 06 0C 81 0E 82

LEEC 6 SUMA [X] ESCRIBE [Y]

01 02 03 04

selA

1 A

ckCP

CP

ckRD

RD

ckRI

RI

ckAC

AC

05

CP2

selB

1 B

Unidad de Control

ckCP ckRD ckRI ckAC selA selB

81
R/W

15 ??

X Y

82

bus de Direcciones

Llamados a subrutina:
Subrutinas anidadas
subC llama {subA}

subA

subB
llama {subC} retorna

llama {subB}

subD
llama {subA} llama {subD} llama {subE}

llama {subB}

retorna llama {subA} retorna

retorna

Resumen
Un sistema de cmputo programable est constituido por una unidad de Procesamiento, una unidad de Memoria y una interfaz de E/S. El modo en que se implementa este sistema da lugar a las arquitecturas Harvard o Von Neumann. Esta ltima es la que se ha analizado porque es la ms utilizada. Un sistema con arquitectura Von Neumann tiene una nica memoria para instrucciones y datos, una unidad de procesamiento y una unidad de E/S, conectados por 3 buses: de datos, de direcciones y de control. El bus de datos transfiere tanto instrucciones de programa como datos. Un P es bsicamente un conjunto de registros, dispositivos de seleccin, una ALU y una Unidad de Control UC, que es un circuito generador de secuencias, que se denomina tambin Mquina de Estados. La UC de un P elemental con un reducido repertorio de instrucciones 16 en nuestro ejemplodebe realizar para cada una de ellas alguno de estos cuatro tipos de secuencia: de lectura inmediata (LEEC ANDC ..) , de lectura direccionada (LEE AND SUMA ...), de escritura o de salto. Una instruccin tpica est compuesta por dos campos, un campo cdigo de operacin (qu hay que hacer) y un campo operando (dato para ejecutar dicha operacin). El campo operando puede ser el valor con el cual operar (instrucciones de lectura inmediata), o la direccin de memoria de datos donde se encuentra el valor a operar (instrucciones de lectura direccionada o de escritura), o la direccin de memoria donde debe continuar el programa (instrucciones de salto). El uso de llamado a subrutinas (y el correspondiente retorno) permite escribir programas ms cortos, escribiendo una sola vez las rutinas ms utilizadas. Para el retorno se requiere resguardar el contador de programa. En un esquema de subrutinas anidadas es necesario contar con una pila y un puntero de pila.

Microcontroladores

PIC 16F83/84

Bloques de un microcontrolador (2)

RAM

ROM
Puertos Puertos Paralelos PWM UART SPI I2C CCP USB A/D CAN
Comps Analgicos

CPU

E/S

TIMER2 Timers EEPROM

Int LCD

ROM PROG
RAM

CPU

E/S

16F8x

Caractersticas de los modelos 16F8x

PIC 16F627/628/648

ROM PROG

16F627/628/648
RAM

CPU

E/S

Caractersticas de los modelos 16F6xx

PIC 16F873/876/874/877

ROM PROG

RAM

CPU

E/S

Caractersticas de los modelos 16F87x

Algunos C de 14 bits (12F y 16F)

Estructura general de un programa


CONFIGURACIN Elegir los pines E/S de acuerdo a un esquema y los perifricos a utilizar en la aplicacin (timers, puerto serie etc). Escribir los registros de activacin y configuracin de E/S y perifricos INICIALIZACIN Poner los perifricos y las E/S en un estado inicial adecuado (ej. las salidas en 0) CICLO DE SCAN El programa principal, que por lo general se ejecuta cclicamente.
Reset Inicializa E/S y activa perifricos Inicializa perifricos

Configuracin

Inicializacin

Ciclo principal

Ciclo de scan

Terminar?

Fin

Lenguajes de Programacin de C
ALTO NIVEL (C, Basic, Pascal) Ensamblador (assembler)
Requiere compilador Cdigo portable Comprensible. Facilidad para trabajar programas grandes, operaciones aritmticas y de formateo de datos. Traduccin directa a lenguaje de mquina. Especfico del Hardware Difcil seguimiento y concepcin de programas grandes

Los compiladores incluyen Debe manipularse los registros funciones para manejo de perifricos. que controlan cada perifrico. Menos eficiente en velocidad y en tamao del cdigo. Puede optimizarse en velocidad y tamao.

Se suele utilizar lenguaje de alto nivel, con rutinas crticas en assembler

Lenguaje C Ej01.C

PC

Lenguaje Assembler Ej01.ASM

compilar

Lenguaje Mquina Ej01.HEX

ensamblar desensamblar

grabar

leer

Grabador ISP

Programacin de un automatismo
Ejemplo: Portn automtico

PA PC FCA
R2 R1

FCC

PA: Pulsador para abrir PC: Pulsador para cerrar FCA: Final de carrera al abrir FCC: Final de carrera al cerrar R1, R2: Rels para giro directo-inverso de motor

Programacin de un automatismo
Ejemplo: Portn automtico
PA

PC
FCA

R1

R2

FCC

Comportamiento del automatismo: El portn se encuentra en Reposo. Si se pulsa PA el portn se debe abrir, y parar cuando se detecta FCA.

Si se pulsa PC el portn se debe cerrar, y parar cuando se detecta FCC.


Opciones: Se supone el portn inicialmente cerrado? Se cierra inicialmente? Mientras el portn se est moviendo ignora los pulsadores? (SI/NO)

Diagrama de Estados
Leyendo la descripcin del funcionamiento se reconocen 3 estados. Reposo: El motor est detenido (portn abierto o cerrado). R1=R2=0

Abre: El motor gira en sentido de abrir portn R1=1 R2=0


Cierra: El motor gira en sentido de cerrar portn R1=0 R2=1

Reposo R1=0 R2=0

Abre R1=1 R2=0

Cierra R1=0 R2=1

Diagrama de Estados (2)


Ejemplo: Portn automtico Opcin: Supone portn inicialmente cerrado
Inicial

Reposo FCA PA Abre FCC Cierra

PC

Diagrama de Estados (3)


Ejemplo: Portn automtico Opcin: Inicialmente se cierra
Inicial Reposo FCA PA Abre FCC Cierra

PC

Diagrama de Estados (4)


Ejemplo: Portn automtico Opcin: Atiende pulsadores para invertir marcha
Inicial Reposo FCA PA Abre FCC Cierra

PC

PA
PC

Diagrama de Estados (5)


Ejemplo: Portn automtico Opcin: Atiende pulsadores para invertir marcha pero previamente pasa por Reposo
Inicial Reposo FCA PC Abre PA FCC Cierra

PC
PA

Diagrama de Flujo
Inicial Inicial

Reposo FCA PA Abre FCC Cierra R1=1 R2=0


1

R1=0 R2=0
PC
1 0

PA
0

PC R1=0 R2=1

FCA

FCC

Relacin entre Diagramas


Inicial Inicial

Reposo FCA PA Abre FCC Cierra R1=1 R2=0


1

R1=0 R2=0
PC
1 0

PA
0

PC

R1=0 R2=1
0 0

FCA

FCC

Codificacin en BASIC
REPOSO:

Inicial R1=0 R2=0


1

REPOSO2:

PA
0

ABRE: ABRE2:

PC R1=0 R2=1
CIERRA:

R1=1 R2=0
1

FCA

FCC

CIERRA2:

R1=0 R2=0 IF PA=1 THEN GOTO ABRE END IF IF PC=1 THEN GOTO CIERRA END IF GOTO REPOSO2 R1=1 R2=0 IF FCA=1 THEN GOTO REPOSO END IF GOTO ABRE2 R1=0 R2=1 IF FCC=1 THEN GOTO REPOSO END IF GOTO CIERRA2

Conceptos bsicos de desarrollo en entorno PICC

Cdigo Fuente

Lenguaje C Ej01.C

PC

Lenguaje Assembler Cdigo Ej01.ASM Fuente

compilar Cdigo Objeto

Lenguaje Mquina Ej01.HEX

ensamblar desensamblar

grabar

leer

Grabador ISP

Entorno de Desarrollo (IDE) del PICC Creacin de proyecto

Entorno de Desarrollo (IDE) del PICC Creacin de proyecto


Modelo Reloj

Para configurar durante la grabacin

Para configurar perifricos (segn C)

Entorno de Desarrollo (IDE) del PICC Archivo principal

Archivo de cabecera (header)

Rutina Principal
Cdigo insertado por el asistente Punto de insercin de cdigo

Entorno de Desarrollo (IDE) del PICC Archivo cabecera

Para ver archivo de cabecera usar men contextual

Entorno de Desarrollo (IDE) del PICC Archivo cabecera

Ejemplo: Sumador por puerto serie

Datos A,B

Rx Tx

Usuario
Resultado C=A+B

A travs de Rx (receptor serie) el microcontrolador recibe los datos A y B, los suma y transmite el resultado por Tx (transmisor serie)

Ejemplo: Sumador por puerto serie


Programa en C

Ejemplo: Sumador por puerto serie


Programa en assembler (fragmento)

Ejemplo: Sumador por puerto serie


Cdigo de mquina

Direccin Cdigo de Equivalente Assembler en ROM mquina

00 1000 0010 0111 0 8 2 7

Ejemplo: Sumador por puerto serie


Archivo .HEX para grabar microcontrolador

También podría gustarte