Você está na página 1de 107

INSTITUTO POLITCNICO NACIONAL

Escuela Superior de Ingeniera Mecnica y Elctrica.

EL MICROCONTROLADOR PIC16F84 Y SU
APLICACION EN LAS COMUNICACIONES

TESIS
PARA OBTENER EL GRADO DE
INGENIERO EN COMUNICACIONES Y ELECTRONICA

P R E S E N T A N
ALVARADO CORONA RAFAEL
BOLAOS RODRGUEZ BEATRIZ ANGELICA
URZUA OSORIO DAGOBERTO

DIRECTOR DE TESIS
DR. PRIMITIVO REYES LOPEZ

Mxico, DF.

Mayo del 2004

INSTITUTO POLITCNICO NACIONAL


ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA
UNIDAD PROFESIONAL ADOLFO LPEZ MATEOS
REPORTE TCNICO
QUE PARA OBTENER EL TITULO DE
POR LA OPCIN DE TITULACIN
DEBERA(N) DESARROLLAR

INGENIERO EN COMUNICACIONES Y
ELECTRONICA
SEMINARIO DE TITULACIN
C. ALVARADO CORONA RAFAEL
C. BOLAOS RODRGUEZ BEATRIZ
ANGELICA
C. URZUA OSORIO DAGOBERTO

EL MICROCONTROLADOR PIC16F84 Y SU
APLICACION EN LAS COMUNICACIONES

OBJETIVO:
Mostrar el marco terico sobre el amplio campo de aplicacin de este
microcontrolador y destacar sus posibilidades de uso en las Comunicaciones.

INTRODUCCIN
JUSTIFICACIN
CONCEPTOS BASICOS Y FUNDAMENTOS GENERALES

2 LOS MICROCONTROLADORES Y EL PIC 16F84 .


3
4

PROGRAMADORES
DESARROLLO DE CIRCUITOS
REFERENCIAS BIBLIOGRAFICAS

INTRODUCCIN AL MICROCONTROLADOR
Qu es un microcontrolador?
Un microcontrolador es un dispositivo electrnico capaz de llevar a cabo procesos
lgicos. Estos procesos o acciones son programados en lenguaje ensamblador
por el usuario, y son introducidos en este a travs de un programador. A lo largo
de esta tesis veremos todos los reglas y trucos de este lenguaje complicado por su
sencillez.

Un poco de historia
Inicialmente cuando no existan los microprocesadores las personas se ingeniaban
en disear sus circuitos electrnicos y los resultados estaban expresados en
diseos

que

implicaban

muchos

componentes

electrnicos

clculos

matemticos. Un circuito lgico bsico requera de muchos elementos electrnicos


basados en transistores, resistencias, etc, lo cual desembocaba en circuitos con
muchos ajustes y fallos; pero en el ao 1971 apareci el primer microprocesador
el cual origin un cambio decisivo en las tcnicas de diseo de la mayora de los
equipos. Al principio se crea que el manejo de un microprocesador era para
aquellas personas con un coeficiente intelectual muy alto; por lo contrario con la
aparicin de este circuito integrado todo sera mucho ms fcil de entender y los
diseos electrnicos serian mucho ms pequeos y simplificados. Entre los
microprocesadores mas conocidos tenemos el popular Z-80 y el 8085. Los
diseadores de equipos electrnicos ahora tenan equipos que podan realizar
mayor cantidad de tareas en menos tiempo y su tamao se redujo
considerablemente; sin embargo, despus de cierto tiempo aparece una nueva
tecnologa llamada microcontrolador que simplifica aun mas el diseo electrnico.

Diferencias entre microprocesador y microcontrolador


Si has tenido la oportunidad de realizar un diseo con un microprocesador pudiste
observar que dependiendo del circuito se requeran algunos circuitos integrados
adicionales adems del microprocesador como por ejemplo: memorias RAM para
almacenar los datos temporalmente y memorias ROM para almacenar el programa
que se encargara del proceso del equipo, un circuito integrado para los puertos de
entrada y salida y finalmente un decodificador de direcciones.

Figura 1. Estructura de un sistema abierto basado en un microprocesador. La


disponibilidad de los buses en el exterior permite que se configure a la medida de
la aplicacin.
Un microcontrolador es un solo circuito integrado que contiene todos los
elementos electrnicos que se utilizaban para hacer funcionar un sistema basado
con un microprocesador; es decir; contiene en un solo integrado la Unidad de
Proceso, la memoria RAM, memoria ROM, puertos de entrada, salidas y otros
perifricos, con la consiguiente reduccin de espacio.
El microcontrolador es en definitiva un circuito integrado que incluye todos los
componentes de un computador. Debido a su reducido tamao es posible montar
4

el controlador en el propio dispositivo al que gobierna. En este caso el controlador


recibe el nombre de controlador empotrado (embedded controller).

Figura 2. El microcontrolador es un sistema cerrado. Todas las partes del


procesador estn contenidas en su interior y slo salen al exterior las lneas que
gobiernan los perifricos.
Ventajas de un microcontrolador frente a un microprocesador
Estas ventajas son reconocidas inmediatamente para aquellas personas que han
trabajado con los microprocesadores y despus pasaron a trabajar con los
microcontroladores. Estas son las diferencias ms importantes:
Por ejemplo la configuracin mnima bsica de un microprocesador estaba
constituida por un Micro de 40 Pines, Una memoria RAM de 28 Pines, una
memoria ROM de 28 Pines y un decodificador de direcciones de 18 pines; pero un
microcontrolador incluye todo estos elementos en un solo Circuito Integrado por lo
que implica una gran ventaja en varios factores: En el circuito impreso por su
amplia simplificacin de circuitera, el costo para un sistema basado en
microcontrolador es mucho menor y, lo mejor de todo, el tiempo de desarrollo de
su proyecto electrnico se disminuye considerablemente.

Los microcontroladores hoy da


Los microcontroladores estn conquistando el mundo. Estn presentes en nuestro
trabajo, en nuestra casa y en nuestra vida, en general. Se pueden encontrar
controlando el funcionamiento de los ratones y teclados de los computadores, en
los telfonos, en los hornos microondas y los televisores de nuestro hogar. Pero la
invasin acaba de comenzar y el nacimiento del siglo XXI ser testigo de la
conquista masiva de estos diminutos computadores, que gobernarn la mayor
parte de los aparatos que fabricaremos y usamos los humanos.
Cada vez existen ms productos que incorporan un microcontrolador con el fin de
aumentar sustancialmente sus prestaciones, reducir su tamao y coste, mejorar su
fiabilidad y disminuir el consumo.
Algunos fabricantes de microcontroladores superan el milln de unidades de un
modelo determinado producidas en una semana. Este dato puede dar una idea de
la masiva utilizacin de estos componentes.
Los microcontroladores estn siendo empleados en multitud de sistemas
presentes en nuestra vida diaria, como pueden ser juguetes, horno microondas,
frigorficos, televisores, computadoras, impresoras, mdems, el sistema de
arranque de nuestro coche, etc. Y otras aplicaciones con las que seguramente no
estaremos tan familiarizados como instrumentacin electrnica, control de
sistemas en una nave espacial, etc.
Una aplicacin tpica podra emplear varios microcontroladores para controlar
pequeas partes del sistema. Estos pequeos controladores podran comunicarse
entre ellos y

con un procesador central, probablemente ms potente, para

compartir la informacin y coordinar sus acciones, como, de hecho, ocurre ya


habitualmente en cualquier PC.

Objetivo.
El objetivo del presente trabajo es proporcionar un panorama amplio para conocer
estos dispositivos y en particular del PIC16F84 que por sus relevantes
caractersticas, bajo costo y facilidad de programacin nos brinda la oportunidad
de crear un sinfn de aplicaciones cuyo nico lmite es la imaginacin. Adems se
pretende dar un enfoque prctico, mostrando sus aplicaciones en diferentes reas
y particularmente en el rea de Comunicaciones, donde se mostrar el uso del
microcontrolador PIC16F84 para la modulacin por ancho de pulso (PWM).
Cabe hacer la aclaracin que el PIC16F84 requiere de algunos mnimos
componentes externos dependiendo de la aplicacin que se pretenda darle. Como
ejemplo podemos mencionar el uso de un cristal de cuarzo y capacitores o
resistencias dependiendo del tipo de oscilador que se elija para hacerlo operar.
En cuanto a las condiciones actuales se mencionan tambin algunos otros
microcontroladores de otras empresas como los COP de NATIONAL, AVRs de
ATMEL, la serie 8031 de INTEL, etc. Para as comprarlos con el PIC16F84 de
MICROCHIP y darnos cuenta de las superiores cualidades y caractersticas con
respecto a sus competidores mas cercanos. Se cree conveniente que para que se
pueda conocer ms a fondo este dispositivo y trabajar con l primero debemos
definir que es y para que sirve un microcontrolador, sus caractersticas generales,
un amplio panorama de aplicaciones y mencionar el caso particular del PIC16F84
con los bloques que lo integran basndose en la familia 16X84 para as saber que
es la memoria de datos, la memoria de programas, el perro guardin, el registro
STATUS, etc, se aborda tambin el tema del diseo del conjunto de instrucciones
y estos temas son presentados en el capitulo II.
En el capitulo III y habiendo descrito los recursos con que cuenta el PIC16F84 en
el capitulo I, son presentadas las 35 instrucciones del set RISC de esta familia,
dando algunos ejemplo de uso en ciertos casos. Se hablar tambin de cmo

programar estos dispositivos y varios modelos de programadores existentes, as


mismo se hablar del software empleado en su programacin y de otros paquetes
extras que facilitan el trabajo.
En el capitulo IV se dan ejemplos de prcticos sobre circuitos reales de diferentes
ramas de la ingeniera y uno de sus mltiples usos en el rea de las
Comunicaciones que es la modulacin por ancho de pulso o PWM.
En el capitulo V se presentan las conclusiones derivadas del anlisis del
microcontrolador PIC16F84 y sus aplicaciones en el rea de las Comunicaciones,
se incluyen hojas de especificaciones y costos de estos microcontroladores.

Planteamiento del Problema.


Debido a los grandes avances tecnolgicos, nosotros como ingenieros
tenemos una gran participacin en el desarrollo de nuevas tecnologas, esta es
una razn por la cual estamos proponiendo que una solucin de bajo costo, la cual
sera el uso del microcontrolador, cabe sealar que este se debe seleccionar de
acuerdo a la aplicacin que vallamos a desarrollar ya que se puede utilizar en un
sin

fin

de

aplicaciones,

esto

es

de

vital

importancia

pues

existen

microcontroladores de mucha capacidad y de poca capacidad por lo tanto, algunos


son muy econmicos y otros son un poco mas caro.
Como

fue

mencionado

anteriormente

existen

otros

modelos

de

microcontroladores diferentes al PIC16F84, tal es el caso por ejemplo de los COP


de NATIONAL o los AVRs de ATMEL que poseen algunos recursos similares al
PIC16F84 de microchip, pero que por su alto costo y dificultad de programacin,
as como el tipo de tecnologa empleada en su construccin, hacen decidirse por
una opcin ms econmica y con mejores prestaciones como lo es el PIC16F84.

** INDICE **
INTRODUCCION
CAPITULO 1.- CONCEPTOS BASICOS Y FUNDAMENTOS GENERALES
1.1.- LA COMPUTADORA
1.2.- EL PROCESADOR
1.3.- LAS INSTRUCCIONES
1.4.- DESARROLLO DE LA COMPUTACION
1.5.- CLASIFICACION DE LAS COMPUTADORAS

01
02
04
07
09
13

CAPITULO 2.- LOS MICROCONTROLADORES Y EL PIC 16F84.


2.1.- DEFINICIONES Y APLICACIONES DE LOS MICROCONTROLADORES.
2.2.- MICROCONTROLADORES MAS COMUNES.
2.3.- COMPETIDORES DIRECTOS DEL PIC Y SUS PRINCIPALES RECURSOS.
2.4.- DESCRIPCION DE LOS PINES.
2.5.- DESCRIPCION INTERNA.
2.6.- TIPOS DE ARQUITECTURA DEL CONJUNTO DE INSTRUCCIONES.
2.7.- CONSIDERACIONES MAS COMUNES PARA EL DISEO DE LA ARQUITECTURA

15
15
17
18
19
23
35

DEL CONJUNTO DE INSTRUCCIONES.


2.8.- CLASIFICACION DE ISAs CON REGISTRO DE PROPOSITO GENERAL.
2.9.- REDUCED INSTRUCTION SET COMPUTER (RISC).

36

2.11.- DISEO DEL CONJUNTO DE INSTRUCCIONES

39
40
43
44

CAPITULO 3.- PROGRAMADORES

57

CAPITULO 4.- DESARROLLO DE CIRCUITOS


4.1.- DESARROLLO DE UN DETECTOR DE RUIDO DE ALTA FRECUENCIA DE BAJO

70
70

COSTO BASADO EN EL MICROCONTROLADOR PIC16F84


4.2.- DESARROLLO DE UN CIRCUITO PARA PWM
4.3.- PROYECTOS CON EL PIC16F84

77
82

BIBLIOGRAFIA

96

2.10.- CONSIDERACIONES PARA EL DISEO DEL CONJUNTO DE INSTRUCCIONES RISC.

CAPITULO I.- CONCEPTOS BASICOS Y FUNDAMENTOS GENERALES

10

Introduccin.
En el campo de la electrnica existen diversos dispositivos programables, tal
es el caso de los microcontroladores que estn ocupando un lugar de privilegio
dentro de la industria electrnica. En particular los microcontroladores de la
empresa Microchip, en los cuales se puede implementar fcilmente una gran
variedad de programas con un set reducido de instrucciones, y estos dispositivos
son conocidos como PIC.

Fundamentos de los procesadores.


A travs de la historia de la humanidad, los clculos principalmente se han
realizado con nuestro cerebro. Conforme la civilizacin ha avanzado se han
desarrollado herramientas de clculo que han ayudado a el cmputo manual. En
un principio se usaron los dedos, piedras y se tallaron maderas para realizar
conteos. Posteriormente apareci el baco y la regla de clculo.
A medida que el tamao y complejidad de los clculos aumentaban,
aparecieron dos limitantes en cuanto al clculo manual:

La velocidad con que un humano realiza los clculos.

La vulnerabilidad a cometer errores, por causa de distraccin, fatiga,

etc., factores que no afectan a las mquinas.


En consecuencia aparecieron las primeras mquinas de clculo automtico.

11

Tanto el clculo humano o artificial, contienen los siguientes componentes:

Un Procesador capaz de interpretar y ejecutar programas.

Una memoria para almacenar los programas y datos a procesar.

Mecanismos de entrada y salida para transferir informacin entre la

computadora y el exterior.
Unidad de
Procesamiento
Central
Entrad
a
Salida

Memori
a
(a)
Princip
al

(b)

Figura 1-1. Componentes principales (a) Cmputo humano (b) Cmputo de una mquina.

1.1

LA COMPUTADORA
Las computadoras actuales an siguen la filosofa y conceptos que

introdujo John von Neumann, tales como el uso de una Memoria, que consiste en
un lugar donde se guardan ordenadamente las instrucciones que sern realizadas
por la mquina, as como los datos y resultados. De esta forma se tena la
posibilidad de alterar el programa de instrucciones, es por esto que se denominan
mquinas de programa almacenado. Von Neumann tambin introdujo el uso del
sistema binario.
La mquina programada de von Neumann se compone de bloques
electrnicos digitales, que reciben, guardan y procesan informacin binaria,
comunicndose entre ellos por lneas digitales, conocidas como buses.

12

Figura 1-2. Arquitectura Von Neumann.

La Unidad de Control y el Camino de Datos conforman la Unidad de


Procesamiento Central, tambin llamado Procesador, la cual se encarga de
recibir ordenadamente las instrucciones desde la Memoria Principal para
interpretarlas y generar las seales de control, que se aplican sobre los
componentes del sistema para llevar a cabo las instrucciones.
El Generador de pulsos de reloj, se encarga de sincronizar las
operaciones que se llevan a cabo en los componentes que intervienen en el
manejo de los datos. La frecuencia del generador depende del diseo y tecnologa
de la computadora y determina la velocidad de procesamiento del mismo.
La Memoria Principal almacena, tanto los datos como el conjunto
ordenado de instrucciones que al ser ejecutadas, proporcionan los resultados
esperados. Al conjunto ordenado de instrucciones se conoce como Programa. La
mquina tiene la capacidad de romper la secuencia ordenada segn los resultados
parciales que se van obteniendo.
La encargada de adaptar el formato de la informacin entre la mquina y
los perifricos es la Unidad de Entrada y salida.

13

1.2

EL PROCESADOR
Un procesador de propsito general es un autmata de estados finitos

que ejecuta instrucciones almacenadas en una memoria. El estado del sistema


esta definido por los valores almacenados en las localidades de memoria junto
con los valores almacenados en ciertos registros del procesador.
La evolucin de las computadoras se basa en los procesadores, que han
llegado a ser mucho ms poderosos y han desplazado ampliamente el uso de
supercomputadoras en las empresas e industria.
Los procesadores tambin conocidos como CPU son usados en estaciones
de trabajo, servidores y dispositivos perifricos como impresoras y controladores
de disco. Tambin son usados en muchas aplicaciones, incluyendo control y
monitoreo de funciones.

Funciones que realiza


La funcin primaria del procesador es ejecutar secuencias de instrucciones o
programas, almacenados en una memoria principal.
El procesador transfiere las instrucciones y los datos de entrada,

de la

memoria principal a sus registros. Ejecuta las instrucciones en la secuencia


almacenada, excepto cuando sta es alterada por una instruccin de salto.
Transfiere los datos de salida de sus registros a la memoria principal.
El manejo eficiente del flujo de instrucciones y datos es una tarea bsica que
debe desarrollar el procesador.

14

Elementos que lo integran


El procesador consta de los siguientes elementos:

Camino de datos (datapath).

Unidad de control.

Figura 1-3. Componentes del procesador.

Camino de datos o datapath


Se encarga del procesamiento de los datos, el camino de datos esta
compuesto por unidades funcionales y de almacenamiento que ejecutan ciertas
operaciones lgicas y aritmticas contenidas en las instrucciones. El datapath esta
estructurado de la siguiente forma:

Archivo de registros, almacena temporalmente los operandos.

Unidades funcionales, las cuales pueden ser ALUs (que ejecutan la suma,
resta y operaciones lgicas), desplazadores (shifters) o multiplicadores.
15

Multiplexores, los cuales guan a los datos a travs del datapath.


La implementacin de un datapath se crea en base a una tecnologa de

hardware especfica, la cul es la que dicta la duracin del ciclo de reloj, y esta
determinado por los circuitos ms lentos que operan durante un periodo de ciclo
de reloj, por lo que es el procesador quien lo determina. Adems de que ocupa la
mayor parte de los transistores y del rea del procesador.
Unidad de Control
Se encarga de interpretar, coordinar, y realizar la transferencia de datos
entre la unidad aritmtico-lgica, memoria y dispositivos de entrada y salida.
Analiza e interpreta los bits de los campos que componen a una instruccin,
posteriormente genera las seales de control adecuadas para especificar al
Camino de datos la operacin que debe realizar, los operandos de entrada y el
lugar donde debe guardar el resultado. Adems determina la direccin de la
siguiente instruccin a ejecutar.
Existen dos mtodos para el diseo de la unidad de control:

Control

cableado y microprogramado.
Control cableado. Se basa en un circuito lgico secuencial o mquina de
estado finito, que genera secuencias especficas de seales de control en
respuesta a instrucciones externas. Su objetivo es minimizar el nmero de
componentes usados y maximizar la velocidad de operacin. Una vez construida
la unidad de control, la nica manera de implementar cambios es rediseando
totalmente la unidad, es por esta caracterstica que se conoce como Cableado o
Hardwired.
Microprogramacin.

Se

construye

en

torno

una

unidad

de

almacenamiento llamada memoria de control, todas las seales de control se

16

almacenan en un formato similar a un programa. La memoria de control almacena


un conjunto de microprogramas diseadas para implementar o emular el
funcionamiento de un conjunto de instrucciones en particular. Cada instruccin
origina la bsqueda del microprograma correspondiente. La extraccin de la
informacin contenida en los microprogramas es muy similar a la bsqueda y
ejecucin de un programa almacenado en memoria principal. Este tipo de control
es ms sistemtico al organizar las seales de control en palabras con formato
(microinstrucciones), los cambios en el diseo se pueden realizar fcilmente al
alterar el contenido de la memoria de control. El inconveniente es que son muy
costosas y tienden a ser lentas ya que se debe emplear tiempo extra en la
bsqueda de la microinstruccin dentro de la memoria de control.

(a)

Figura 1-4. Unidad de control (a) Cableado (hardwired)

1.3

(b)

(b) Microprogramado.

LAS INSTRUCCIONES
Dependiendo de la estructura de la computadora, se tiene un tamao de

bits en el que se trabajan las instrucciones. Este tamao se conoce como palabra
y suele ser de 8, 16, 32 64 bits. Las instrucciones como los datos pueden ser de
una o varias palabras.
Una instruccin especifica sus parmetros por medio de campos, los
cuales suelen ser: Cdigo de operacin (codifica el tipo de operacin lgica o
aritmtica que realizar la instruccin), Operando fuente y destino, entre otros.

17

CDIGO
OPERANDO OPERANDO RESULTADO
OP
1
2
Figura 1-5. Campos de una instruccin.

Tanto las unidades de control cableadas como microprogramadas son


estructuradas como instrucciones o microinstrucciones pipelines como una
manera de incrementar la ejecucin. El Pipeline es un mtodo de bajo costo para
aumentar el rendimiento del procesador al descomponer su operacin en una
secuencia de pasos relativamente independientes. Los procesadores actuales
usan el pipeline para incrementar su porcentaje efectivo de instrucciones
ejecutadas.

Etapas para la ejecucin de una instruccin


Las instrucciones pueden descomponerse por ejemplo en cinco etapas
bsicas, que son.
1 Etapa. Bsqueda de instruccin
Se localiza el cdigo binario de la instruccin en la Memoria Principal. El
contador de Programa (PC), se encarga de depositar en el bus de direcciones la
direccin de la instruccin a ejecutar. Una vez decodificada la direccin en la
memoria, se lee la posicin correspondiente y su contenido se transfiere por el
bus de datos e instrucciones a la Unidad de Control.
2 Etapa. Bsqueda del registro/Decodificacin de la instruccin
La unidad de control interpreta el cdigo binario de la instruccin que se ha
recibido de la Memoria principal y accede al archivo de registros para leerlos.
3 Etapa. Ejecucin

18

La unidad de control genera las seales precisas para que el datapath


realice la operacin correspondiente a la instruccin actual.
4 Etapa. Acceso a memoria
Es realizada nicamente por instrucciones de carga, almacenamiento, saltos
y bifurcaciones. El acceso a la memoria esta determinada por el tipo de
instruccin.
5 Etapa. Post-escritura (escritura del resultado)
El resultado obtenido en la etapa de ejecucin de la instruccin se guarda en
el registro destino.

1.4

DESARROLLO DE LA COMPUTACIN
El desarrollo de la tecnologa, en especial la relacionada con la

electrnica, ha afectado fuertemente la evolucin de la organizacin de las


computadoras, por lo que se identifican cuatro etapas:
1 Etapa.
Es la poca inicial o nacimiento de la computadora, y esta marcada por la
estructura propuesta por Von Neumann.

19

Figura 1-6. Arquitectura simplificada propuesta por Von Neumann.

La mayor actividad se realiza en la Unidad de Control y la Memoria Principal.


La unidad de control enva a la memoria la direccin de la instruccin, recibe su
cdigo, lo interpreta y en fase de ejecucin, selecciona la operacin en la ALU,
busca los operandos y almacena los resultados. Es un ir y venir de datos e
instrucciones entre la memoria y la unidad de control. As tambin las entradas y
salidas que proporcionan y reciben datos.
La tecnologa usada en la implementacin de esta estructura consisti en
vlvulas de vaco. La velocidad de respuesta entre ambos bloques era similar, ya
que ambos estaban construidos con dichos dispositivos. En la programacin de
las computadoras se usaba el lenguaje mquina binario.
2 Etapa
Es la poca de los circuitos de pequea y mediana escala de integracin
(SSI y MSI), estos son usados en la construccin del procesador, pero no en la
Memoria, la cual se implementaba con tecnologas como ncleos de ferrita, cuyos
tiempos de acceso eran muy elevados, esto propicio una diferencia considerable
entre las tecnologas utilizadas para la construccin de esos dispositivos.

20

La velocidad de la memoria principal es 10 veces ms lenta que la unidad de


control, lo que origina largos periodos de inactividad del procesador en la etapa de
acceso a Memoria.
Como medida para compensar la diferencia de velocidades surgen las
computadoras CISC. La unidad de control, la integra una memoria de control. Por
lo que el rendimiento quedaba a expensas de la velocidad de la memoria de
control, que al ser pequea y estar construida con semiconductores, era mucho
ms elevada que la memoria principal.

Figura 1-7. Arquitectura de una computadora CISC.

3 Etapa
El aumento de la densidad de integracin permiti construir memorias ms
rpidas, las cuales se incorporaron en la memoria principal, tratando de equilibrar
su velocidad con la del procesador. En est etapa aparece la memoria cach, la
cul se intercala entre la memoria principal y unidad de control, esta contiene la
informacin ms utilizada por el procesador. La memoria cach alcanza
velocidades de 5 a 10 veces ms que la memoria principal, su capacidad es
pequea pero su efectividad consiste en que contenga las instrucciones ms
solicitadas por el procesador.

21

Figura 1-8. Arquitectura que utiliza memoria cach.

Las computadoras de memoria cach, al momento de decodificar


instrucciones complejas, hacen que el procesador se tarde ms en realizar la
operacin que en acceder a la memoria, es por esto que el inters en las
computadoras CISC ha ido disminuyendo.
4 Etapa
Se han realizado modificaciones en cuanto al diseo en la organizacin de
las computadoras, con mira al mejoramiento de la velocidad del procesador y el
equilibrio con la memoria cach, algunas de estas modificaciones son las
siguientes:
1.- Eliminacin del microcdigo. Las instrucciones se vuelven sencillas, por lo
que desaparece la memoria de control.
2.- Reduccin del tiempo de ciclo de mquina. Como consecuencia de la
simplificacin de las instrucciones.
3.- Interpretacin directa por el hardware de las instrucciones y ejecucin de las
mismas en un ciclo de mquina.
22

4.- Ampliacin de la cach para contener datos e instrucciones.


Los procesadores actuales dan gran importancia a la memoria cach, la
cual est dedicada exclusivamente a contener instrucciones y los datos ms
usados. Se han establecido jerarquas entre distintos tamaos de cach,
existiendo varios niveles con distintas velocidades y capacidades.
Tambin con estos criterios se realza el uso de las computadoras de
conjunto de instrucciones RISC.

Figura 1-9. Arquitectura bsica de computadoras RISC.

1.5

CLASIFICACIN DE LAS COMPUTADORAS


Por el tipo y categoras de computadoras que se han fabricado suelen

clasificarse en cinco generaciones, las cules tienen aproximadamente una


duracin de una dcada y que se caracterizan por un conjunto de parmetros,
los cuales podemos visualizarlos en la siguiente tabla.

23

CARACTERS-

G
Primera

Duracin
Tecnologa
Fabricante

Mquina

Sistema
Operativo

Tipo de
Memora

1950-1960
Vlvulas
electrnicas
IBM-UNIVAC

IBM 701

Tambores y cintas
magnticas

Mquina

Cuarta

Quinta

1960-1970

1970-1980

1980-1990

1990-2000

Transistores

CI SSI-MMI

CI LSI

CI VLSI

DIGITAL

APPLE

DEC-INTEL

BURROUGHS
NCR, CDC
CDC 6600

encadenamiento.

Ncleos de
Ferrita

PDP-8
PDP-11
Estructurados
bajo
multiprogramaci
n y multiproceso
Memorias en CI
Y
Memorias Cach

FORTRAM
Lenguaje

Tercera

Muy primarios
Tubos de William.

Segunda

Monitor de
Muy rudimentario

Fujitsu
M382
Cray X-MP

Alpha21164
P6

SO de
tiempo

Multiprocesamiento

compartido
Memorias
Virtuales

Cach a varios niveles

Alto Nivel.

COBOL

BASIC

FORTRAN

Lenguaje natural

ALGOL

PASCAL

extendido

Conexin de los

Procesador.

CI en placas de

Memoria

circuito impreso

Integrada

Gran avance en

Extensin de

los sistemas

lenguajes de

operativos

alto nivel

PL1
Aportacion
es
Hardware
Aportacion
es
Software
Producto

Registros
Indexados

Canales

Mejoras en
ensambladores y

Fuerte impulso de

macro-

FORTAN

ensambladores
Computadora

Computadora
comercial

Mini computadora

Micro
computadora

CI de alta escala de
integracin

Intento de sustituir
por hardware

Multiprocesador

Tabla 1-1. Caractersticas principales de las computadoras es las distintas generaciones.

24

CAPITULO 2.- LOS MICROCONTROLADORES Y EL PIC 16F84


Introduccin.
Como

fue

mencionado

anteriormente

existen

otros

modelos

de

microcontroladores diferentes al PIC16F84, tal es el caso por ejemplo de los COP


de NATIONAL o los AVRs de ATMEL que poseen algunos recursos similares al
PIC16F84 de microchip, pero que por su alto costo y dificultad de programacin,
as como el tipo de tecnologa empleada en su construccin, hacen decidirse por
una opcin ms econmica y con mejores prestaciones como lo es el PIC16F84. A
continuacin se definir el concepto de microcontrolador, sus aplicaciones en la
vida cotidiana y en la industria y se presentaran los competidores ms directos y
conocidos del PIC16F84, para as mostrar sus caractersticas principales, sus
recursos, su tecnologa empleada, etc. Se presentaran tambin todos los recursos,
caractersticas y tecnologa del PIC de la empresa MICROCHIP.

2.1.- Definicin y aplicaciones de los microcontroladores.


El microcontrolador es un circuito integrado o chip que incluye es su interior
las tres unidades funcionales de una computadora: CPU, memoria y unidades de
E/S, es decir, se trata de un computador monopastilla, aunque de limitadas
prestaciones y que normalmente se dedica a resolver una tarea especfica. Es
ms pequeo que una caja de cerillos y, en ocasiones, cuesta menos, por lo que
suele ir incrustado en el dispositivo que controla.
Un microcontrolador es un microprocesador optimizado para ser utilizado
para controlar equipos electrnicos. Los microcontroladores representan la
inmensa mayora de los chips de computadoras vendidos, sobre un 50% son
controladores "simples" y otro son DSPs ms especializados. En el hogar pueden
existir en los electrodomsticos entre una y dos docenas de microcontroladores.

25

Pueden encontrarse en casi cualquier dispositivo elctrico como lavadoras, horno


de microondas, telfonos, etc.
Un microcontrolador difiere de una CPU normal, debido a que es ms fcil
convertirla en un ordenador en funcionamiento, con un mnimo de chips externos
de apoyo. La idea es que el chip se coloque en el dispositivo, enganchado a la
fuente de energa y de informacin que necesite. Un microprocesador tradicional
permite hacer esto, ya que espera que todas estas tareas sean manejadas por
otros chips.
Por ejemplo, un microcontrolador tpico tendr un generador de reloj
integrado y una pequea cantidad de memoria RAM y ROM /EPROM/ EEPROM,
significando que para hacerlo funcionar, todo lo que se necesita son unos pocos
programas de control y un cristal de sincronizacin. Los microcontroladores
disponen generalmente tambin de una gran variedad de dispositivos de entrada /
salida, como convertidores de analgico a digital, temporizadores, UARTs y buses
de interfaz serie especializados, como I2C y CAN. Frecuentemente, estos
dispositivos integrados pueden ser controlados por instrucciones de procesadores
especializados. Los modernos microcontroladores frecuentemente incluyen un
lenguaje de programacin integrado, como el BASIC, ENSAMBLADOR, NIPLE,
etc, que se utilizan bastante con este propsito.
Los microcontroladores negocian la velocidad y la flexibilidad para facilitar su
uso. Debido a que se utiliza bastante sitio en el chip para incluir funcionalidad,
como los dispositivo de E/S ( entrada / salida) o la memoria que incluye el
microcontrolador, se ha de prescindir de cualquier otra circuitera.

26

2.2.- Microcontroladores ms comunes.


Los microcontroladores ms comunes en uso son:

AVR

Atmel

Hitachi

68HC12

H8

68HC16

Holtek

32-bit

HT8

683xx

Intel

NEC

8-bit

78K

8XC42

ST

MCS51

ST 62

8xC251

ST 7

16-bit

Texas Instruments

MCS96

TMS370

MXS296

Zilog

National Semiconductor

Z8

COP8

Z86E02

Microchip

Genrico

12-bit instruction PIC

14-bit instruction PIC

PIC16F84

16-bit instruction PIC

Motorola

8-bit

68HC05

68HC08

68HC11

16 Bit

27

Algunas arquitecturas de microcontrolador estn disponibles por tal cantidad


de vendedores y en tantas variedades, que podran tener su propia categora.
Entre ellos encontramos, principalmente, las variantes de 8051 y Z80.

2.3.- Competidores directos del PIC y sus principales recursos.


Ahora se mostrarn 3 competidores directos del PIC de la gama media que
ofrecen recursos similares a los del PIC pero a un costo mayor, con muchas ms
instrucciones, de mayores dimensiones, etc. Particularmente se presentarn
primero y en el orden siguiente el microcontrolador de ATMEL AT90S2313 (AVR )
con sus principales caractersticas, despus seguir el Motorola 68HC11 y por
ltimo el 8051 de INTEL, se notar como es que estos microcontroladores
requieren tarjetas para desarrollo demasiado costosas y en precio superar al
PIC16F84 de MICROCHIP, presentando similares recursos y caractersticas y en
algunos casos inferiores con respecto al PIC.
AT90S2313 (AVR )
Es un microcontrolador de 8 bits con un encapsulado de 20 pines. Parte de estos
pines tienen una funcin especfica y no pueden ser reconfigurados (VCC,
GND,RESET, XTAL1 y XTAL2). Otros, tienen un modo de trabajo totalmente
configurable por programa y depender de la aplicacin en la que se aplique.

28

2.4.- Descripcin de los pines

Pin 1 (RESET): (Entrada).


Reinicia

la

ejecucin

de

instrucciones

del

microcontrolador

cuando est a 0 lgico. Un 1 lgico no afecta al funcionamiento del


microcontrolador.
Como mnimo este terminal debe estar a 0 dos ciclos de mquina para que se
procese el RESET.
Pines 20,10 (VCC, GND): (Alimentacin).
Vcc debe estar comprendido entre 2,7 y 6V. Usualmente la alimentacin esta en
5V estabilizados
Pines 4,5 (XTAL1,XTAL2):
(Entradas

de

reloj).

Entre

estas

lneas

se

conecta

el

cristal

de cuarzo con la frecuencia de resonancia adecuada para la generacin del reloj


interno, o por el terminal XTAL1 se introduce la seal de reloj del sistema.

29

Pin 2 PD0 (RX). (Bidireccional).


Este terminal puede funcionar como entrada o salida digital asociado al BIT 0 del
puerto D, adems puede tener la funcin especial de recepcin de datos serie
para la UART.
Pin 3 PD1 (TX). (Bidireccional).
Este terminal puede funcionar como entrada o salida digital asociado al BIT 1 del
puerto D, tambin puede tener la funcin especial de transmisin de datos serie
desde la UART.
Pin 6 PD2 (INT0). (Bidireccional).
Este terminal puede funcionar como entrada o salida digital asociado al BIT 2 del
puerto D, adems puede usarse para la generacin externa de interrupcin.

30

Pin 7 PD3 (INT1). (Bidireccional).


Este terminal puede funcionar como entrada o salida digital asociado al BIT 3 del
puerto D, adems puede usarse para la atender interrupciones externas.
Pin 8 PD4 (T0). (Bidireccional).
Este terminal puede funcionar como entrada o salida digital asociado al BIT 4 del
puerto

D,

adems

puede

usarse

como

entrada

de

reloj

para

el

temporizador/contador 0.
Pin 9 PD5 (T1). (Bidireccional).
Este terminal puede funcionar como entrada o salida digital asociado al BIT 5 del
puerto

D,

adems

puede

usarse

como

entrada

de

reloj

para

el

temporizador/contador 1.
Pin 11 PD6 (ICP). (Bidireccional).
Este terminal puede funcionar como entrada o salida digital asociado al BIT 6 del
puerto D, adems puede usarse como entrada de captura de cuenta del
temporizador/contador 0.

31

Pin 12 PB0 (AIN0). (Bidireccional).


Este terminal puede funcionar como entrada o salida digital asociado al BIT 0 del
puerto B, adems puede usarse como una de las dos entradas analgicas del
comparador analgico integrado.
Pin 13 PB1 (AIN1). (Bidireccional).
Este terminal puede funcionar como entrada o salida digital asociado al BIT 1 del
puerto B, adems puede usarse como una de las dos entradas analgicas del
comparador analgico integrado.
Pin 14 PB2. (Bidireccional).
Este terminal puede funcionar como entrada o salida digital asociado al BIT 2 del
puerto B.
Pin 15 PB3 (OC1). (Bidireccional).
Este terminal puede funcionar como entrada o salida digital asociado al BIT 3 del
puerto B, adems puede usarse como salida del temporizador/contador 1.
Pin 16 PB4. (Bidireccional).
Este terminal puede funcionar como entrada o salida digital asociado al BIT 4 del
puerto B.
Pines 16,17,18 / PB5,6,7 (MOSI,MISO,SCK). (Bidireccionales).
Estos terminales pueden funcionar como entradas o salidas digitales asociadas a

32

los bits 5,6,7 del puerto B, adems pueden usarse como terminales para la
comunicacin serie sncrona para la programacin de la memoria flash interna.
2.5.- Descripcin interna.
En la siguiente figura muestra el diagrama en bloques de la arquitectura interna
del AT90S2313 AVR (RISC)

Detalles de los bloques del diagrama:

Un banco de 32 registros de 8 bits de propsitos generales, sobre los que


se realizan la totalidad de las operaciones de clculo.

Una ALU de 8 bits para el clculo aritmtico y lgico con los datos
almacenados en el banco de registros de propsitos generales.

Una RAM de 128x8 bits, para almacenamiento de datos

33

Una EEPROM interna de 128x8, para el almacenamiento de datos que


deban

mantenerse,

aun

cuando

no

este

con

alimentacin

del

microcontrolador.

Una memoria Flash EPROM de 1Kx16 bits para el almacenamiento de las


instrucciones del programa. Esta memoria dispone de un bus dedicado,
distinto del de datos, por el que transitan las instrucciones hacia el
decodificador de instrucciones,encargado de su ejecucin.

Un puerto serie asncrono o UART

Un puerto serie sncrono SPI

Un contador /temporizador de 8 bits

Un contador /temporizador de 16 bits con funciones de PWM, generacin


de salida, control, etc.

Un WATCHDOG o perro guardin que vigila el correcto funcionamiento del


programa.

Un comparador analgico

15 lneas de entrada/salida

Una unidad de generacin de interrupciones

En la siguiente figura se muestra el mapa de memoria de programa y datos.

34

Como podemos observar, el microcontrolador utiliza una arquitectura


HARVARD, donde la memoria de datos y programa tienen buses independientes.
La memoria de programa presenta 1k direcciones de 16 bits. Cada
instruccin. A pesar de los diferentes modos de direccionamiento que presente,
ocupa 16 bits, por lo que cada direccin de la memoria de programa contiene
aproximadamente una instruccin.
La memoria de datos se divide en tres regiones. La inferior, que ocupa las
primeras 32 direcciones, esta ocupada por el banco de registros de propsitos
generales (direcciones $00-$1F); La regin central, cubre 64 direcciones en donde
se ubican los registros asociados a los diferentes puertos de entrada/salida del
microcontrolador, UART, comparador analgico, PUERTO B, PUERTO D, etc
direcciones $20-$5F). La regin ms alta, ocupa 128 posiciones y est asociada a
la memoria SRAM (direcciones $60-$DF).
Registros de propsitos generales

35

Todas las instrucciones que operan con los contenidos de los registros tienen
acceso al conjunto del banco, salvo las instrucciones que cargan datos de forma
inmediata como SBCI, SUBI, CPI, ANDI, ORI y LDI que slo acceden a la segunda
mitad de los registros (R16..R31) Como ya se dijo con anterioridad, cada registro
est tambin mapeado en memoria, as el registro r31 ocupa la direccin $1F del
espacio de memoria de datos, etc. Los ltimos 6 registros del banco, r26-r31,
pueden tener funciones alternativas como apoyo a los modos de direccionamiento,
en ese caso, se agrupan por pares para constituir los registros X,Y,Z de 16 bits
cada uno.

36

37

La memoria de datos SRAM.


La siguiente figura muestra cmo esta organizada la memoria datos

Muchas instrucciones utilizan el nombre del registro (R0..R31) en lugar de la


direccin que ocupa este en el espacio de direccionamiento de datos.
De forma parecida ocurre con los registros de I/O. Las instrucciones de entrada y
salida permiten reasignar un nmero a cada uno de ellos, de forma que el primer
registro de este tipo que encontramos se numera como 0 (direccin $20), el
siguiente, 1 (direccin $21) y as sucesivamente.

38

Modos de direccionamiento de datos y programas


El AVR AT90S2313 permite 5 modos de direccionamiento de datos:

Directo

Indirecto

Indirecto con predecremento

Indirecto con postincremento

Indirecto con desplazamiento

Inmediato

MODO DE REGISTRO DIRECTO

La instruccin contiene un campo de 5 bits que permite especificar cualquier


registro de los 32 registros existentes en el mapa de registros
El operando es contenido en registro d (Rd).

39

MODO DE REGISTRO DIRECTO (2 REGISTROS)

La instruccin contiene la direccin del operando fuente (Rr) y del destino


(Rd)(ambos operandos son registros del mapa de registros).
Los Operandos son contenidos en los registros r (Rr) y d (Rd).
El resultado se guarda en registro d (Rd).
MODO DE REGISTRO E/S DIRECTO

En este caso, la instruccin contiene la direccin de 6 bits del registro de E/S.


N es el registro que acta como fuente o destino de la informacin

40

MODO DE DIRECCIONAMIENTO DIRECTO

La instruccin viene acompaada de una palabra de 16 bits que contiene la


direccin de memoria (SRAM, E/S, FILE REGISTER), adems de un campo Rd/Rr
que contiene el registro que ser fuente o destino de la informacin.
MODO DE DIRECCIONAMIENTO INDIRECTO CON DESPLAZAMIENTO

La instruccin contiene el desplazamiento que se sumar al registro Y o Z


para formar la direccin donde se encuentra el operando.

41

MODO DE DIRECCIONAMIENTO INDIRECTO

La direccin del operando se encuentra en el registro X, Y o Z especificado


en el cdigo de operacin de la instruccin.
MODO DE DIRECCIONAMIENTO INDIRECTO CON PREDECREMENTO

Es igual al modo anterior, con la diferencia que en este caso, el registro X,Y,Z
previamente se decrementa en una unidad.

42

MODO DE DIRECCIONAMIENTO INDIRECTO CON POSTINCREMENTO

Igual que el modo indirecto, pero al final el contenido del registro X, Y o Z se


incrementa en una unidad.
MODO DE DIRECCIONAMIENTO DE CONSTANTES EN MEMORIA DE
PROGRAMA (instruccin LPM)

Es comn que los programas contengan valores constantes, estas


constantes se almacenan junto con las instrucciones, en la memoria de programa.
Debido a que este microcontrolador presenta una arquitectura Harvard, en donde
los buses de datos y programa estn separados, el acceso a estas constantes
parece una tarea imposible. No obstante, existe un puente entre el bus de datos
43

de la memoria de programa y el bus de datos de la memoria de datos, que de


forma controlada, slo utiliza la instruccin LPM.
Se recuerda que la memoria de programa tiene un tamao de 1Kx16 bits, mientras
que los buses de datos usan un tamao de 8 bits. En estas condiciones, el acceso
a un byte de la memoria de programa requiere que, en primer lugar, se especifique
la direccin del dato en los 15 bits ms significativos del registro Z. El BIT 0 de
dicho registro se utiliza para seleccionar el byte alto o bajo de la constante.
La ejecucin de LPM vuelca el dato en el registro R0.
MODO DE DIRECCIONAMIENTO DE PROGRAMA INDIRECTO (IJUMP,ICALL)

Estas instrucciones permiten que la ejecucin del programa salte a la


posicin de la memoria de programa indicada por el contenido del registro Z.

44

MODO DE DIRECCIONAMIENTO RELATIVO DE PROGRAMA (RJMP ,RCALL)

La instruccin contiene un desplazamiento K que se suma al contenido del


PC para encontrar la siguiente instruccin a ejecutar. Esto es, la ejecucin del
programa continua en la direccin PC+k+1 los valores validos de k van desde
-2048 a 2047.
El diseo del conjunto de instrucciones conocido tambin como Instruction
Set Architecture (ISA) es la parte del procesador que es visible al programador o al
diseador de compiladores. El ISA es la interfaz entre el software y el hardware.
Para dar rdenes al hardware de la computadora es necesario hablarle en
su lenguaje. Las palabras de la mquina se denominan instrucciones y vocabulario
se denomina al repertorio de instrucciones o conjunto de instrucciones. Es este
captulo se desarrollar el diseo de la arquitectura del conjunto de instrucciones
del procesador, buscando implementar un lenguaje que haga fcil la construccin
del hardware, tambin se desarrollaran los caminos de datos adecuados, para
ejecutar las instrucciones.

45

2.6 TIPOS DE ARQUITECTURA DEL CONJUNTO DE INSTRUCCIONES


Con respecto a la cantidad de instrucciones que soporta un procesador,
stos se pueden clasificar en dos tipos:

CISC (complex instruction set computer) Computadoras con un

conjunto de instrucciones complejo.

RISC (reduced instruction set computer) Computadoras con un

conjunto de instrucciones reducido.


Conjunto de Instrucciones CISC
Es el tipo ms antiguo y comn, su caracterstica ms esencial es la
microprogramacin. Tienen una gran cantidad de instrucciones y por tanto son
muy rpidos procesando cdigo complejo. Las instrucciones compuestas son
decodificadas internamente y ejecutadas con una serie de microinstrucciones
almacenadas en una ROM interna. Para esto se requieren de varios ciclos de
reloj. Los procesadores CISC ms populares son los de la familia 80x86 de Intel.
Conjunto de Instrucciones RISC
Lo tienen procesadores con un conjunto de instrucciones sencillas; permiten una
ejecucin ms rpida de las instrucciones. El cdigo complejo puede descomponerse en
instrucciones ms elementales, evitando as retardos de la memoria principal, haciendo uso
de numerosos registros y memoria cach. El diseo en hardware de este tipo de
procesadores es ms sencillo en comparacin a los CISC. Otro de los objetivos del RISC es
lograr que cada instruccin se realice en un solo ciclo de reloj.
La ventaja que ofrece el procesador es la rapidez, pero para
alcanzarla es conveniente que las instrucciones sean simples. La tendencia

46

actual es que los procesadores contengan pocas instrucciones y que stas


sean sencillas para ejecutarlas en un ciclo de reloj.
Los tipos de instrucciones en general se pueden clasificar de la siguiente
forma:
Instrucciones de transferencia. Mueven la informacin entre las
localidades de Memoria Principal y los registros del procesador
Instrucciones aritmticas y lgicas. Son las encargadas de efectuar
bsicamente la suma y resta, as como, realizar operaciones AND, OR y XOR.
Instrucciones

de

salto.

Rompen

la

ejecucin

ordenada

de

las

instrucciones que componen un programa. Con la mayora de las instrucciones, el


contador de programa se incrementa para apuntar a la siguiente instruccin que
hay en la secuencia del programa. Sin embargo, las instrucciones de salto cargan
en el PC valores aleatorios que modifican el flujo ordenado de las instrucciones de
un programa. Existen instrucciones de salto que son condicionales, es decir, para
que se altere el PC es necesario que se cumpla alguna condicin, en caso
contrario contina el flujo ordenado de las instrucciones.

2.7 CONSIDERACIONES MS COMUNES PARA EL DISEO DE LA


ARQUITECTURA DEL CONJUNTO DE INSTRUCCIONES
Al disear la arquitectura del conjunto de instrucciones de un procesador
se debe tomar en cuenta, el nmero de instrucciones a manejar, el nmero de
operandos que tendrn las instrucciones, los tipos y tamaos de stos, etc. A
continuacin se mencionan algunas caractersticas que hacen la diferencia entre
las arquitecturas de conjunto de instrucciones:

47

Operandos almacenados en la CPU. Se refiere a que algunas ISA


guardan los operandos en localidades internas del CPU.
Nmero de operandos por instruccin. Es el nmero de operandos que
son nombrados en una instruccin.
Localidad del operando. El operando puede encontrarse o localizarse en
la memoria o estar guardado internamente en la CPU.
Instrucciones.

Las instrucciones que formaran parte del conjunto de

instrucciones.
Tipo y tamao de los operandos. se definen y se especifica el tipo y
tamao de los operandos.
De las caractersticas arriba mencionadas, el almacenamiento interno en
la CPU es lo que hace la diferencia primordial entre los procesadores.
Tipos de ISA con respecto a la forma de almacenamiento de los datos.
Existen tres tipos de ISA que son las ms comunes y son los siguientes:
Acumulador Se utiliza un registro llamado acumulador, ya que todas las
operaciones se acumulan en ste. Por ejemplo.
Instruccin
add A

Operacin
acc - acc + mem[A]

La instruccin 1 realiza una suma de un dato en memoria y el acumulador


(acc), el resultado se almacena en el acumulador.

48

Pila - Los operandos se encuentran en el tope de la pila. As todas las


operaciones se realizan en el tope de la pila. Por ejemplo.
Instruccin
add

Operacin
top - top + next

Se realiza una suma con los operandos que se encuentran en el tope de


la pila y el resultado se almacena en el tope.
Registros de Propsito General (GPR) Los operandos que son
mencionados explcitamente, son almacenados en cada uno de los registros o en
localidades de memoria. Por ejemplo.
Instruccin

Operacin

1 add A B

A= A+ B

2 add A B C

A= B + C

La instruccin 1 realiza la suma del registro A y B, el resultado es


almacenado en en registro A. La instruccin 2 hace la suma del registro B y C , el
resultado se almacena en A.
Diferencias entre los Tipos de Arquitecturas de Conjunto de Instrucciones
Acumulador
Ventajas: Maneja instrucciones cortas.
Desventajas: El acumulador es slo un lugar de almacenamiento temporal
por lo tanto el trfico en la memoria es mayor para este mtodo.
Pila

49

Ventajas: Es un modelo simple para evaluar expresiones e instrucciones


cortas.
Desventajas: Una pila no puede ser accedida aleatoriamente, esto hace
difcil la generacin de cdigo eficiente. La pila es accedida por una misma
operacin varias veces y llega a generar cuellos de botella.
Registros de Propsito General
Ventajas: Permite que la generacin de cdigo se realice fcilmente. Los
datos pueden permanecer almacenados en los registros durante largos periodos
de tiempo.
Desventajas: Todos los operandos deben ser nombrados y las instrucciones
son grandes.
Las primeras CPUs tenan las caractersticas de los dos primeros tipos
arriba mencionados, pero en los ltimos 15 aos todas las CPUs construidas son
procesadores de Registros de Propsito General. La razon principal es que los
registros son ms rpidos que la memoria,

los datos pueden ser guardados

internamente en la CPU y sto se refleja en la rapidez con la que un programa


corre. Otra razn es que los registros son ms fciles de usar por el compilador.

2.8.- CLASIFICACIN DE ISAs CON REGISTRO DE PROPSITO GENERAL


Existen dos caractersticas principales del conjunto de instrucciones que
dividen a las arquitecturas GPR, y stas son:

S una instruccin aritmtica-lgica tiene dos o tres operandos

50

ADD R3, R1,


R2
R3 <-R1 + R2

ADD R1, R2
or

R1 <- R1 + R2

Tabla 2-1. Instruccin aritmtica-lgica

Los operandos pueden ser direcciones de memoria en instrucciones

aritmtico-lgicas, y stas son las formas en que se pueden presentar:


Registro - Registro

ADD R3, R1, R2

(R3 <- R1 + R2)


Registro - Memoria

ADD R1, A

(R1 <- R1 + A)
Memoria - Memoria

ADD C, A, B

(C <- A + B)

2.9.- REDUCED INSTRUCTION SET COMPUTER (RISC)


Como se mencion anteriormente los CPUs modernos son del tipo GPR
(Registro de Propsito General). Como ejemplos de estos CPUs son la IBM 360,
DEC VAX, Intel 80x86 y Motorola 68xxx, sin embargo, estos CPUs

fueron

claramente mejores que los CPUs anteriores basados en pila y acumulador, ya


que fueron mitigando inconvenientes en algunas reas, pero presentaban los
problemas que se mencionan a continuacin:
1.

Las instrucciones varianban en longitud de 1 byte a 6-8 bytes. Esto

causa problemas con la prebsqueda y pipelining de las instrucciones.

51

2.

Las instrucciones aritmtico-lgicas pueden tener operandos que son

localidades de memoria. Porque el nmero de ciclos tomados para acceder a


memoria vara. Esto no es bueno para los diseadores de compiladores,
pipelining y mltiples emisiones.
3.

Muchas instrucciones aritmtico-lgicas tenan slo 2 operandos,

donde uno de los operandos tambin es el destino. Esto significa que el operando
es destruido durante la operacin o se almacena antes en otro lugar.
A principios de los 80s se introdujo la idea del RISC surgiendo del
proyecto SPARC iniciado en Berkeley y el proyecto MIPS en Stanford. RISC
significa Computadora de Conjunto Reducido de

Instrucciones. El ISA es

compuesto de instrucciones donde todas tienen exactamente el mismo tamao,


usualmente de 32 bits. Por lo que puede realizar satisfactoriamente la
prebsqueda y el pipelined. Todas las instrucciones aritmtico-lgicas tienen 3
operandos los cules slo son registros. Los accesos a memoria solo se realizan a
travs de instrucciones explcitas de Carga / Almacenamiento.
Por ejemplo el cdigo ensamblador de A = B + C sera:
LOAD R1, A
LOAD R2, B
ADD

R3, R1, R2

STORE C, R3
A pesar de que se realizan cuatro instrucciones, podemos reutilizar los
valores contenidos en los registros.

52

Conjuntos de Instrucciones Reducido


La arquitectura de conjunto de instrucciones reducido, trabaja con
instrucciones de una misma longitud, y el nmero de bits usados en el cdigo de
operacin es reducido. Por lo que menos instrucciones pueden ser realizadas.
Las instrucciones que son eliminadas de este tipo de conjunto de
instrucciones, son las operaciones menos importantes como cadenas y BCD
(binary-coded decimal). En efecto, ahora que los accesos a la memoria son
restringidos, no hay muchos tipos de instrucciones MOV o ADD. Por lo que la
arquitectura anterior es llamada CISC (Complete Instruction Set Computer). Las
arquitecturas RISC tambin son conocidas como arquitecturas de LOAD/STORE.
El nmero de registros en esta arquitectura usualmente es de 32 o ms
registros. El primer CPU RISC

fue el MIPS 2000, que tiene 32 GPRs

contrariamente a los 16 de la arquitectura 68xxx y 8 en la arquitectura 80x86. La


nica desventaja del RISC es el tamao de su cdigo. Usualmente se necesitan
ms instrucciones y hay una prdida en instrucciones cortas (POP, PUSH).
Sin embargo, aun se siguen desarrollando CPUs CISC, Intel sigue
invirtiendo tiempo y dinero en la manufactura del Pentium II y el Pentium III, esto
ocurre, porque as permite mantener la compatibilidad. La IBM PC compatible es
la computadora ms comn en el mundo. Intel quiere una CPU que pueda correr
todas las aplicaciones que estn en manos de ms de 100 millones de usuarios.
Por otro lado Motorola construyo la serie 68xxx la cual es usada en la
Macintosh para hacer la transicin y conjuntamente IBM y Apple construyeron el
Power PC (PPC) un CPU RISC, el cual es instalado en la nueva Power Macs.

53

2.10.-

CONSIDERACIONES

PARA

EL

DISEO

DEL

CONJUNTO

DE

INSTRUCCIONES RISC.
Es necesario tener algunas consideraciones en el diseo del hardware,
que tambin influyen en la arquitectura del conjunto de instrucciones, y son:
1.

La simplicidad favorece la regularidad

2.

Ms pequeo es ms rpido

3.

Un buen diseo demanda compromisos

4.

Hacer que el caso comn sea rpido

La simplicidad favorece la regularidad


Esto se refiere a lograr que el hardware que obedece al conjunto de
instrucciones sea sencillo, al considerar que las instrucciones son de una misma
longitud y que sus formatos sean sencillos. Ya que cuando se tienen instrucciones
de diferentes longitudes y muchos formatos diferentes, el hardware sea complica.
Ms pequeo es ms rpido
Se refiere al tamao y complejidad del hardware, ya que entre mas
pequeo y sencillo es ms rpido.
Un buen diseo demanda compromisos
Existen problemas cuando una instruccin necesita campos mayores
que los estipulados. Por lo que se presenta un conflicto entre el propsito de que
todas las instrucciones tengan la misma longitud y de que todas las instrucciones
tengan un formato sencillo. Si el inters o compromiso es que las instrucciones
tengan una misma longitud, entonces ser necesario manejar distintos tipos de
formatos para diferentes tipos de instrucciones.

54

Hacer que el caso comn sea rpido


Una forma de evitar los accesos a memoria es tener diferentes
instrucciones aritmticas, es comn que las operaciones aritmticas contengan
operadores constantes o de direccionamiento inmediato, permitiendo que estas
instrucciones sean mucho ms rpidas que s se cargasen de memoria.

2.11.- DISEO DEL CONJUNTO DE INSTRUCCIONES


En esta seccin se define la arquitectura del conjunto de instrucciones
del procesador que se desarrollar en este trabajo de tesis.
Se determino que la arquitectura del conjunto de instrucciones ser de
carga almacenamiento o RISC, por las caractersticas que posee este tipo de
arquitectura. El conjunto de instrucciones contendr operaciones bsicas, el
tamao de palabra o ser de 16 bits.

Conjunto de Instrucciones
El conjunto de instrucciones consta de 14 instrucciones, las cuales se
subdividen de la siguiente manera:

Instrucciones Aritmtico-Lgicas. add, sub, and, or, srl, sll.

Instrucciones de Acceso a Memoria. ld y st.

Instrucciones de Toma de Decisin. bc, bz.

Instrucciones de Salto. j

Instrucciones de Control. clr_c, set_c, load_p

55

Formatos
El tamao de las instrucciones es de 16 bits y se manejan 4 tipos de
formatos a los que obedecen las instrucciones, y estos son los siguientes:
Instrucciones Aritmticas-Lgicas: Este tipo de instrucciones se componen
de cuatro campos, los cuales representan el cdigo de operacin (op), y tres
campos correspondientes a los registros operandos y destino (rf1, rf2 y rd),
respectivamente. Cada operando campo es representado por 4 bits, como se
muestra en el siguiente esquema.
15

12 11

op

87

rf1

43

rf2

rd

Instrucciones de Acceso a memoria: El formato de instrucciones cuenta con


tres campos,

que representan el cdigo de operacin (op), un campo para

denotar el registro y 8 bits para representar la direccin. A continuacin se muestra


el esquema de este formato.
15

12 11

op

87

registro

direccin

Instrucciones Toma de decisiones: El formato cuenta con tres campos,


cdigo de operacin (op), el desplazamiento representado por 8 bits y

bits no

utilizados, este formato lo podemos ver a continuacin.


15

12 11

op

87

xxxx

desplazamiento

Instrucciones de Salto: En el formato se tiene un campo de 4 bits


correspondiente al cdigo de operacin y el campo de direccin representado por
12 bits, como lo vemos a continuacin.
15

12 11

op

direccin

56

Modos de Direccionamiento
Para este procesador se tienen 3 modos de direccionamiento, que son
los siguientes:
1.

Direccionamiento de registro. El operando es un registro


15

12 11

87

op

rf1

43

rf2

rd

Registro

Figura 2-1. Modo de direccionamiento de registro

2.

Direccionamiento de pgina. La direccin efectiva se forma de la

concatenacin del registro de pgina y el campo de direccin de la instruccin,


donde los bits ms significativos son ocupados por el registro de pgina y los
restantes por el campo de direccin de la instruccin.
15

12 11

op

87

registro

direccin
Memoria

11
87
R e g. P a g.

Figura 2-2. Modo de direccionamiento de pgina

3.

Direccionamiento relativo al PC. La direccin se compone al sumar el

contador de programa, ms el desplazamiento.


15

12 11

op

87

xxxx

desplazamiento
Memoria

P C

Figura 2-3. Modo de direccionamiento relativo al PC

57

Instrucciones
add

Suma con acarreo

Sintaxis

add rd, rf1, rf2

Suma el contenido de los registros rf1, rf2 y la bandera de acarreo, el


resultado es guardado en rd.
sub

Resta con acarreo

Sintaxis

sub rd, rf1, rf2

Resta el contenido de los registros rf1, rf2 y la bandera de acarreo, guarda


el resultado en rd.
and

Realiza la operacin lgica AND

Sintaxis

and rd, rf1, rf2

Efecta la operacin lgica AND entre los registros rf1 y rf2, depositando el
resultado en rd.
or

Realiza la operacin lgica OR

Sintaxis

or rd, rf1, rf2

Realiza la operacin lgica OR entre los registros rf1 y rf2, guarda el


resultado en rd.
srl

Realiza corrimiento lgico a la derecha

Sintaxis

srl rd, rf1, rf2

Corrimiento lgico a la derecha, a rf1 se le aplica el nmero de corrimientos


contenido en rf2, guarda el resultado en rd.
sll

Realiza corrimiento lgico a la izquierda

Sintaxis

sll rd, rf1, rf2

Corrimiento lgico a la izquierda, a rf1 se le aplica el nmero de


corrimientos contenido en rf2, el resultado se coloca en rd.

58

ld

Cargar palabra

Sintaxis

ld rd, dir

El registro rd es cargado con el contenido de la direccin de memoria


compuesta por el contenido del registro que almacena el nmero de pgina y la
direccin estipulada en dir.
st

Almacenar palabra.

Sintaxis

st rd, dir

Almacenar palabra, el contenido del registro rd es transferido a la direccin


de memoria compuesta por el nmero de pgina y la direccin dir.
bc Saltar si la bandera de acarro esta habilitada.

Sintaxis

bc

desplazamiento
Si la bandera de acarreo es 1, el PC se desplaza en el nmero de
localidades denotado por desplazamiento. Si la bandera de acarreo es 0 entonces
continua con la siguiente instruccin.
bz

Saltar si la bandera de cero esta habilitada

Sintaxis

bz

desplazamiento
Si la bandera de cero es 1, el PC se desplaza en el nmero de localidades
denotado por desplazamiento. Si la bandera de acarreo es 0 entonces continua
con la siguiente instruccin.
j

Salto incondicional

Sintaxis

j dir

Salta a la direccin de memoria dir.

59

clr_c

Limpiar bandera de acarreo.

Sintaxis

clr_c

La bandera de acarreo es puesta a cero.


set_c

Establece bandera de acarreo.

Sintaxis

set_c

La bandera de acarreo es puesta a uno.


load_p

Cargar pgina

Sintaxis

load_p pagina

El registro de pgina es cargado para usarlo con posteriores


direccionamientos.
Elementos necesarios para la implementacin del conjunto de instrucciones.
El diseo de la implementacin del datapath o camino de datos de un
procesador esta determinado en gran parte por la arquitectura del conjunto de
instrucciones que se tenga, por lo que es importante agrupar las instrucciones y
analizar que elementos electrnicos se necesitan para que stas se lleven a cabo,
una vez realizado esto es importante identificar elementos que son comunes en
los diferentes tipos instrucciones que se tiene. Posteriormente, se determinara el
tipo de camino de datos a implementar, basndose en la frecuencia de reloj y el
nmero de instrucciones por ciclo (CPI), que se requiera.
A continuacin analizaremos los elementos que se necesitan para que las
instrucciones del ISA propuesto se lleven acabo. As tambin realizaremos la
implementacin de cada uno de los elementos en el lenguaje de descripcin en
Hardware Verilog.

60

Bsqueda de instrucciones
El primer elemento necesario es un elemento o dispositivo que almacene las
instrucciones de un programa, para lo cual se hace uso de una unidad de
memoria que almacene y proporcione las instrucciones en base a una direccin
dada. Tambin

se necesita un elemento que contenga la direccin de la

instruccin, conocido como contador de programa (PC), para poder ejecutar el


programa almacenado en la memoria es necesario leer cada una de las
instrucciones del programa, por lo que es necesario un elemento que realice el
incremento necesario de la direccin de memoria, esto puede hacerse a travs de
un sumador que incremente la direccin actual en un determinado nmero de
localidades para ir a la siguiente instruccin. El datapath necesario para realizar lo
anteriormente dicho se ilustra a continuacin.

Incremento
Add

P
C

Memroira
de
Instrucciones

Instruccin

Figura 2-4. Datapath para la bsqueda de instruccin.

El PC es de 12 bits con lo que se podrn direccionar hasta 2 12 localidades de


memoria. A continuacin se muestra el diagrama y cdigo en verilog.
module PC(clk_PC, reset, direccion, PC_E, direccion_PC);

PC_E

input clk_PC, PC_E, reset;


input [11:0] direccion;
output [11:0] direccion_PC;
reg
[11:0] direccion_PC;
always @(posedge clk_PC)
begin
if(reset) direccion_PC = 12'b000000000000;
else if (PC_E) direccion_PC = direccion;
end

Direccion

P
C

Direccion_PC

clk_PC
reset

endmodule

Figura 2-5. Cdigo Verilog y Diagrama del Contador de programa PC.

61

La memoria de instrucciones tiene un tamao de 212 localidades de 16 bits


cada una. En seguida vemos segmento del cdigo de una memoria de
instrucciones y su diagrama.
module Memo_Instr (pc, rst, instruccion);
input [11:0] pc ;
input rst;
output [15:0] instruccion ;
reg [15:0] instruccion ;
always @(pc)
begin
if (rst) instruccion = 16'b0;
else begin case (pc)
12'b000000000000 : instruccion = 16'b0111000000001100 ;
12'b000000000001 : instruccion = 16'b1100001100100000 ;
12'b000000000010 : instruccion = 16'b1110010001010001 ;
. . .
endcase end
end
endmodule

pc

Memoria
De
Instrucciones

Instruccion

rst

Figura 2-6. Cdigo Verilog y Diagrama de la Memoria de Instrucciones.

El sumador es de 14 bits y su cdigo y representacin grfica se ilustra


enseguida.

62

module sumador_PC(dir_PC, PC_incrementado);

INC

parameter INC=1'b1;

Sumador PC

input [11:0] dir_PC;


output [11:0] PC_incrementado;
assign PC_incrementado = dir_PC + INC ;
endmodule

dir_PC

PC

incrementado

Figura 2-7. Cdigo Verilog y Diagrama del Sumador.

Instrucciones Aritmtico-Lgicas
Las instrucciones que se encuentran dentro de esta agrupacin son: la suma
(add), resta (sub), la operacin and (and), or (or), corrimiento a la derecha (srl), y
corrimiento a la izquierda (sll).
Para ejecutar las instrucciones se necesita primeramente obtener los datos a
procesar del banco de registros e introducirlos a una unidad lgica aritmtica,
para que realice la operacin. El datapath correspondiente se representa de la
siguiente manera.
escribir
Reg1
Reg2
EscReg
EscDato

Banco de
Registros

operacion
ALU

Resultado

Figura 2-8. Diagrama del datapath de Instrucciones aritmtico-lgicas.

Banco de registros
El ISA propuesto realiza las operaciones a travs del uso de registros, por lo
que es necesario contar con un banco de registros. El banco de registros,
permite leer o escribir un dato especificando el nmero de registro.

63

Considerando el formato de las instrucciones aritmtico-lgicas, se requieren


de tres operandos de registros, dos para leer los datos del banco de registros y
uno para escribir el resultado en un registro. Por lo que es necesario que el banco
de registros cuente con dos entradas para indicar los registros a leer y dos salidas
para leer el dato contenido en los registros respectivos. Para escribir un dato es
necesario tener una seal que indique cuando se realizar una escritura, as como
una entrada para indicar el registro a escribir y otra para proporcionar el dato.
El banco de registros cuenta con 16 registros de 16 bits, ya que es el nmero
de registros que permite al procesador realizar de forma eficientemente los
programas que se propongan, cada registro tiene un ancho de 16 bits, puesto que
el tamao de los datos estipulados en el diseo de la arquitectura fue de 16 bits.
Las entradas para leer o escribir registro deben ser de 4 bits para poder
direccionar los registros del cero al quince (16 registro). Las salidas y la entrada
para el dato a escribir son de 16 bits. Esto se representa en el diagrama que se
muestra enseguida, as como parte del cdigo de implementacin en Verilog.

module Registros (clk, rst, we, wr, r1, r2, wd, d1, d2);
input
clk, rst;
...
output [15:0] d1;
...
reg [15:0] ram [15:0];
always @(posedge clk or posedge rst)
begin
if (rst) begin
ram[0] <= 5;
ram[1] <= 1;
.......
ram[14] <= 14; ram[15] <= 15; end
end
assign d1 = ram[r1];
assign d2 = ram[r2];
endmodule

we
r1
r2
wr

Banco de

d1

Registros

wd

d2

Figura 2-9. Cdigo Verilog y diagrama del Banco de registros.

64

Unidad aritmtico-logica (ALU)


Realiza operaciones de suma, resta, and, or, corrimientos a la derecha e
izquierda. La ALU es de 16 bits y realiza las operaciones para nmeros sin signo.
Tiene dos entradas para los datos a procesar y 3 salidas, una para el resultado y
dos para seales de acarreo y cero. A continuacin se muestra el diagrama e
implementacin en Verilog de la ALU.

module ALU(ctrl_ALU, A, B, c_en, c_sal, cero, R);


input [2:0] ctrl_ALU;
input [15:0] A, B;
input
c_en;
output
c_sal, cero;
output [15:0] R;
reg [15:0] Raux, R;
........
always @( ctrl_ALU or A or B or c_en)
begin
case (ctrl_ALU)
suma: begin {c_sal,R} = A + B + c_en;
cero = (R == 1'b0) ? 1'b1: 1'b0; end
resta: begin {c_sal,Raux} = A - B - c_en;
if (c_sal == 1) R=(~Raux)+1; else R=Raux;
cero = (R == 1'b0) ? 1'b1: 1'b0; end
op_and: begin R = A & B; c_sal = 1'b0; cero = 1'b0; end
.......
endcase
end
endmodule

ctrl_ALU

c_en

ALU

c_sal
c_en
R

Figura 2-10. Cdigo Verilog y Diagrama de la ALU

Instrucciones de acceso a memoria


Las instrucciones de acceso a memoria son: carga (ld) y almacenamiento (st)
de dato. Almacenar o cargar un dato de memoria, implica leer o escribir en un
registro del banco de registro y escribir o leer un dato en una localidad de la
memoria de datos. Para direccionar la memoria se hace uso de la paginacin,
para lo cual es necesario un registro de pagina, que es de 4 bits. La direccin de
la memoria esta compuesta en los primeros 4 bits por la pgina y enseguida por
la direccin estipulada en la direccin. A continuacin se ilustra el datapath
correspondiente a este tipo de instrucciones.

65

escribir
Reg1
Reg2
EscReg
EscDato

Banco de
Registros

Memoria
de datos

Dato

Pgina
Direccion

Figura 2-11. Diagrama del datapath para ejecutar


instrucciones de toma de decisiones.

La memoria de datos puede direccionar hasta 212 localidades, cada


localidad tiene un ancho de 16 bits, un segmento de cdigo y el diagrama de sta,
podemos verlo enseguida.

module Memo_Datos(clk, rst_memo, esc_memo, dir, dato_e, dato_s);

esc_memo

input [15:0] dato_e;


....
output [15:0] dato_s;

dato_e

reg [15:0] ram[31:0];


always @(posedge clk or posedge rst_memo)
begin
if (rst_memo) begin
ram [0] <= 1; ram [1] <= 2; ram [2] <= 3;
....
ram[30] <= 31; ram[31] <= 31; end
else if (esc_memo) ram [dir] <= dato_e;
end
assign dato_s = ram[dir];
endmodule

dir
clk

Memoria
de
Datos

dato_s

rst_memo

Figura 2-12. Cdigo Verilog y diagrama de la memoria de datos.


El registro de pgina, contiene el nmero de pgina en el que se
direccionar, este registro es de 4 bits que se concatena con la direccin
representada en la instruccin. El cdigo y diagrama se ilustran enseguida.

66

module Pagina (pag_E,, pag, s_Pag);


input pag_E;
input [3:0] pag;
output [3:0] s_Pag;

pag_E

Pagina

s_Pag

assign s_Pag = pag_E ? pag : 0;


endmodule

Figura 2-13. Cdigo Verilog y diagrama del registro de pgina.


Instrucciones de Toma de decisiones y Salto
La instrucciones de toma de decisiones y salto, son: saltar si la seal de
acarreo esta activa (bc), saltar si la seal de cero esta activa (bz) y saltar a cierta
direccin (j). Para ejecutar estas instrucciones se necesita modificar el datapath de
la bsqueda de instrucciones, ya que es all donde se almacena la direccin de la
siguiente instruccin, por lo que se agregara un multiplexor para decidir que
direccin ser la siguiente: si la estipulada en el salto condicional, la secuencia
normal del programa o ser otra direccin, la decisin sobre que direccin se
ejecutar, la proporciona el control del procesador.

Instrucciones de Control
Las instrucciones de limpiar seal de acarreo (clr_c), establecer bandera de
acarreo (set_c), cargar pgina (load_p), no necesitan un hardware especial, ya
que stas pueden ser ejecutadas por lneas de control.
Una vez que ya conocemos los caminos de datos o datapath necesarios
para realizar las instrucciones, podemos combinarlos en un slo datapath y
realizar el control necesario para que las instrucciones se lleven a cabo. Para
realizar el datapath del conjunto de instrucciones, es necesario determinar el tipo
de datapath mas adecuado para la implementacin. Esto lo veremos en el captulo
cuatro.

67

En el siguiente captulo hablaremos de las herramientas que se


utilizaran para el diseo, simulacin e implementacin del camino de datos o
datapath.

CAPITULO 3.- PROGRAMADORES


En este capitulo se tratarn los programadores existentes.
NOPPP, the "No-Parts" PIC Programmer
NOPPP es un sencillo programador para los microcontroladores PIC16C84,
PIC16F83 y PIC16F84. Se conecta al puerto paralelo del PC. Un extenso artculo
con los planos y descripcin fu publicado en Electronics Now Magazine,
Septiembre de 1998.
El NOPPP es inusualmente simple y utiliza componentes fcilmente
localizables.Probablemente ya tendrs todos los componentes necesarios. Aqu
tienes el circuito (modificado ligeramente respecto al diseo original para mayor
fiabilidad):

En el PIC, la patilla MCLR se pone a +5V para el funcionamiento normal (no


se usa aqu), a +12V para grabacin, y a 0V para resetear. Realmente los +12V no
"queman una EPROM" -- el voltaje superior es meramente una seal para activar

68

el circuito interno de programacin de la memoria flash. Debe ser mayor de 12.0


volts. La salida D0 del PC controla esta seal. No hay peligro para el chip si se
aplica esta seal en un momento inadecuado.
El PIC se comunica mediante protocolo serie sncrono de dos lneas (mas
masa).El Pin B6 es la seal de strobel; los pulsos en este pin le indican al PIC
cuando debe recibir o transmitir cada bit de datos. El Pin B7 se utiliza como
entrada y salida. Cuando el PIC est recibiendo datos desde el PC, la seal
SLCTIN es mantenida a nivel bajo y por lo tanto D2 no conduce por lo que D1 y
R1 no se utilizan en este momento y el PIC recibe los datos mediante la seal
AUTOFD.
Cuando el PIC est enviando datos, las seales SLCTIN y AUTOFD estn a
nivel alto, D1 no conduce y D2 y R1 proporcionan la polarizacin (pull-up). La
resistencia R2 mas la resistencia interna de la lnea AUTOFD (dentro del puerto
del PC normalmente 4.7k, auque a veces mucho menos en los nuevos puertos
paralelos CMOS) proporcionan algo de Pull-up adiciona. El PC lee la informacin
atravs de la lnea BUSY, que es 0.6V mayor que la salida del PIC debido al diodo
D2. El puerto paralelo del Pc tiene (o debera tener) entradas CMOS o Schmitt y
no debera necesitar verdaderos niveles lgicos TTL.
R2 y R3 ayudan a reducir las interferencias aislando la capacidad de entrada
del PIC, de modo que circule menos corriente durante transiciones bruscas.El PIC
tiene entradas del tipo Schmitt, que no impiden la reduccin del tiempo de subida
(rise tiem). R4 proteje la base de Q1
El circuito original publicado en Electronics Now es suficientemente fiable.
Sin embargo, revisando una revista me encontre un circuito con algunas
modificaciones, me tome la molestia de armarlo y con la novedad de que funciona
perfectamente y aqui te lo muestro. Novedades del circuito, usa diodos 1n4148,
transistores bc548 y se omiten algunas resistencias .

69

Para alimentar el circuito se requieren dos fuentes de alimentacion reguladas


una de 5 volts y una de 12 volts.

El software original para este programador esta desarrollado en c y funciona


perfectamente bajo una ventana de ms-dos, pero eso no es todo tambien hay una
version adaptada del noppp para windows que de igual manera ya la he probado y
funciona muy bien y aqui te las presento un mano a mano.

El circuito.
Este programador, basado en el Ludipipo, est adaptado a la programacin
de PICs, es simple y barato (2 euros), pero permite programar a travs del puerto
serie de cualquier PC de sobremesa (en los porttiles da problemas) una cantidad
nada despreciable de PICs distintos, y todo ello utilizando software de
programacin estndar, como ICPROG 1.4.
70

Se ha probado con xito a programar los siguientes PICs:


16F627, 16F628.
16C84, 16F83, 16F84.
16F873, 16F874, 16F876, 16F877.
18F242, 18F252, 18F258, 18F442, 18F452, 18F458.
Y, al menos en teora (no los he probado) debera funcionar
correctamente con los siguientes:
16C62, 16C63, 16C64, 16C65, 16C66, 16C67.
16C71, 16C72, 16C73, 16C74, 16C75, 16C76, 16C77, 16C715.
16C620, 16C621, 16C622, 16C623, 16C624, 16C625.
16F870, 16F871, 16F872.
16C923, 16C924.
Teniendo en cuenta el costo en tiempo y dinero que requiere la
construccin de este programador, no se puede pedir ms.
Sin entrar en detalles sobre el funcionamiento del circuito, decir slo
que se basa en principios muy parecidos a los del JDM2, pero con ciertos
retoques en la temporizacin y la estabilidad de las seales. En este caso, se
utiliza como alimentacin de +5V el condensador C2, que se carga mediante D2,
D3 y D4 en los momentos en que las seales DTR, RTS y TXD del puerto serie
son negativas, y su tensin queda estabilizada mediante D7. D5 fija la tensin de
programacin en 12V y D6 limita la tensin de la seal CLOCK a 5V.

71

Figura 3.1

Realizacin prctica.
El diseo final aparece en la figura 3.2. El trazado se ha hecho sobre
un grid de una dcima de pulgada para que se pueda construir sobre una placa
board. La construccin de este circuito es bastante simple, as que slo queda
aclarar que el conector CON1 es de los que se utilizan para fabricar cables serie, y
se debe montar de forma que la placa encaje entre sus dos filas de patitas,
quedando cinco patitas en la cara de cobre y 4 en la cara de componentes (ver
figuras 3 y 4).

72

Figura 3.2

Figura 3.3

73

Figura 3.4
Para conectar el programador al PC har falta tambin un cable serie
transparente (cableado pin a pin) que tenga cableados al menos los pines que se
indican en la figura 3.5. Este cable se puede fabricar o comprarlo ya hecho (es el
tipo de cable que se utiliza para conectar un modem al PC).

Figura 3.5
Utilizacin.
Lo primero que hay que tener claro a la hora de utilizar este
programador es el orden en que se deben hacer las cosas para no estropear ni el
programador, ni el PIC, ni el puerto serie del PC. Siempre que queramos insertar o

74

extraer un PIC del zcalo hay que desconectar el programador del puerto serie,
ya que, al extraer la alimentacin del puerto serie, mientras est conectado estar
alimentado. Por tanto, el proceso a seguir consta de los siguientes pasos:
1.-Con el programador desconectado insertar el PIC en el zcalo en la
posicin correcta (figura 6).
2.- Conectar el programador al cable que viene del puerto serie del PC.
3.- Llevar a cabo las operaciones de grabacin o lectura necesarias.
4.- Desconectar el programador del cable que viene del puerto serie del PC.
5.-Extraer el PIC del zcalo.

Figura 3.6
Como software de grabacin recomiendo ICPROG 1.05A, que ha sido
probado y funciona perfectamente con este programador. Se puede bajar de su
website. Una vez instalado, en el men SETTINGS OPTIONS, en la seccin
LANGUAGE elegimos ESPAOL. A continuacin, en el men AJUSTES
escogemos TIPO HARDWARE (se puede hacer directamente pulsando F3) y
aparece la ventana de la figura 3.7. Todas las opciones deben quedar como en la
figura 3.7, salvo el puerto, en el que habr que marcar el que hayamos utilizado,
pulsando OK para finalizar.

75

Figura 3.7
Existe una prestacin en este software que permite ver la posicin en la
que habra que insertar el PIC en el zcalo, pero slo es vlida para el JDM
original, as que no hagis caso de ella. Slo queda seleccionar el modelo de PIC
que vamos a grabar o leer, y llevar a cabo las acciones deseadas. El programa
trabaja igual con ficheros .BIN .HEX. Para grabar un PIC, abrimos el fichero
mediante el men ARCHIVO y seleccionamos PROGRAMAR TODO en el men
COMANDO (o pulsamos F5). Para leer un PIC, seleccionamos LEER TODO en el
men COMANDO (o pulsamos F8) y luego podemos salvarlo a un fichero
mediante el men ARCHIVO. En la pgina de ICPROG hay instrucciones sobre el
programa.

PROGRAMADOR TIPO IN-CIRCUIT JDM


Presentamos ahora, el popular programador in-circuit, llamado JDM; que es
compatible con el popular programa para programar pics de la webb llamado ICPROG, este puede programar el nuevo y economico procesador tipo pic 16F628 y
ahora se esta usando mucho, parece que rapidamente desplazara a su antecesor;
PIC16F84A. Se dise sobre un circuito impreso de 2x4 cm. con el programa
76

tango.pcb, lo usaremos en nuestras practicas del curso de procesadores y sera


herramienta de desarrollo para el grupo Mekatrun en la Universidad Nacional de
Colombia. Apartir de aca, no usaremos mas el popular programa Pony Prog por
considerar JDM mucho mejor, sin embargo es compatible con el programador incircuit de pony-prog, ademas es mas pequeo funciona mejor y hace un mejor uso
de la energia del puerto serial de tu PC.
Estas son vistas del programador JDM tipo in-circuit tiene cinco pines que se
insertan en tu protoboard para programar cualquier PIC debes cablear los pines
VPP,VCC,GND,RB7,RB6. y !...............listo..................!

77

Para que el programa IC-PROG lo pueda detectar, se debe configurar el


hardware asi como muestra el grafico siguiente (invierte Vcc).

78

Se debe construir un cable para el puerto serial, de la forma que muestra la


figura siguiente; note que la resistencia de 2.2K se ha instalado sobre el mismo
conector; esto permite ahorrar un hilo y poder usar un popular y economico cable
telefonico de cuatro hilos, con su respectivos conectores tipo RJ-11 para circuito
impreso y cable.

79

Este es el diseo electronico; en el se realizo una modificacion en algunas


componentes del diseo original, para mejorar su desempeo. los diodos 1N4148
se remplazaron por diodos tipo shottky que presentan una caida de tension directa
menor y se le puede robar mas energa al puerto serial de su P.C.

80

Dos transistores son 2N2222,

Zener de 5.1/0.5W

Zener de 8.2/0.5W

Condensador de 100uF/16v y otro de 100uF/6.3v

Resistencia de 10k y de 2.2k , 1/8W.

Cuatro diodos tipo shottky de pequea seal

El circuito impreso presenta este aspecto y asi como indica el grafico debe
cablearse en el protoboard, te sirve para muchos pics tipo flash o inclusive los que
no lo son, si se cablean los cinco pines; RB7,RB6,Vcc,Gnd,Vpp.

Las uniones de superficie conectan pistas por el lado de las soldaduras, las
puedes obtener de unidades de diskette malas. o circuitos de desecho que tengan
componentes de montaje superficial.

81

CAPITULO 4.- DESARROLLO DE CIRCUITOS


En este capitulo abordaremos el tema del desarrollo de varios circuitos
prcticos basados en el uso del microcontrolador PIC16F84.
4.1.- DESARROLLO DE UN DETECTOR DE RUIDO DE ALTA FRECUENCIA DE
BAJO COSTE BASADO EN EL MICROCONTROLADOR PIC16F84.
RUIDO DE ALTA FRECUENCIA.
Seal no deseada presente en la onda de tensin del terminal de
alimentacin.
Las frecuencias a las que afecta son superiores a la del armnico 50 de la
seal fundamental (2500 o 3000 Hz).

CAUSAS:
ASDs, PWMs, convertidores y conmutadores de seal .
Otros.

EFECTOS:
Errores de comunicacin y control.
Problemas con equipos sensibles:

ordenadores, sensores, etc.

82

OBJETIVO:
Disear y construir un detector de ruido de alta frecuencia que permita:
Medir y detectar una presencia de ruido de al menos el 40% de la seal
fundamental.

Seleccionar el nivel de ruido mximo para realizar la deteccin.


Seleccionar la banda de frecuencias en la que se mide y detecta el ruido.

DECISIONES:
Seleccin de las bandas de estudio:
Filtro de capacidades conmutadas.
Seleccin del umbral de deteccin:
Tensin de referencia ajustable.
Presentacin de medida y modo de trabajo:
Pantalla de cristal lquido.

83

PARA EL HARDWARE USAREMOS:


FILTRO MF10. Filtro de capacidades conmutadas de frecuencia de corte proporcional a la
frecuencia de reloj.
Permite configuracin paso alto.
Mximo 4 orden.
Frecuencia mxima de corte 20kHz para una frecuencia mxima de reloj de
1MHz.
Banda de trabajo mnima hasta 200kHz.
Bajo precio.

SELECCIN Y GENERACIN DE FRECUENCIAS.


Seleccin mediante un interruptor binario triple.
Desestimacin del microcontrolador como generador.
Circuito oscilador con cristal e inversor.
Subfrecuencias con contador y multiplexor.
Nota: Buffer de aislamiento.

84

CIRCUITO DE FRECUENCIA.-

2MHz
1

VCC

820pF
GND

820pF

13
12
14
15

9
7
6
5
3
2
4

15
14
13
12
11
10

4
3
2
1

9
7

74'151
I0
I1
I2
I3
I4
I5
I6
I7
S0
S1
S2
E

FREC

FRECUENCIA AL FILTRO

VCC+

RB2

RB7

I17005
VCC+

RB6

/Z

16

Q1
Q2
Q3
Q4
Q5
Q6
Q7
Q8
Q9
Q10
Q11
Q12

CLR

1
1

22K

4K7

74'4040
CLK

VCC

11

GND

10

16

1
2
3
4
5
6
7

I1
O1
I2
O2
I3
O3
GND

VCC

I6
O6
74'04
I5
O5
I4
O4

14
13
12
11
10
9
8

VCC+

1
2
3
4
5
6
7

E1
D1
O1 74'126
E2
D2
O2
GND

VCC
E4
D4
O4
E3
D3
O3

14
13
12
11
10

VCC+
RB5
9
8

12K

1
VCC+

12K
1

12K

1
2
3
4

S2

8
7
6
5

SWDIP -4

FILTRADO.-

Eliminamos las componentes de baja frecuencia: configuracin paso alto.

Su frecuencia de corte es proporcional a la frecuencia seleccionada.

Se disea con ganancia unidad para mantener el mayor ancho de banda


posible.

Mximo orden (4) mediante dos etapas en cascada, para mayor pendiente
de cada.

Butterworth para banda de paso mximamente plana.

85

UMBRAL.

Generacin mediante un divisor con un potencimetro variable.

Seleccin de precisin mediante un interruptor de dos posiciones:

Rango hasta 20%.

Rango hasta 50%.

CONEXIONADO DEL MICROCONTROLADOR-

86

PLACAS DE CIRCUITO IMPRESO.-

SOFTWARE.EL PROGRAMA:

Limitado a 1k de memoria.

Tareas:

Controlar y leer el ADC.

Leer la seleccin de frecuencia.

Permitir y atender la interrupcin.

Tratar los datos.

Controlar el LCD y mostrar los datos.

87

EL CIRCUITO Y UN EJEMPLO DE DETECCIN.-

LINEAS FUTURAS DE ACCION.

Bajar los lmites de deteccin y eliminar el error para porcentajes de ruido


menores del 8%:

Amplificacin antes de la conversin.

Ganancia mayor de filtrado (menor ancho).

Adaptar para terminales trifsicos.

Comunicacin con el PC.

Mejorar prestaciones:

Filtro ms potente (LTC1068, LMF100).

Microcontrolador ms avanzado (PIC16F87,...).

88

4.2.- DESARROLLO DE UN CIRCUITO PARA PWM


En esta seccin hablaremos sobre PWM y sus antecedentes bsicos
para una mejor comprensin.
Con PAM, las muestras de una seal mensaje son utilizadas para modular la
amplitud de un tren de pulsos. El resultado es una seal consistente en pulsos de
ancho constante regularmente espaciados, cuyas amplitudes varan en proporcin
a la seal mensaje. (Figura 1(a)).
Otro tipo de modulacin de pulsos es la modulacin por tiempo de pulsos
(PTM). Con PTM, las muestras de la seal mensaje son utilizadas para variar un
parmetro de la sincronizacin de los pulsos (un parmetro directamente
relacionado con el tiempo, tal como la duracin o la posicin de los pulsos).
Un parmetro de tiempo que puede variarse es la duracin o ancho del
pulso. Con PWM (o PDM) las muestras de la seal mensaje son utilizadas para
modular el ancho o duracin del pulso. El resultado es la seal consistente de
pulsos de amplitud constante cuyo ancho varia en proporcin a la seal mensaje
(ver Figura 1(b)). PWM tambin es llamada modulacin por duracin de pulsos:
PDM.

89

La posicin de los pulsos es otro parmetro de tiempo que puede ser


utilizado en PTM. Con PPM, las muestras de la seal mensaje se utilizan para
modular las posiciones de pulsos de ancho y amplitud constantes (ver Figura 1(c)).
PWM y PPM estn estrechamente relacionadas. Las seales PPM son
usualmente generadas a partir de seales PWM como lo muestra la Figura 1(b) y
(c).
La seales PTM tienen algunas caractersticas en comn con seales PAM.
Ambas requieren que la tasa de muestreo sea ms grande que la tasa Nyquist.
Aunque los espectros de seales PTM son complejos, estos contienen el espectro
de la seal mensaje origina, tal como las seales PAM.

90

Sin embargo, hay importantes diferencias entre seales PTM y seales PAM.
La informacin en las seales PTM es llevada en el sincronismo de los pulsos (en
las posiciones de los flancos de los pulsos), en lugar de las amplitudes como en
PAM. Cuando el ancho de banda de canal es grande, los flancos de los pulsos son
casi verticales. Como resultado de esto, las seales PTM son menos sensitivas al
ruido que las seales PAM. Reduciendo el ancho de banda del canal se
incrementa el tiempo de subida (Tr) de los pulsos y el ruido tiene efecto en la
precisin del sincronismo de los pulsos.
PWM se utiliza a menudo donde se requiere un control remoto proporcional a
una posicin. El valor promedio de seales PWM varia directamente con la seal
mensaje y puede, por ejemplo, ser usado para controlar la velocidad de un motor.
Debido a que los pulsos en seales PPM pueden ser muy estrechos, y por lo
tanto se requiere muy baja potencia para transmitirlos, la transmisin PPM puede
ser muy eficiente. PPM es frecuentemente utilizada en sistemas pticos de
comunicacin.
La Figura 2 muestra la forma de generar seales PWM y PPT. La Figura 2 (b)
muestra las formas de onda en el generador PWM/PPM.
La seal mensaje es comparada con una seal rampa (seal de muestreo)
para producir la salida PWM. Si el nivel de voltaje de la seal mensaje es mayor
que el de la seal rampa, la salida del comparador es alta (TTL, 5V). Si la seal
mensaje es menor que la seal rampa, la salida del comparador es baja (TTL, 0V).
La salida del comparador es por tanto una seal PWM, puesto que el ancho de los
pulsos depende del nivel de la seal mensaje.
La seal PWM es aplicada a un circuito generador de pulsos, el cual general
un pulso de ancho y amplitud fijos con cada flanco de cada de los pulsos de la
seal PWM. La salida del generador de pulsos es por tanto la seal PPM, puesto

91

que la posicin de los pulsos con respecto a una seal de reloj (una seal
cuadrada de igual frecuencia que la seal rampa) depende del nivel de la seal
mensaje.

Tanto PWM como PPM pueden ser demoduladas directamente utilizando un


filtro pasabajo, como se muestra en la Figura 3 (a). Sin embargo, el filtro es
incapaz de detectar el sincronismo de los pulsos y por lo tanto promedia la seal
con ruido incluido, para demodularla. Por lo tanto, antes del filtrar se suele utilizar
un limitador que reconstruye los pulsos; as la demodulacin es ms eficaz (ver
Figura 3(b)).

92

Las seales PPM demoduladas slo por filtrado pasabajo, pueden producir
una seal reconstruida de muy baja amplitud, si los pulsos son muy estrechos.
Por tanto, se suele recuperar el sincronismo antes del filtrado, como se ve en
la Figura 3(c). El biestable (FLIP-FLOP) entrega una seal PWM la cual es
demodulada segn se dijo anteriormente.

93

La Figura 4, finalmente muestra las seales en un receptor PPM.

4.3.- PROYECTOS CON EL PIC 16F84


Si bien el clsico de todos los tiempos es el PONG, el TETRIS es clsico,
pero es contemporneo al mismo tiempo. Hoy da se lo puede encontrar en
versiones 3D para potentes PC's, versiones para Macintosh, reducidas versiones
para Palm Pilots e incluso en sistemas del tipo GameBoy. Todo un pionero de la
multiplataforma.

94

El juego funciona en un PIC16F84 a 12MHz, generando el vdeo en tiempo


real con slo dos resistencias. La nica diferencia electrnica, comparado con el
PONG, es que PONG puede correr en un C PIC16C84, pero TETRIS requiere
mas memoria RAM (68 bytes, adicionales a los disponibles) por lo que slo
funciona en un C PIC16F84. EL circuito electrnico en si es el mismo, por lo que
puede emplearse la misma placa que para el PONG. El joystick 2 no actual en
este juego.
El juego es muy simple. Es posible desplazar el bloque hacia los costados
usando para ello las teclas IZQUIERDA y DERECHA, puede hacer caer el bloque
bruscamente presionando la tecla ABAJO. Presionando el botn FUEGO har
rotar el bloque. Los bloques estn cayendo todo el tiempo, primero parece lento,
pero, mientras pasa el tiempo de juego, la velocidad de cada de los bloques se
acelera. Y la msica se acelera al ritmo de los bloques, SI!!!, escucho bien, hay
msica en el juego !, pero no espere gran cosa, porque no hay tanto tiempo de
CPU para dedicar al sonido. Un amigo, Carl Henrik Grunditz, me ha ayudado

95

mucho con el audio del juego. Actualmente l est pensando hacer el juego
"Boulder Dash" con la misma electrnica del tetris y el pong. La msica es una
vieja meloda Rusa llamada "Karaboschka", que es una de las que sonaban en el
tetris del gameboy.
El puntaje es mostrado en el ngulo inferior derecho de la pantalla, y el
prximo bloque que vendr se ve en el ngulo superior izquierdo. Slo es posible
obtener 999 puntos, luego de ello el juego termina. Es posible que hayan algunos
"bugs" en el sistema, pero los iremos corrigiendo al tiempo.
list p=16F84,r=hex
w

equ

equ

pcl

equ

0x02

status

equ

0x03

porta

equ

0x05

portb

equ

0x06

indf

equ

0x00

fsr

equ

0x04

eedata

equ

0x08

eeadr

equ

0x09

eecon1

equ

0x08

rd

equ

rp0

equ

startspeed equ

0x18

movespeed equ

0x06

96

up1b

equ

down1b

equ

left1b

equ

right1b

equ

fire1b

equ

up2b

equ

down2b

equ

left2b

equ

right2b

equ

fire2b

equ

up1p

equ

portb

down1p

equ

portb

left1p

equ

portb

right1p

equ

portb

fire1p

equ

portb

up2p

equ

portb

down2p

equ

portb

left2p

equ

porta

right2p

equ

porta

fire2p

equ

porta

counter0

equ

0x0C

counter1

equ

0x0D

counter2

equ

0x0E

counter3

equ

0x0F

nextblocktyp

equ

0x10

blockx

equ

0x11

blocky

equ

0x12

blocktyp

equ

line
x

0x13
equ

equ

0x14

0x15

97

equ

0x16

delaycnt

equ

0x17

angle
blockstuff

equ
equ

0x18

0x19

fallcnt

equ

0x1A

points

equ

0x1B

random

equ

0x1E

stuff

equ

0x1F

m_freq

equ

0x20

m_cnt

equ

0x21

m_songcnt equ

0x22

buffer

equ

0x24

currbl

equ

0x44

x0

equ

0x4C

y0

equ

0x4D

movecnt

equ

0x4E

remline

equ

0x4F

hsfall

equ

rotate

equ

goleft

equ

goright

equ

drop

equ

rotat

equ

gameover equ

delay

MACRO
LOCAL label
movwf delaycnt

label

decfsz delaycnt
goto label

98

ENDM
dnop

MACRO
LOCAL label

label

goto

label+1

ENDM
org 0x000
goto inittetris
;------------ This table contains the 3 note lengthes for the 5 speeds -------getlength

addwf

pcl

retlw

0x0B

retlw

0x16

retlw

0x1D

retlw

0x09

retlw

0x12

retlw

0x19

retlw

0x07

retlw

0x0D

retlw

0x11

retlw

0x04

retlw

0x08

retlw

0x0C

retlw

0x02

retlw

0x04

retlw

0x06

;------------------------ set bit in the gamefield ----------------------------

99

setbit

call

getbit

iorwf

indf

;get bitbyte and bitmask 20 cycles


;set bit

return
;----------------------- clear bit in the gamefield --------------------------clrbit

call

getbit

;get bitbyte and bitmask 21 cycles

xorlw

0xff

;invert bitmask

andwf

indf

;clear bit

return
;-------------------- point at byte, and return bitmask ----------------------getbit

movlw buffer
btfsc

;15 cycles

x,3

movlw buffer+1
clrc
rlf

addwf

y,w

movwffsr

;fsr = 2*y + x<

Contador de 4 dgitos con PIC


Quizs una de las aplicaciones mas usual para un micro controlador sea la
elaboracin de un contador de turnos o de personas atendidas. En este caso
decidimos disear un circuito que requiera la menor cantidad posible de
componentes y que cumpla con las prestaciones tpicas de estas aplicaciones.

100

Como se ve en el diagrama el circuito est estructurado alrededor del


PICmicro el cual en su interior lleva la cuenta de las pulsaciones sobre el pulsador
'I' y, a su vez, genera los dgitos a ser mostrados sobre los displays de 7
segmentos de LED's.
Para reducir la cantidad de circuitos integrados a slo uno hemos optado por
generar los dgitos por soft dentro del mismo micro, evitando as tener que recurrir
a decodificadores de BCD, que si bien no representan costo alguno para
adquirirlos, el hecho de colocarlos en el circuito impreso implica mayor tamao,
mayor cantidad de pistas y perforaciones.
El funcionamiento es por dems simple. Los cuatro dgitos del display se
encuentran en paralelo. Esto significa que el segmento A del primero est
cableado junto con el del segundo, el tercero y el cuarto. Y lo mismo sucede con
los dems segmentos. Para que no se encienda sobre los cuatro dgitos el mismo
nmero se multiplexa el encendido por medio de los cuatro transistores. Para que
el display se ilumine no solo tiene que haber un uno lgico en el segmento a
encender, sino que tambin se requiere que el transistor este en conduccin para
lograr la masa. De esta forma, conmutando los transistores secuencialmente y a
velocidad suficiente se logra hacer parecer al ojo humano que los cuatro displays

101

estn iluminados simultneamente, cuando en realidad slo uno se ilumina por


vez. Por ejemplo, para hacer aparecer en los displays la secuencia 1 2 3 4 habra
que hacer la siguiente rutina:
1.

Generar el dgito 1

2.

Encender el primer display

3.

Generar el dgito 2

4.

Encender el segundo display

5.

Generar el dgito 3

6.

Encender el tercer display

7.

Generar el dgito 4

8.

Encender el cuarto display

9.

Repetir la secuencia a velocidad suficiente.

Esto es el concepto bsico. Para entender mejor el sistema ser necesario


consultar el archivo en assembler que contiene el cdigo fuente del programa a
cargar en el micro, que lo puede obtener del link de mas abajo.
Para evitar que la velocidad del micro haga avanzar el conteo a mas de una
unidad por pulsacin se ha implementado un retardo de 100mS luego de la
pulsacin del interruptor marcado como 'I'. Si se quiere hacer avanzar el conteo
hasta una posicin no es necesario presionar y soltar el pulsador repetitivamente,
bastar con mantenerlo presionado y el conteo avanzar rpidamente. Para volver
la cuenta a cero basta con resetear el micro, presionando la tecla marcada como
'R'.
Si bien nosotros empleamos un cristal de 4MHz para el generador de reloj,
tambin se puede emplear una red RC, porque en este proyecto no se requiere
gran precisin de clock.

102

Los transistores pueden ser reemplazados sin problema por cualquiera de


uso general como el BC548 o similar.
Los displays utilizados son de LED's con ctodo comn. Se pueden emplear
displays pequeos y medianos sin problema. Para el uso de displays grandes
deber emplear algn driver de corriente como el ULN2803A o similar. La
alimentacin puede ser tanto 5 como 6 voltios. No se requiere que est
estabilizada y se puede emplear un adaptador universal, siempre que sea de
calidad aceptable. La corriente requerida es de 300mA.
;Contador de 4 digitos.
indo

equ

00h

;registro de indireccion

pc

equ

02h

;contador de programa

status equ
fsr

equ

03h
04h

;registro de estado
;registro de seleccion

ptoa

equ

05h

;puerto a

ptob

equ

06h

;puerto b

rota

equ

0fh

;variable para desplazamiento de display

trisa equ

85h

;configuracion puerto a

trisb equ

86h

;configuracion puerto b

dig1

equ

10h

;acumulador miles

dig2

equ

11h

;acumulador centenas

dig3

equ

12h

;acumulador decenas

dig4

equ

13h

;acumulador unidades

loops equ

1dh

;variables usadas en retardos

loops2 equ

1eh

z
ram

equ
equ

02h
05h

;flag de cero
;bit de seleccion de pagina de memoria

equ

00h

;flag de acarreo

equ

00h

;bit de destino a variable de trabajo

103

reset org

00

goto

inicio

org

05h

retardo

;subrutina de retardo

movwf loops
top2

movlw d'110'

;la variable de trabajo contiene la cant.


;de ms a demorar

movwf loops2
top

nop
nop
nop
nop
nop
nop
decfsz loops2
goto

;controla si termina 1mS

top

decfsz loops
goto

;controla si termina el retardo completo

top2

retlw 0
s1000

;rutina de incremento x 1000

clrf

dig2

;pone a cero las centenas

incf

dig1

;incrementa el contador de miles

movf

dig1, w

;carga en work el conteo de los miles

xorlw 0ah

;si work era 10, entonces quedara en cero

btfsc status, z

;si es cero, el flag z queda alto

clrf

dig1

;inicializa los miles

return
s100

;rutina de incremento x 100


clrf

dig3

;pone a cero las decenas

104

incf

dig2

movf

;incrementa el contador de centenas

dig2, w

;carga en work el conteo de las centenas

xorlw 0ah

;si work era 10, entonces quedara en cero

btfsc status, z

;si es cero, el flag z queda alto

call

;incrementa los miles

s1000

return
s10

;rutina de incremento x 10
clrf

dig4

;pone a cero las unidades

incf

dig3

;incrementa el contador de decenas

movf

dig3, w

;carga en work el conteo de las decenas

xorlw 0ah

;si work era 10, entonces quedara en cero

btfsc status, z

;si es cero, el flag z queda alto

call

s100

;incrementa las centenas

return
subir

;rutina de incremento
incf
movf

dig4

;incrementa el contador de unidades

dig4, w

;carga en work el conteo de las unidades

xorlw 0ah

;si work era 10, entonces quedara en cero

btfsc status, z

;si es cero, el flag z queda alto

call

s10

;incrementa las decenas

movlw d'250'

;retardo de 100ms

call

retardo

return
tabla

;genera los numeros sobre el display


addwf pc

;agrega al cont. programa el valor de work

retlw b'00111111'

;genera el 0

retlw b'00011000'

;genera el 1

retlw b'01110110'

;genera el 2

105

retlw b'01111100'

;genera el 3

retlw b'01011001'

;genera el 4

retlw b'01101101'

;genera el 5

retlw b'01101111'

;genera el 6

retlw b'00111000'

;genera el 7

retlw b'01111111'

;genera el 8

retlw b'01111101'

;genera el 9

inicio

;programa principal

bsf

status, ram

;selecciona el banco de memoria alto

movlw b'00010000'

;configura el puerto a

movwf trisa

;bit 4 entrada, demas bits salidas.

movlw 00h

;configura el puerto b

movwf trisb

;como salidas

bcf

status, ram

clrf

dig1

clrf

dig2

clrf

dig3

clrf

dig4

movlw 00
movwf ptoa
empe

btfss ptoa, 4

call

subir

movlw 08h

;selecciona el banco de memoria bajo

;inicializa acumuladores

;envia ceros a los transistores para apagar


;todos los displays
;chequea el pulsador
;llama la rutina de incremento
;iniciar un 1 en el registro de rotacion

movwf rota
movlw dig1
movwf fsr
disp

movlw 00h

;con el registro selector (fsr) se apunta


;al primer dato que se va a mostrar
;colocar en cero el dato del display

movwf ptob

;para apagarlos

movf

;pasa rotacion del 1 a la variable work

rota, w

106

movwf ptoa

;enciende el transistor (display)

movf

;lee el dato del registro apuntado por fsr

call

indo, w
tabla

;genera el digito de 7 segmentos

movwf ptob

;envia el digito al puerto b

movlw 03h

;retardo de 3ms para visualizacion

call

retardo

btfsc rota, 0
goto
bcf
rrf
incf
goto

empe
status, c
rota
fsr
disp

;controla si terminaron las cuatro rotaciones


;si termino, vuelve desde el comienzo
;carry en cero para no afectar las rotaciones
;desplaza el 1 que enciende los displays
;incrementa el puntero. Apunta el proximo
;digito a mostrar

end

107

Você também pode gostar