Вы находитесь на странице: 1из 82

PIC DISCOVERY

MCU 8 BIT Development tool

RoHS
J14

J15 J10

J11

PIC DISCOVERY J6 J12

J13
J5 J7

+ J8

J9
electronics devices J1
+
J2

J3 J4

GUIA DIDÁCTICA DE
APRENDIZAJE
2
PREFACIO

El diseño de PIC DISCOVERY está basado en las


diversas experiencias en las aulas, teniendo en cuenta
que los que recién se inician, en esta fascinante
tecnología, cometen errores que podrían estropear la
electrónica y retrasar el aprendizaje. Cada sección que la
compone cumple una premisa didáctica o unidad de
aprendizaje alrededor de un núcleo de procesamiento
de 8 bit versátil y económico como lo es el PIC16F628A
de la firma MICROCHIP Inc. Una vez adquiridos los
conceptos y fundamentos sobre esta plataforma se
puede escalar a microcontroladores de gama media o
alta ya que se mantiene la filosofía de manejo de los
mismos. Con tres lenguajes diferentes de programación:
ASSEMBLER, GRÁFICO Y ANSI- C se logra abarcar todas
las posibilidades actuales y alcanzar a un mayor número
de personas de todas las edades, inclusive a niños y
adolescentes. Esta guía está diseñada de modo tal que
favorece tanto al autodidacta como al profesor que
imparte cursos o talleres y está organizada de manera
creciente en dificultad. Cada módulo parte desde la
explicación electrónica orientada hacia el software que
ejercerá control sobre ella. Algunos temas requerirán de
bibliografía externa a esta guía, ya que la finalidad es
complementar y auxiliar de forma amena a docentes y
estudiantes. Por último encontrará en el CD todos los
ejemplos con su código fuente y su compilación para
cargar y ejecutar. Esperamos sea de su agrado.

3
4
ELECTRÓNICA DE LA PLACA

Este dispositivo de desarrollo y entrenamiento


cuenta con toda la circuitería electrónica que permite
descubrir paso a paso la filosofía de manejo de los
microcontroladores y sus aplicaciones en las diversas
unidades de aprendizaje planteadas. La compone:

• 1 Núcleo de procesamiento PIC16F628A.


• 3 Display LED de 7 segmentos.
• 1 Display LCD de 16x2 c/control de contraste.
• 8 Led en línea.
• 1 Led RGB piraña.
• 1 Oscilador principal a cristal de 12 MHz.
• 1 Oscilador RC variable con TRIMMPOT CERMET.
• 1 Relé bobina de 12V simple inversor 220V/10 A.
• 1 Opto acoplador.
• 1 Beeper.
• 6 pulsadores TACSWITCH.
• 4 TRIMMPOT CERMET entradas analógicas.
• 1 interfaz de comunicaciónRS-232.
• 1 interfaz de comunicación RS-485 / RS-422.
• 1 Puerto PS-2 (teclados, mouse, código de
barras)
• 1 puerto USB 2.0 con núcleo PIC 18F14K50.
• 1 interfaz I2C.
• 1 Termómetro I2C con integrado MCP 9800.
• 15 JUMPER y 5 led de indicación.

5
• 1 Oscilador secundario a cristal de 32.768 KHz.
• 1 Regulador de 5V 7805
• 1 Jack DC de entrada de 12 V fuente conmutada

PLATAFORMA DE DESARROLLO

Es un programa que corre en una PC y permite


diseñar, emular y compilar el programa para que una
aplicación determinada funcione luego, en forma
autónoma, dentro del microcontrolador. Esta deberá
cargarse en la PC y Usted la encontrará en el CD que
acompaña a la placa, en “SOFTWARE TOOLS/
MPLAB_IDE_8-53/setup.exe” Se la conoce como
“entorno integrado de desarrollo” y corre bajo
WINDOWS XP, WINDOWS7 y WINDOWS8 para otro tipo
de sistema operativo hay una versión nueva denominada
MPLABX que si desea podrá descargar de la página oficial
de MICROCHIP, pero no es recomendable comenzar con
ella ya que requiere una serie de conocimientos previos
para manejarla correctamente. Estas plataformas están
orientadas al ASSEMBLER y Al Lenguaje C. Para
programar en este último es necesario instalar el
compilador adecuado para una familia determinada de
procesadores el C18, el C30 etc. Estos compiladores
requieren licencia pagada para destrabar todas las
capacidades que son bloqueadas en la versión gratuita
“Lite”. De todas formas el compilador de ASSEMBLER no
requiere licencia. Para poder programar en otros
lenguajes siempre es necesario agregar el compilador

6
adecuado CCS, HIGHTECH, C18, C24, DsPIC entre otros
para el lenguaje C. Para programar en forma gráfica
(diagrama de flujo) es necesario instalar la plataforma
adecuada NIPPLE, FLOWCode, etc.

PROGRAMADOR

El programa que Usted desarrolle o los


programas de ejemplos y ejercicios provistos deben
cargarse al microcontrolador de la placa PIC DISCOVERY
mediante un programador adecuado, a través del
conector de cinco pines identificado como ICSP (In Circuit
Serial Programmer). Este programador se puede
construir o adquirir, nosotros recomendamos PICKit 2 o
PICKit 3 ya que además es una potente herramienta
complementaria. No obstante es de utilidad cualquiera
que admita la programación ICSP. Una opción económica
es el denominado JDM diseñado para puerto RS-232, la
gran desventaja que presenta es que no sirve para
NETBOOK o LAPTOP ya que en ellas ya no se encuentra
disponible dicho tipo de puertos. Otra desventaja es que
la plataforma MPLAB no integra este tipo de
programador por lo que requiere que se instale un
software aparte. Usted encontrará en el CD uno de ellos
el WINPIC800 por si desea construir uno.

7
CONSTRUCCIONES CONGNITIVAS PREVIAS

Si bien esta guía será de utilidad para el aprendizaje


de las estrategias de diseño de aplicaciones con
microcontroladores, es necesario poseer ciertos
conocimientos previos. No obstante en cada lección se
realizará un repaso de los mismos, en la medida que sea
oportuno.

Es posible establecer un aprendizaje simultáneo de


todas las técnicas previas, partiendo como estrategia la
expectativa que genera comenzar a operar la
herramienta de entrenamiento, pero lo más adecuado y
razonable es dominar estos saberes con anterioridad. A
continuación una lista de ellos.

• Electrónica Básica.
• Algebra de BOOL.
• Técnicas Digitales.
• Operación de PC.
• Inglés técnico

RECOMENDACIONES GENERALES

Lea detenidamente y siga atentamente las


instrucciones y recomendaciones que se sugiere en cada
apartado, de esta guía, para facilitar el aprendizaje. El
orden y la disciplina son fundamentales para
comprender. No saltee pasos y tenga a mano lápiz y
papel. Revisar una y otra vez el procedimiento es un

8
buen método que reduce la tasa de fracasos y acelera el
aprendizaje.

No se quede con ninguna duda antes de avanzar


al siguiente escalón. Despójese de prejuicios mentales
que le impidan pensar con libertad. Jamás deseche una
idea por más absurda que sea, puede ser que allí
encuentre la solución. Comience siempre en el papel a
desarrollar la idea, es importante que piense en todos los
detalles antes de sentarse a escribir en la PC el programa,
por más simple que parezca. Antes de energizar la
herramienta verifique la posición de los Jumperes que
colocan a un determinado estado el núcleo del
procesador, un error en ellos hará que el programa no
funcione como se espera. No suponga valores de
magnitudes eléctricas como tensión, corriente,
resistencia, frecuencia, etc., mídala con el instrumento
adecuado para garantizar que sean las correspondientes
para la aplicación que está desarrollando.

LA ERA DEL MICROCONTROLADOR

A principios de los 90 y en la máxima expresión


del MICROPROCESADOR, la firma Norteamericana
MICROCHIP Inc. Desarrolla, patenta y lanza al mercado
una serie de integrados programables denominados PIC
(Programmable Integrated Circuit) y un entorno de
desarrollo denominado MPLAB V3.22 que corría bajo
entorno Windows 3.11 y accedía a un programador
denominado PICSTART. Una verdadera solución al

9
desarrollo de sistemas de control con microprocesadores
ya que hasta esa época resultaba bastante complicado y
tedioso además de voluminoso la implementación de
estos sistemas. Solo por recordar los más populares de la
época: MC 6800(MOTOROLA), Z80 (ZILOG), 8080 (INTEL),
6502 (ROCKWELL).

La gran idea de MICROCHIP Inc. radicaba en la


integración en una sola pastilla de las diversas partes que
formaban un sistema con microprocesadores, es decir: La
memoria ROM de programa, la memoria RAM de
usuario, el circuito oscilador, las puertas de entrada y
salida de datos y una memoria EEPROM tratada como si
fuese un periférico externo, el STACK o pila de retorno
para subrutinas fuera del área de memoria de datos, la
posibilidad de direccionamiento indirecto que permite
manejar tablas de datos y un juego de Instrucciones
reducidos (RISC) de tan solo 35 instrucciones. Todo ello
basado en la arquitectura HARDVARD donde memoria de
programa y memoria de datos son accedidos en buses
diferentes. La memoria de programa tiene un tamaño de
14 bits mientras que la de datos es de 8 bits. Este diseño
permite dos cuestiones fundamentales: Una es
almacenar en la memoria de programa tanto la
instrucción como el operando en una misma línea de
código (maximización del espacio de memoria). Y la otra
es ejecutar la instrucción mientras, al mismo tiempo, se
accede a decodificar la siguiente, con el consiguiente
aumento de la velocidad de ejecución.

10
En la actualidad existen microcontroladores con
la arquitectura mejorada para lenguaje C, núcleos de 32
bit, frecuencias de reloj de 200Mhz, procesamiento
digital de señales DSP, periféricos USB, CAN, TCP/IP y el
avance no se detiene.

REPASANDO CONCEPTOS

El vocablo inglés HARDWARE hace referencia a


los elementos físicos tangibles que componen un sistema
electrónico de cómputos (memorias, microprocesador,
componentes electrónicos, etc.).

El vocablo SOFTWARE define a todos aquellos


elementos de orden abstracto como lo es el pensamiento
humano plasmado en el programa de tareas que el
hardware debe ejecutar. El software que corre en el
interior del MCU se lo denomina también FIRMWARE
evocando el hecho de que es inalterable, aunque no es
tan así. Es actualmente muy común encontrar el término
EMBEDDED SOFTWARE que podría traducirse como
software incrustado, que refleja mucho mejor la idea.

Cuando se plantea una solución de control


electrónico con microcontroladores, se debe diseñar
ambos perfiles: El hardware (rama de la ingeniería
electrónica) y el Software (rama de la ingeniería
informática).

11
Sin lugar a dudas, corregir el Hardware es más
costoso que corregir el Software, pero cualquiera de ellos
debe tener en cuenta al otro. Ambos en conjunto
determinan la solución de una aplicación en particular.

A partir de ahora denominaremos en forma


abreviada a los microcontroladores como: “MCU’s”.

Estos son dispositivos electrónicos ejecutan


tareas programadas previamente de forma secuencial.
Para ello, en su interior, se encuentran una serie de
circuitos lógicos (compuertas electrónicas del tipo AND,
OR, NAND, NOR, XOR, XNOR y NOT), circuitos
basculantes (FLIP-FLOP, CONTADORES, REGISTROS DE
DEZPLAZAMIENTOS y otros) convenientemente
interconectados que conforman los diversos bloques
operativos del dispositivo. La forma en que se
interconectan, el tipo y la cantidad de ellos determinan lo
que se denomina ARQUITECTURA INTERNA.

Cada bloque cumple una tarea específica dentro


del MCU. Una de estas tareas es el cálculo aritmético
(SUMA, RESTA, DIVISION, MULTIPLICACION) otra es el
procesamiento lógico (álgebra de BOOLE). El bloque
encargado de ello se llama ALU, sigla que deriva del
idioma inglés cuya traducción es Unidad Aritmética
Lógica.

12
El bloque denominado DECODIFICADOR DE
INSTRUCCIONES tiene por finalidad interpretar las
instrucciones dadas en un programa.

La secuencia la realiza un contador digital


denominado PCL (Program Counter). Este contador cada
vez que arranca (RESET) comienza en cero, apuntando a
la primera posición de la memoria de programa. Avanza
de a una posición a la vez con cada ciclo de instrucción.
Un ciclo de instrucción se produce cada cuatro pulsos de
reloj principal, es decir que si colocamos un cristal de 4
MHz. como reloj principal, el microcontrolador ejecutará
un millón de instrucciones por segundo.

Para independizar el concepto de frecuencia de


ejecución de la frecuencia de reloj se ha creado una
unidad nueva para la primera. Esta unidad es el MIPS
(millones de instrucciones por segundo). Por lo que para
el ejemplo planteado se dice que corre a 1MIPS.

El avance de a una posición, del contador de


programa, puede ser alterado por algunas instrucciones
en particular como saltos condicionales, directos o
llamadas a subrutinas.

El fabricante de estos dispositivos da a conocer


todas las características eléctricas y de programación en
un manual técnico, allí figura también el SET de
INSTRUCCIONES que es capaz de ejecutar.

13
SISTEMAS DE NUMERACIÓN

El sistema de numeración posicional que


utilizamos a diario proviene de la inventiva de las
antiguas civilizaciones árabe e hindú. Los elementos que
representan cantidades son diez: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
De acuerdo a la posición que ocupen estos elementos
dentro del número construido, representará un valor
diferente. Cada posición se la conoce como cifra y recibe
un nombre. La primera posición, la menos significativa,
se denomina unidad y se coloca a la derecha, esto se
debe a que el sistema de escritura de dichas
civilizaciones es de derecha a izquierda, la segunda se
denomina decena, la tercera centena, etc. Un elemento,
por ejemplo el 7, que ocupe la segunda cifra
representará al valor 70 (setenta), si ocupase la tercera
700 (setecientos) y así sucesivamente. Por lo tanto cada
posición o cifra representa una potencia de base 10 (la
base representa la totalidad de los elementos que
dispone al sistema de numeración) y el exponente de
esta potencia es la posición que ocupa. El exponente de
la primera posición es 0 (cero), el de la segunda 1 (uno).
Entonces un número se puede representar como un
polinomio (sucesión de sumas y restas de potencias
enteras de una o de varias variables indeterminadas),
de la siguiente manera:

         

Donde:

14
Las variables a, b, c son los elementos numéricos, la base
de la potencia es diez (decimal) y el exponente de dichas
bases la posición que ocupa un elemento en particular.

Recordemos que una potencia es el


procedimiento matemático que consiste en multiplicar
por sí misma la base tantas veces Como indique el
exponente, si este último es cero el resultado es uno, si
es uno el resultado es la base.








  


Entonces el número en base decimal 653, por


ejemplo, podría escribirse en forma polinómica de la
siguiente manera:

 10    10    10


 100    10    1


600  50  3




En las escuelas primarias las maestras nos hacían


ejercitar por repetición el proceso de descomposición de
números en unidades, decenas y centenas. Es hora de

15
que sepa el porqué y la utilidad de tales ejercicios. Para el
ejemplo anterior podríamos decir que está compuesto
por 6 (seis) centenas, 5 (cinco) decenas y 3 (tres)
unidades.

¿Qué tal si ahora cambiamos la cantidad de


elementos que compone nuestro sistema de
numeración? En primer lugar al cambiar la cantidad de
elementos que compone nuestro sistema de numeración
indefectiblemente cambiará la base de la potencia que
representa a un valor en una posición determinada, pero
no la forma de operar matemáticamente con ellos, ni su
orden posicional. Un número escrito en una base de
numeración determinada tiene un único representante
en otra base cualquiera y viceversa. Es por ello que
existen muchos sistemas de numeración y se puede
operar con ellos aplicando los mismos procesos que se
nos enseñó en aquellos primeros años de nuestra
educación.

NUMERACION OCTAL

El sistema de numeración octal está compuesto


por ocho elementos, de allí su denominación, estos son:
0, 1, 2, 3, 4, 5, 6 y 7. La representación polinómica de
esta base es la siguiente:

         

Observe que ahora la base cambió de 10 a 8.

16
El número escrito en base octal, 172 por ejemplo, tiene
su equivalente en decimal y se obtiene aplicando la
resolución del polinomio que lo representa.

  8    8    8


  64    8    1


64  56  2


 (En decimal)

NUMERACION HEXADECIMAL

El sistema de numeración hexadecimal está


compuesto por 16 (diez y seis) elementos, de allí su
denominación, estos son: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B,
C, D, E y F. Observe que al terminarse los elementos
numéricos conocidos se incluyen letras que representan
un valor decimal correlativo como si se tratase de nuevos
números. A=10, B=11, C=12, D=13, E=14 y F=15. La
representación polinómica de esta base es la siguiente:

            

Observe que ahora la base cambió a 16.

El número escrito en base hexadecimal, 1BC por ejemplo,


tiene su equivalente en decimal y se obtiene aplicando la

17
resolución del polinomio que lo representa, igual que en
los casos anteriormente descriptos.

  16    16    16


  256    16  1  1


256  176  12


 (En decimal)

Observe que las letras se reemplazaron por su


equivalente decimal.

NUMERACION BINARIA

El sistema de numeración binario está


compuesto por 2 (dos) elementos, de allí su
denominación, estos son: 0 y 1. La representación
polinómica de esta base es la siguiente:

         

Observe que ahora la base cambió a 2.

El número escrito en binario, 101 por ejemplo, tiene su


equivalente en decimal y se obtiene aplicando la
resolución del polinomio que lo representa, de la misma
forma descripta para las bases antecesoras.

  2    2    2


4 2 1

18

4 0 1


 (En decimal)

La importancia de esta base de numeración radica en el


hecho que representa dos estados posibles: el 0 (cero) y
el 1 (uno) y se los puede interpretar como la ausencia o
presencia de tensión, apagado o encendido, blanco o
negro, etc.

Los microcontroladores trabajan con estos estados


lógicos y con ellos se puede operar utilizando las
matemáticas o la lógica aplicable a las compuertas
digitales.

Pero, ¿Como saber cuando un número está escrito en


una u otra base? Sencillo, es la forma como se lo escribe
en el editor. Un número decimal se introduce
anteponiendo un punto al número en cuestión

.653

En binario

B’10011101’

En Hexadecimal

H’1F3A’ o 0x1F3A

La numeración octal se encuentran en desuso en la


actualidad.

19
LA LÓGICA, BREVE RESEÑA HISTORICA

Los tratados de lógica de Aristóteles, 384 aC –


332 aC, conocidos como Órganon, contienen el primer
tratado sistemático de las leyes de pensamiento para la
adquisición de conocimiento. Representa el primer
intento serio que funda la lógica como ciencia.
Aristóteles, no hace de la lógica una disciplina metafísica,
sino que establece correspondencias recíprocas entre
pensamiento lógico y estructura ontológica.

El silogismo fue adoptado por los escolásticos


que representan el sistema teológico-filosófico,
característico de la Edad Media. La escolástica, sin
embargo, acabó por sobrecargar la teoría del silogismo,
lo que acarreó su descrédito a partir del Renacimiento.

Los lógicos de la edad moderna como Ramée,


Arnauld, Nicole, Leibniz, Euler, y Lambert procuraron
simplificarla al máximo, y su tratamiento matemático se
completó hasta principios del siglo XX con Boole, De
Morgan, Frege y Russell.

A partir de estas teorías y su tratamiento


matemático se desarrolla la técnica digital y el uso de
compuertas para emular la forma de pensamiento
humano y la toma de decisiones.

20
COMPUERTAS ELECTRÓNICAS DIGITALES

Las compuertas electrónicas digitales son operadores


lógicos derivados del álgebra de Boole. Conceptualmente
es una función matemática aplicable a variables que
pueden representar dos estados posibles verdadero o
falso. En una función existen dos tipos de variables, la
variable independiente y la dependiente. Sus nombres
hacen referencia a la forma en que adquieren su valor. La
independiente toma cualquier valor posible y son las de
entrada de una función. El valor de la variable
dependiente es el resultado de aplicar el proceso a las
variables independientes, por lo que dicho valor estará
vinculado al valor que tomen ellas y el proceso que se le
aplique (variable de salida). En el siguiente diagrama se
representa lo dicho. Las variables a y b de entradas son
las variables independientes, mientras que la variable de
salida R, es la dependiente.

variable a
PROCESO
variable R
variable b

Fig.1-Esquema de función y variables.

Para ordenar todas las posibles combinaciones es


necesario realizar una tabla llamada “Tabla Verdad”, la

21
cantidad de combinaciones es representada por una
potencia en base dos cuyo exponente es la cantidad de
variables de entrada del sistema.

  !" " #$


Si nuestro sistema tiene 3 (tres) variables de
entrada la cantidad de combinaciones posibles es




c b a R
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
Tabla 1-Combinaciones posibles de tres variables.

Los operadores lógicos o compuertas son ocho:


YES, NOT, AND, OR, NAND, NOR, OR y XOR

Para entender cómo funciona una compuerta


utilizaremos un circuito formado por dos llaves, que
representaran las variables de entrada A y B, un diodo
LED con su resistencia limitadora de 820Ω, como variable
de salida Q y una fuente de alimentación continua,
batería de 9V.

22
Convengamos que una llave abierta representa
un “cero lógico” y cerrada un “uno lógico”. El led
apagado equivale a cero y encendido a uno.

Construyamos, entonces, nuestro primer circuito.

COMPUERTA AND

Fig.2-Circuito de compuerta AND.

La conexión de llaves en serie representa la


lógica de la compuerta AND. En castellano la palabra
inglesa AND significa “Y”. En esta configuración el led
encenderá solo cuando ambas llaves estén cerradas. Se
podría interpretar, en forma lógica proposicional, de la
siguiente forma: “El resultado es verdadero solamente si
ambas proposiciones son verdaderas”. Esta función es
conocida como “conectiva lógica de conjunción”. Para
representar todas las posibilidades en que se pueden

23
combinar el estado de las variables de entrada A y B, se
construye una tabla verdad.

A B Q
0 0 0
0 1 0
1 0 0
1 1 1
Tabla 2-Tabla de respuesta de la compuerta AND.

Observe que en cada fila el resultado obtenido es


una multiplicación entre las variables A y B. Por lo que a
esta función se la denomina también “multiplicador
lógico”.

El símbolo de esta compuerta AND es:

Ahora configuremos las llaves de otra manera


para obtener el siguiente circuito.

COMPUERTA OR

24
Fig.3-Circuito de compuerta OR.

La conexión de llaves en paralelo representa la


lógica de la compuerta OR inclusiva. En castellano la
palabra inglesa OR significa “o”. En esta configuración el
led encenderá cuando cualquier llave esté cerrada. Se
podría interpretar, en forma lógica proposicional, de la
siguiente forma: “El resultado es verdadero si cualquier
proposición es verdadera”. Esta función es conocida
como “conectiva lógica de disyunción”. Para representar
todas las posibilidades en que se pueden combinar el
estado de las variables de entrada A y B, se construye
una tabla verdad.

A B Q
0 0 0
0 1 1
1 0 1
1 1 1
Tabla 3-Tabla de respuesta de la compuerta OR.

25
Observe que en cada fila el resultado obtenido es
una suma entre las variables A y B. Por lo que a esta
función se la denomina también “sumador lógico”.

El símbolo de esta compuerta OR es:

NOT (NEGADOR o INVERSOR)

Un negador es la denominada función


complemento y responde a la inversión del valor de la
entrada, se lo suele representar con un círculo adosado a
una entrada o salida de una compuerta en particular.
Cuando está solo su símbolo es el siguiente

La tabla verdad correspondiente a esta función es

26
A Q
0 1
1 0
Tabla 4-Tabla de respuesta de la función NOT.

Es factible representarlo con circuito eléctrico


sencillo equivalente

Fig.4-Circuito inversor NOT.

Observe que la llave cortocircuita al led, y la


resistencia continúa limitando la corriente.

YES (BUFFER o AMPLIFICADOR)

La función YES, no altera el estado lógico de la entrada


por lo que su importancia está vinculada al proceso de
amplificación en tensión o corriente de las variables de
entrada. También sirve como adaptador de niveles
lógicos de diferentes familias C-MOS, TTL, Adaptador de
Impedancia, etc.

27
Fig.5-Circuito función YES.

A Q
0 0
1 1
Tabla 5-Tabla de respuesta de la función YES.

COMPUERTA NAND

Si agregamos un negador a la salida de una


compuerta AND obtenemos una nueva función, inversa a
ella, denominada NAND.

28
El circuito eléctrico que representa a este nuevo
operador lógico está conformado de la siguiente forma:

Fig.6-Circuito de compuerta NAND.

A B Q
0 0 1
0 1 1
1 0 1
1 1 0
Tabla 6-Tabla de respuesta de la compuerta NAND.

Y su símbolo es el de una AND con un círculo inversor en


su salida

29
COMPUERTA NOR

Es la función inversa de una OR inclusiva, es decir que es


una OR negada en su salida.

Fig.7-Circuito de compuerta NOR.

A B Q
0 0 1
0 1 0
1 0 0
1 1 0
Tabla 7-Tabla de respuesta de la compuerta NOR.

30
COMPUERTA XOR (OR Exclusiva)

La diferencia esencial entre una compuerta OR inclusiva y


una OR exclusiva radica en que la primera toma como
verdadero el hecho que se produzca ambas
proposiciones, mientras que la exclusiva las descarta.
Veamos un ejemplo concreto en forma proposicional
para ambos casos y nos daremos cuenta de su diferencia.

Una OR inclusiva admite como verdadero que “Se puede


estudiar Inglés o Alemán o ambos”, pero para la
siguiente proposición lógica es imposible que suceda
simultáneamente que “Pueda abordar un autobús o un
avión o ambos” por lo que hay que excluir la posibilidad
que se produzcan ambas proposiciones simultaneas
como resultado verdadero. Compare la tabla verdad de
la OR con la de la XOR y observará en la última fila lo
expuesto.

A B Q
0 0 0
0 1 1
1 0 1
1 1 0
Tabla 8-Tabla de respuesta de la compuerta XOR.

Para representar el circuito eléctrico correspondiente es


necesario reemplazar las llaves simples por
conmutadores de una vía.

31
Fig.8-Circuito de compuerta XOR.

COMPUERTA XNOR (NOR Exclusiva)

Nuevamente, si negamos los resultados de una


compuerta XOR obtendremos una nueva denominada
XNOR. Para este caso, hay que modificar el circuito de
conmutadores de la siguiente manera:

32
Fig.9-Circuito de compuerta XNOR.

A B Q
0 0 1
0 1 0
1 0 0
1 1 1
Tabla 9-Tabla de respuesta de la compuerta XNOR.

EL BIT, EL BYTE y EL NIBBLE

33
El vocablo inglés BIT es el acrónimo de “Basic
Information uniT” o “Binary digIT” y hace referencia a la
unidad de información mínima que forma un sistema
digital. Se lo representa como una casilla donde puede
contener un “1” o un “0”. También es una cifra o dígito
binario. Una variable binaria es un BIT.

Si agrupamos 4 dígitos binarios formamos lo que


se denomina NIBBLE. Un NIBBLE puede representar 16
valores o combinaciones diferentes.




Dos NIBBLES agrupados forman un BYTE, es decir


que un BYTE posee 8 (ocho) BITS y con ellos se forman
256 combinaciones.




Cada BIT se numera dentro del BYTE con un


número que comienza en cero de derecha a izquierda.
Siendo el primero de la derecha el LSB o menos
significativo del BYTE y el último, el que se encuentra más
hacia la derecha; el MSB o más significativo.

B7 B6 B5 B4 B3 B2 B1 B0
1 0 1 1 0 1 0 1
MSB LSB

34
El peso binario de cada bit es determinado por su
posición. Observe en la tabla siguiente que el peso
binario en decimal de cada BIT es el resultado de la
potencia de base 2 elevado por el exponente de la
posición y que el valor decimal de ese peso es siempre el
doble del anterior o la mitad del posterior.

2% 2& 2' 2( 2) 2 2 2
128 64 32 16 8 4 2 1
B7 B6 B5 B4 B3 B2 B1 B0
1 0 1 1 0 1 0 1

CONVERSIÓN BINARIO A DECIMAL

El objetivo de construir esta tabla es poder


realizar conversiones en forma práctica entre una u otra
base numérica. Si por ejemplo sumamos el peso binario
de cada BIT que contenga un 1 obtenemos el equivalente
decimal del BYTE. Volvamos a la tabla anterior y
ejecutemos la conversión de BINARIO a DECIMAL de este
BYTE. Comencemos por BIT 0 (B0), este se encuentra en
1 por lo que suma su peso, es decir 1. El BIT 1(B1) está en
0 entonces no suma. B2 está en 1 por lo tanto suma 4.
B3 está en 0, no suma. B4 suma 16 por estar en 1. B5
suma 32. B6 no suma y B7 que también está en 1 suma
128.

1+4+16+32+128=181

35
Es decir que la combinación binaria 10110101
equivale a 181 en decimal.

CONVERSIÓN DECIMAL A BINARIO

Para realizar la conversión de decimal a binario el


método consiste en elegir la casilla cuyo valor se
aproxime lo más cerca posible al número que deseamos
convertir sin que sea superado. Esa casilla entonces la
colocamos a 1 y restamos el peso al número a convertir.
Repetimos el proceso con el resultado obtenido hasta
que este sea cero. Las casillas no utilizadas contendrán
cero.

EJEMPLO: Convertir el número 193 decimal a binario

128 64 32 16 8 4 2 1
B7 B6 B5 B4 B3 B2 B1 B0
1
193-128=65

128 64 32 16 8 4 2 1
B7 B6 B5 B4 B3 B2 B1 B0
1 1
65-64=1

128 64 32 16 8 4 2 1
B7 B6 B5 B4 B3 B2 B1 B0
1 1 1
1-1=0 Fin de la conversión

36
128 64 32 16 8 4 2 1
B7 B6 B5 B4 B3 B2 B1 B0
1 1 0 0 0 0 0 1
Y completamos las casillas no utilizadas con cero.
Decimos entonces que el decimal 193 es el binario
11000001.

CONVERSIÓN BINARIO a HEXADECIMAL

La base numérica hexadecimal fue creada para


representar números binarios con la menor cantidad de
dígitos posibles y dar claridad a los datos. Esto se logra
porque la numeración hexadecimal posee 16 elementos
numéricos representados en un solo dígito. Por lo que
con un solo dígito hexadecimal se representan 16
números distintos. No es casual que la base sea múltiplo
de 2 y que 2(
16. Es decir que con 4 BITS o 1 NIBBLE se
crea un dígito hexadecimal. Por lo tanto en un BYTE
existen 2 dígitos Hexadecimales. Llamamos LSN y MSN al
NIBBLE de menor y mayor peso respectivamente.
También se lo denomina como NIBBLE ALTO o NIBBLE
BAJO. La sección griseada de la tabla siguiente nos indica
el NIBBLE de menor peso.

8 4 2 1 8 4 2 1
B7 B6 B5 B4 B3 B2 B1 B0
1 1 0 0 0 0 0 1
Observe también que el peso otorgado a los BIT
B4 a B7 son los mismos que los de B0 a B3, esto sucede

37
porque se considera a cada NIBBLE en forma
independiente al BYTE completo y cada uno de ellos es
un dígito distinto hexadecimal.

El método de conversión de cada NIBBLE es igual


a las conversiones anteriormente descritas. Continuando
con el ejemplo el número decimal 193 es el 11000001
pasémoslo a hexadecimal

8 4 2 1 8 4 2 1
B7 B6 B5 B4 B3 B2 B1 B0
1 1 0 0 0 0 0 1
Comenzamos por el NIBBLE de menor peso,
representado por los BITS B0 a B3 (sector griseado de la
tabla). Para este ejemplo la única casilla que suma es la
que equivale a peso 1, por contener un 1 en su interior
(B0), mientras que B1, B2 y B3 están en cero por lo que
no suman valor alguno. Ya tenemos el primer dígito
hexadecimal y vale 1.

Para el segundo NIBBLE compuesto por los BITS


B4 a B7 (fondo blanco en la tabla) no suman B4 y B5,
mientras que B6 suma 4 y B7 suma 8 quedando el total
para este NIBBLE en 12 en numeración decimal. 12
equivale a la letra C en hexadecimal, siendo esta el valor
del segundo dígito.

193 = 11000001 = C1

38
CONVERSIÓN HEXADECIMAL a BINARIO

Un número hexadecimal se convierte a binario


separando sus dígitos y asignando 4 BITS a cada uno de
ellos. Aquí le dejamos que Usted analice y deduzca el
método de conversión.

Ejemplos:

1. Convertir a binario el hexadecimal E7

E 7
8 4 2 1 8 4 2 1
B7 B6 B5 B4 B3 B2 B1 B0
1 1 1 0 0 1 1 1

2. Convertir a binario el hexadecimal 8D

8 D
8 4 2 1 8 4 2 1
B7 B6 B5 B4 B3 B2 B1 B0
1 0 0 0 1 1 0 1

3. Convertir a binario el hexadecimal 9A

9 A
8 4 2 1 8 4 2 1
B7 B6 B5 B4 B3 B2 B1 B0
1 0 0 1 1 0 1 0

39
CODIFICADO DE INFORMACION

Existen diversos métodos para codificar


información utilizando conjuntos de BITS como el código
de GRAY, AIKEN, Exceso 3, BCD, ASCII, etc. No solo se
utiliza en términos matemáticos o numéricos. Los
colores, el audio, la temperatura, las letras son factibles
de ser representadas por un código.

Es de interés que Usted conozca alguno de ellos,


cada uno surge para resolver alguna situación específica.
El código BCD surge de la necesidad de realizar
conversiones binarias a decimales, para ser
representadas por un dígito decimal en un Display de 7
segmentos.

Existen integrados contadores BCD,


decodificadores BCD a 7 segmentos que podrá explorar
en las hojas de datos correspondientes, por ejemplo, en
la familia TTL LS el 74LS168 es un contador por décadas
BCD, el 74LS48 es un decodificador BCD a 7 segmentos.
Con ellos se realizaban instrumentos de medición como
frecuencímetros, contadores, odómetros, velocímetros
etc.

Solo analizaremos dos tipos de codificación: El


código BCD y el código ASCII.

40
CÓDIGO BCD

Este código utiliza 4 BITS para codificar diez


números decimales, aunque como ya hemos visto es
posible representar 16, no obstante las últimas
combinaciones de unos y ceros son consideradas
“ilegales”. Veamos la tabla que lo representa:

Nº B3 B2 B1 B0
0 0 0 0 0
1 0 0 0 1
2 0 0 1 0
3 0 0 1 1
4 0 1 0 0
5 0 1 0 1
6 0 1 1 0
7 0 1 1 1
8 1 0 0 0
9 1 0 0 1

Cada bit es un cable que lleva o no tensión


representando un 1 o un 0 respectivamente.

CÓDIGO ASCII

El código ASCII (AMERICAN STANDART CODE FOR


INTERCHANGE OF INFORMATION) se creó para
estandarizar las comunicaciones entre computadoras y
asignó un valor de 8 BITS a cada carácter, los primeros
del 0 a 31 son utilizados como comandos o códigos de

41
control para impresoras, módems, teletipos, etc. del 32
al 126 son espacio, letras mayúsculas, letras minúsculas,
números, signos de puntuación, etc. El 127 corresponde
a DELETE. Del 128 hasta el 255 son considerados
caracteres especiales para otros idiomas y gráficos. El
estándar solo contempla hasta el 127, aunque el 164 “ñ”
o 165 “Ñ” son internacionalmente aceptados en esa
posición decimal.

Por ejemplo si se presiona la tecla “R” de un


teclado de computadora este le envía, en formato
binario, a la CPU el valor decimal 82. Realice la siguiente
prueba: En su computadora abra un editor de textos o
block de notas y estando dentro del mismo, presione la
tecla ALT y sin soltarla pulse 8 seguido de 2, ahora suelte
ALT y vea que se produce.

¡Efectivamente aparece escrita la letra R!

La transmisión de ese dato se ha realizado de una


forma particular denominada Transmisión SERIAL
mediante un protocolo de comunicaciones denominado
PS-2. A su debido tiempo hablaremos de ello, ya que la
placa PIC DISCOVERY posee una entrada para leer
teclados.

42
SET DE CARACTERES ASCII EN HEXADECIMAL

Digito HEX ALTO


HEX 0 1 2 3 4 5 6 7
0 NUL DLE 0 @ P ` p
1 SOH DC1 ! 1 A Q a q
2 STX DC2 “ 2 B R b r
3 ETX DC3 # 3 C S c s
4 EOT DC4 $ 4 D T d t
5 ENQ NAK % 5 E U e u
Digito HEX BAJO

6 ACK SYN & 6 F V f v


7 BELL ETB ‘ 7 G W g w
8 BS CAN ( 8 H X h x
9 HT EM ) 9 I Y i y
A LF SUB * : J Z j z
B VT ESC + ; K [ k {
C FF FS , < L \ l |
D CR GS - = M ] m }
E SO RS . > N ^ n ~
F SI US / ? O _ o DEL

Para saber qué valor hexadecimal tiene un


carácter en particular se procede así:

Localice el carácter en la tabla, por ejemplo la letra “M” y


anote el valor que aparece a la cabeza de la columna,
para este caso el 4, este es el dígito hexadecimal alto.
Ahora vea el valor sobre el inicio de la fila, este es D.
Entonces la letra M equivale al código hexadecimal 4D.

43
Veamos algunos caracteres o especiales o
códigos de control.

Cada vez que se pulsa la tecla ENTER, en el


teclado, este le envía el código hexadecimal 0D (13 en
decimal) este corresponde a CR (CARRIAGE RETURN) o
retorno de carro. Un avance de línea LF (LINE FEED) es el
código hexadecimal 0A (10 en decimal) y hace que una
impresora avance el papel una línea. Para avanzar una
hoja completa y posicionar los formularios continuos en
una impresora se utiliza el comando FF (FORM FEED). ¡No
confundir el nombre del comando con un número
hexadecimal! El código para este comando es el
hexadecimal 0C (12 en decimal).

44
MICROCONTROLADOR PIC 16F628A
El núcleo de la placa de entrenamiento PIC
DISCOVERY es un microcontrolador PIC 16F628A. Muy
versátil y económico para realizar aplicaciones robustas.
En esta sección describiremos brevemente sus
capacidades. Le recomendamos leer la hoja de datos del
fabricante. Allí encontrará detalles importantes, en el CD
encontrará una copia de ella.

PINOUT

El microcontrolador presenta dos puertos de


entrada/salida, agrupados, por donde se puede ingresar
o sacar información de él. El PORT A pines RA0 a RA7 y el
PORT B pines RB0 a RB7. Si bien están agrupados cada
PIN puede programarse individualmente para que se
comporte como entrada o salida.

45
La alimentación debe ser de 5 VDC. Regulada. El
negativo o chasis se debe conectar al PIN VSS (5),
mientras que el positivo al PIN VDD (14). El regulador
puede ser un 7805 o un 78L05 dependiendo de la
corriente total que deba administrar.

Los PINES, en su mayoría, poseen múltiples


funciones, salvo los de alimentación (5 y 14) y el RB5
(11). Por otra parte observe que las flechas indican que
los datos pueden ser de entrada o salida, salvo los de
alimentación que obviamente son solo entradas y uno
muy particular el RA5/MCLR/VPP (4) que solo es de
entrada. Cuando se configuran los pines como salidas se
comportan como salidas CMOS, es decir que tienen
transistores MOS FET complementarios uno tipo canal N
y otro P por lo que es posible manejar corriente desde
arriba o desde abajo respecto de la fuente de
alimentación, salvo RA4 (3) que es OPEN DRAIN. A este
último se conecta la carga solo hacia positivo de la fuente
de alimentación. Para todos los casos esta corriente es
de 25mA., suficiente para accionar un LED estándar.

Cuando se los programa como entrada, el PORT A


se comporta como ST (SMITH TRIGGER) mientras que el
PORTB lo hace como TTL, salvo que se utilice sus
funciones alternativas, en cuyo caso son entradas del
tipo ST. Para ahorrar componentes externos, sobre el
PORTB exclusivamente, se puede configurar resistencias
internas de PULL UP de un valor del orden de los 100KΩ.

46
Estas resistencias existirán en cada pin que además haya
sido configurado como entrada.

Fig.10-Posibilidades de conexiones utilizadas como salidas.

Fig.11-Posibilidades de conexiones utilizadas como entradas.

47
La figura 10 nos muestra como se acciona un led
sacando un “1” sobre RB1 o sacando un “0” sobre RB2,
mientras que como RB4 es OPEN DRAIN podremos
encender el led sacando solo un “0”.

La figura 11 muestra cómo se pueden conectar


pulsadores. Sobre RB1, aprovechando los resistores PULL
UP internos. En RA0 el resistor de PULL UP se debe
colocar externamente. En estos dos casos cuando se
pulse la tecla introducirá un “0”, siendo el “1” el estado
de reposo natural de la tecla. En cambio, sobre RA4 el
resistor externo es PULL DOWN y en este caso el reposo
es “0” y cuando se pulsa es “1”. Observe que los valores
de los resistores externos son de 1KΩ, un valor muy bajo
si los comparamos con los 100KΩ internos, ello es así
para evitar que las posibles perturbaciones
electromagnéticas externas causen un falso disparo
sobre la entrada.

CARACTERÍSTICAS DE LA CPU INTERNA

• Velocidad de operación desde DC hasta 20 MHZ.


• Capacidad de Interrupciones.
• 8 posiciones de STACK por HARDWARE.
• Modos de direccionamiento directo, indirecto y
relativo.
• 35 palabras sencillas de instrucción de un ciclo
excepto saltos que toma dos ciclos.

48
CARACTERÍSTICAS ESPECIALES DEL MCU

• Opciones de Oscilador interno y externo.


-Interno de 4 MHz. calibrado en fábrica ± 1 %.
-Interno de 48 KHz. Bajo consumo.
-Externos soporta cristales y resonadores.
• Modo SLEEP para ahorro de energía.
• Débiles resistencias de PULL UP programables
sobre el PORTB.
• PIN de entrada multiplexado de RESET maestro.
• Temporizador “PERRITO GUARDIAN” con
oscilador independiente.
• Programación SERIAL en circuito con 2 pines
ICSP.
• Programación en baja tensión.
• Código de protección programable.
• Relanzamiento por apagón (BROWN-OUT).
• Relanzamiento por energizado (POWER-ON).
• Temporizador de arranque para esperar
estabilización de tensión y oscilador.
• Amplio rango de tensión de alimentación de 2 a
5.5 Voltios.
• Rango extendido de temperatura tipo industrial.
• Alta durabilidad de la memoria FLASH y EEPROM.
-100.000 ciclos de escritura de memoria FLASH.
-1.000.000 ciclos de escritura de EEPROM.
-40 años de retención de datos.

49
CARACTERÍSTICAS DE PERIFÉRICOS

• 16 pines de entrada-salida con control individual


de dirección.
• Alta corriente para manejo directo de LED’S
• Módulo de comparador analógico con:
-2 comparadores analógicos.
-Módulo de tensión de referencia programable
dentro del integrado (VREF).
-Referencia interna o externa seleccionable.
-Salidas de comparadores accesibles desde
afuera.
• TIMER0: Temporizador/Contador de 8 BITS con
pre escalador de 8 BITS programable.
• TIMER1: Temporizador/Contador de 16 BITS con
capacidad de manejo de reloj a cristal externo.
• TIMER2: Temporizador/Contador de 8 BITS
periódico con post y pre escalador.
• Módulo de captura, comparación y de
modulación por ancho de pulso (PWM):
-16 BITS de captura y comparación.
-10 BITS de PWM.
• Módulo direccionable Receptor/Transmisor Serie
Asincrónico/Sincrónico Universal (USART/SCI).

50
ARQUITECTURA INTERNA

En este diagrama se observan los diferentes bloques que


componen al circuito integrado. Observe los diferentes
anchos de buses internos para interconectar los bloques
entre sí, 14 para programas y 8 para datos típica de la
arquitectura HARDVARD.

51
MEMORIAS

Existen tres tipos de memoria interna diferentes


entre sí: La memoria flash de programa, La memoria
RAM de usuario o registros de usuario y la EEPROM de
datos.

MEMORIA FLASH DE PROGRAMA

Tiene una capacidad de 2048 posiciones, y un


ancho de 14 BITS. En ella se almacena el programa que
Usted deberá escribir. Es decir que puede almacenar
hasta 2048 instrucciones y este es el largo máximo que
podrán tener los programas, más que suficiente para
cualquier tipo de aplicación. La dirección comienza en la
posición hexadecimal 0x0000 y finaliza en 0x07FF. Es
accedida por el CONTADOR DE PROGRAMA en forma
secuencial comenzando en la primera posición desde que
se energiza el MCU y salvo que alguna instrucción del
programa decida lo contrario, este avanzará de una
posición con cada avance de cuatro ciclos del Oscilador
principal (ciclo de máquina o ciclo de instrucción).

Cada instrucción está definida por cuatro


parámetros: Posición dentro del programa, Tipo de
Instrucción (OP-CODE), Operando (un literal o W) y
Alojamiento de resultado de la operación (W ó F). La
posición es la dirección de la memoria de programa
donde se aloja la instrucción. El tipo de instrucción es una
de las 35 posibles creadas por el fabricante y que

52
veremos en detalle posteriormente, esta ocupa 6 de los
14 BITS de una posición. El destino del resultado tiene
dos posibilidades o el registro de trabajo W o un registro
de RAM, ambos son de un ancho de 8 BITS, por lo que
con un solo bit es posible decidir donde depositaremos el
resultado. Los 7 BITS restantes son la posición que ocupa
un registro de memoria RAM.

Por ejemplo:

Supongamos que una instrucción como addwf


0x20, W (sumar el contenido del registro de trabajo W al
contenido del registro de memoria RAM de la posición
0x20 guardando el resultado en el registro W) ocupa la
posición 0x01FF dentro de la memoria de programa. Los
14 bits de dicha posición contendrán el siguiente valor
binario:

M 0x01FF L
13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 1 1 1 0 0 1 0 0 0 0 0
addwf W 0x20

Esto es simplemente para que observe como


interpreta una instrucción el MCU que solo “entiende”
de unos y ceros. No se asuste la programación es mucho
más sencilla ya que se realiza con palabras simples de
“comprender” por humanos y un “traductor” hace el
trabajo engorroso por nosotros. Este se denomina
“COMPILADOR”.

53
MEMORIA RAM (REGISTROS GENERALES)

Veamos, antes de avanzar, una interpretación


didáctica de lo que son las memorias. Podríamos decir
que la memoria de programa es un libro donde está
escrito todo lo que la CPU debe realizar, el libro con “la
receta” que deberemos escribir “PROGRAMAR”. Como
todo libro no se puede alterar su contenido. Pero para
poder ejecutar las tareas de la receta es necesario tener
un “cuaderno auxiliar” que pueda ser escrito y borrado
cuantas veces sea necesario para realizar allí los cálculos
auxiliares, recordar valores o letras, variables, etc. que
serán útiles al proceso. Esta es precisamente la función
de la memoria RAM, en adelante la nombraremos
REGISTROS.

Estos registros, a diferencia de la memoria de


programa, pierden los valores almacenados cuando se
apaga la CPU. Están organizados con un ancho de 8 BITS
y sectorizados en 4 bancos, que se seleccionan con un
par de bits (RP0 y RP1) dentro de un registro especial
denominado STATUS. El banco 0 es el de uso normal y
cuando el MCU es alimentado arranca siempre con este
banco a disposición. No todos los bancos utilizan todas
sus casillas, algunas no están disponibles (ver página 16
de la hoja de datos). Las primeras 31 posiciones de cada
banco son “REGISTROS ESPECIALES” (SFR’S) donde se
selecciona como queremos que funcione el MCU, para
adaptarlo a la aplicación que estamos diseñando, como

54
cuales pines serán entradas, cuales salidas o si vamos a
utilizar o no los comparadores analógicos, administrar
interrupciones, temporizadores, etc. por lo que no
pueden ser utilizados para almacenar otro tipo de
información ya que alteraría la forma en que se
desempeña el MCU.

Las posiciones de direccionamiento de todos los


registros de cada banco y el valor de los bits RP0 y RP1
del registro especial STATUS para la selección de ellos:

Dirección Dirección
Banco RP1 RP0
INICIAL FINAL
BANK 0 0 0 0x00 0x7F
BANK 1 0 1 0x80 0xFF
BANK 2 1 0 0x100 0x17F
BANK 3 1 1 0x180 0x1FF

Los REGISTROS DE PROPOSITO GENERAL (GPR’S)


disponibles para el usuario en cada banco son:

Cantidad Dirección Dirección


Banco
BYTES INICIAL FINAL
80 0x20 0x6F
BANK 0
16 0x70 0x7F
80 0xA0 0xEF
BANK 1
*16 0xF0 0xFF
48 0x120 0x14F
BANK 2
*16 0x170 0x17F
BANK 3 *16 0x1F0 0x1FF

55
Tenemos a disposición para armar variables un
total de 224 BYTES, es decir los 96 BYTES del BANK 0, los
80 BYTES del BANK 1 y los 48 del BANK 2. Observe la
tabla y advierta que los bancos 1,2 y 3 tienen 16 BYTES
cada uno con un asterisco y griseados, se trata de la
repetición de los últimos 16 BYTES del banco 0 en los
otros bancos por lo que no son otros distintos de estos.

Esta filosofía de replicar algunos registros en


otros bancos, nos permite acceder a ellos sin importar en
que banco estemos posicionados.

REGISTRO DE TRABAJO W

Es un registro que funciona como portador de


datos desde y hacia todos los circuitos internos del MCU,
solo se tiene acceso a él mediante las instrucciones por lo
que no lo encontrará dentro de los bancos de registros.
Se lo puede escribir y leer.

REGISTRO STATUS

Este registro es de lectura y escritura y cada bit,


que lo forma, tiene una función especial de indicación
llamada bandera (FLAG). En él la ALU (Unidad Aritmética
Lógica) descarga los resultados auxiliares que se
producen al ejecutar cada instrucción. Nos indica si tras
la operación el resultado es cero poniendo el BIT-2 “Z”
(ZERO) en “1”, si hubo acarreo desde el MSB del
operando poniendo el BIT-0 “C” (CARRY) en “1” o si hubo

56
acarreo entre el NIBBLE BAJO y el ALTO BIT-1 “DC” (DIGIT
CARRY). En combinación, es posible determinar si un
número es mayor, menor o igual a otro, por ejemplo,
aplicando una resta entre ambos y leyendo el estado de
dichas banderas para realizar el salto si tal o cual
condición se producen.

Otros BITS son utilizados para seleccionar bancos de


registros para direccionamiento directo BIT-5 y BIT-6
(RP0 y RP1 respectivamente). El BIT-7 (IRP) selecciona
bancos para direccionamiento indirecto. El BIT-4 (TO)
indica si el temporizador “PERRITO GUARDIAN” (WATCH
DOG TIMER -WDT) alcanzo el tiempo programado para
despertar al MCU y el BIT-3 (PD) “POWER DOWN” indica
si una instrucción “sleep” lo puso a dormir para ahorrar
energía.

En la página 22 de la hoja de datos encontrará la


información del STATUS.

MSB STATUS LSB


B7 B6 B5 B4 B3 B2 B1 B0
IRP RP1 RP0 TO PD Z DC C

El registro especial STATUS, se encuentra replicado en los


cuatro bancos de registros en las posiciones 0x03, 0x83,
0x103 y 0x183.

57
MODOS DE DIRECCIONAMIENTO

El direccionamiento se refiere a la forma de


acceso y la transferencia del dato contenido en un
registro particular, existen 4 modos denominados:
Direccionamiento INMEDIATO, Direccionamiento
DIRECTO, Direccionamiento INDIRECTO o INDEXADO y
Direccionamiento RELATIVO.

DIRECCIONAMIENTO INMEDIATO

Se denomina direccionamiento inmediato


cuando uno de los operando es un número “literal” y el
otro es el registro de trabajo W, e inmediatamente altera
el valor de este último.

Por ejemplo la instrucción

addlw 0xC2

Sumará el “literal” 0xC2 a lo que contenga el registro W,


el resultado se almacena siempre en W para este caso.

W antes de la instrucción= 0x08

0 0 0 0 1 0 0 0

W después de la instrucción=0XCA

1 1 0 0 1 0 0 1

58
DIRECCIONAMIENTO DIRECTO

Se denomina directo cuando uno de los


operando es una posición de registros en RAM.

movwf 0x21

Para este caso se transfiere el contenido de W al registro


de RAM ubicado en la posición 0x21.

W antes de la instrucción=0x08

0 0 0 0 1 0 0 0

GPR (0x21) antes de la instrucción = 0x97

1 0 0 1 0 1 1 1

W después de la instrucción=0x08

0 0 0 0 1 0 0 0

GPR (0x21) después de la instrucción = 0x08

0 0 0 0 1 0 0 0

59
DIRECCIONAMIENTO INDIRECTO

Se denomina direccionamiento indirecto o


indexado cuando se utiliza un puntero para señalar a cuál
de los registros se pretende acceder. Para ello el MCU
cuenta con dos registros especiales INDF y FSR, el
primero no es un registro físico y cuando se lo utiliza
como operando se accede al contenido del registro que
este apuntado por FSR. Es decir que en el FSR se carga el
puntero. Los 4 bancos de registros tienen un INDF y un
FSR pero es necesario indicar mediante el BIT-7 (IRP) del
registro STATUS en cuál de los 2 grupos de bancos vamos
a trabajar. Si este bit lo colocamos en “0” se accede al
direccionamiento indirecto en los bancos BANK0 y
BANK1 y si lo colocamos a “1” se accede a los bancos
BANK2 y BANK3. Si intentamos acceder en forma
indexada al registro INDF cargando 0x00 en el FSR, por
no tratarse de un registro físico, la lectura nos daría 0x00
y la escritura, no se realizará la operación pero los bits de
STATUS pueden ser afectados.

Veamos un ejemplo para entender cómo


funciona:

“Se desea acceder en forma indexada a dos registros de


usuario que ocupan las direcciones contiguas 0x3E y 0x3F
para leer sus contenidos que son 0xFF y 0X1F
respectivamente. El INDF ocupa la dirección 0x00 y el FSR
la 0x04 en el BANK-0.”

60
Lo primero que se debe realizar es posicionarse
en el banco correspondiente cargando los BITS 5,6 y 7 del
STATUS con “0” para este ejemplo.

Después debemos cargar el puntero FSR con el


primer registro que se desea acceder, es decir 0x3E.

Ahora si leemos el INDF, en su interior se


replicará el valor 0xFF que es el contenido del registro
0x3F.

Para leer el segundo registro solo necesitamos


incrementar el contenido del FSR en 1, por lo que su
valor ahora es 0x3F. Al leer el INDF nuevamente su valor
es 0x1F que es el contenido del segundo registro.

REG DIR CONTENIDO BITS HEX


INDF 0x00 1 1 1 1 1 1 1 1 FF
STATUS 0x03 0 0 0 1 1 x x x 1x
FSR 0x04 0 0 1 1 1 1 1 0 3E

PRIMERO 0x3E 1 1 1 1 1 1 1 1 FF
SEGUNDO 0x3F 0 0 0 1 1 1 1 1 1F

REG DIR CONTENIDO BITS HEX


INDF 0x00 0 0 0 1 1 1 1 1 1F
STATUS 0x03 0 0 0 1 1 x x x 1x
FSR 0x04 0 0 1 1 1 1 1 1 3F

PRIMERO 0x3E 1 1 1 1 1 1 1 1 FF
SEGUNDO 0x3F 0 0 0 1 1 1 1 1 1F

61
DIRECCIONAMIENTO RELATIVO

Utilizado para acceder a tablas en la memoria de


programa, el direccionamiento relativo se realiza
tratando la tabla como una subrutina ubicada en
cualquier parte del programa. En este caso el registro de
trabajo W funciona como puntero de acceso a la tabla.
Este será sumado en el salto al PCL (contador de
programa) para traer en el mismo W el dato de la tabla.
Es relativo al valor del PCL pero a su vez es indexado. A
su debido tiempo veremos cómo se implementa.

PILA DE RETORNO STACK

El STACK o pila de retorno es una porción de


RAM de 13 BITS de ancho y 8 posiciones o niveles donde
se almacena la dirección de retorno cuando se deba
ejecutar una subrutina.

Una subrutina es un bloque de programa donde


se ejecutan una serie de instrucciones para realizar una
tarea específica, que se repite muchas veces a lo largo de
un programa o simplemente para dividir nuestro código
en bloques funcionales. Esta práctica permite ahorrar
espacio en la memoria de programa.

Luego de ejecutar la subrutina el programa debe


continuar con la instrucción siguiente a la invocación de
la subrutina en forma normal.

62
Las subrutinas son invocadas con la instrucción
call XXXX siendo XXXX la dirección hexadecimal donde se
ubica la subrutina, la última instrucción en ella debe ser
siempre return.

Es posible anidar subrutinas, es decir dentro de


una subrutina llamar a otra subrutina (no así misma)
hasta un máximo de 8 que son los niveles disponibles de
STACK.

El proceso es el siguiente:

El PCL (contador de programa) encuentra una


instrucción de llamada a subrutina call. Antes de cargar
la dirección donde se encuentra dicha subrutina, para
ejecutar sus instrucciones, guarda en el STACK su valor
actual más uno, que corresponde a la siguiente
instrucción del programa principal (PCL+1). Una vez que
guardó el valor de retorno carga el PCL con la dirección
de inicio de la subrutina y ejecuta una a una las
instrucciones que se hayan escrito allí hasta encontrar la
instrucción de final de subrutina que como se mencionó
debe ser return. Entonces ahora recarga el PCL con lo
que está guardado en el STACK que corresponde a la
dirección donde debe continuar.

Un gráfico ayudará a comprender el proceso

63
PCL Instrucciones
0x200 Instrucción 1
0x201 Instruccion2
0x202 Call 0x300
0x203 Instrucción 4
0x204 Instrucción 5
. .
. .
. .
. .
. .
. .
0x300 Instrucción n
Instrucción n+1
Instrucción n+2
return

VECTOR DE RESET

Cuando un MCU es alimentado o sufre un RESET,


mediante el pin asignado para ello MCLR, ocurren una
serie de procesos. El que nos interesa observar en este
momento es la carga del contador de programa PCL que
se realiza, siempre que esto ocurre, con el valor 0x0000.
En esta dirección se debe colocar la primera instrucción
de nuestro programa, es decir allí inicia siempre. A esto
se lo conoce como VECTOR DE RESET.

64
VECTOR DE INTERRUPCIÓN

Una interrupción es una subrutina muy particular


que es invocada por HARDWARE desde algún pin como
INT o algún periférico como un temporizador, la USART,
etc.

Cuando una interrupción se produce, el


programa se “interrumpe” e inmediatamente el contador
de programa carga la dirección 0x0004 para comenzar la
ejecución desde allí. Es precisamente esta dirección la
que se conoce como VECTOR de INTERRUPCIÓN.

Una subrutina de interrupción siempre debe


finalizar con la instrucción retfie, que, entre otras tareas,
es la que indica que continúe el programa desde donde
se lo dejó.

Las interrupciones se deben activar mediante


algunos BITS de los registros INTCON y PIE1. Ellas pueden
enmascararse para que no interrumpan en un momento
inadecuado.

FUENTES DE INTERRUPCIONES

Este MCU tiene 10 (diez) fuentes de interrupciones

• Externa por pin RB0/INT.


• Desborde de TMR0.
• Cambio de estado sobre PORTB pines RB7 a RB4.
• Comparador

65
• Fin de transmisión de datos por USART.
• Dato recibido por USART.
• CCP –Módulo de Captura/Comparación.
• Desborde de TMR1.
• Igualado de TMR2.
• Escritura de EEPROM.

Cualquiera de ellas se debe activar para que


funcionen en el registro INTCON y en PIE1. Cada vez que
el MCU arranca, lo hace con todas las interrupciones
desactivadas para evitar estados de máquina indebidas.

Cualquier interrupción habilitada responde de la


misma manera, yendo a la posición 0x0004 VECTOR DE
RESET. Para identificar cuál de ellas produjo la
interrupción el MCU nos lo indica mediante una serie de
BITS de banderas FLAG que se encuentran en los
registros INTCON y PIR1 que deben ser interrogados por
la subrutina de interrupción para realizar el tratamiento
correspondiente.

Si se desea desactivar momentáneamente todas las


interrupciones, sin tener que inhabilitar una a una, existe
un bit denominado GIE en el registro INTCON que realiza
esta función, sin alterarle la programación individual.

66
REGISTRO INTCON (INTERRUPT CONTROL)

MSB INTCON LSB


B7 B6 B5 B4 B3 B2 B1 B0
GIE PEIE T0IE INTE RBIE T0IF INTF RBIF

Bit-7 GIE (Global Interrupt Enable)

1 = Habilita todas las interrupciones programadas


0= Deshabilita todas las interrupciones.

Bit-6 PEIE (Peripheral Interrupt Enable)

1 = Habilita interrupciones de periféricos.


0= Deshabilita interrupciones de periféricos.

Bit-5 T0IE (TMR0 Overflow Interrupt Enable)

1 = Habilita interrupción de TMR0.


0= Deshabilita interrupción de TMR0.

Bit-4 INTE (RB0/INT External Interrupt Enable)

1 = Habilita interrupción de RB0/INT.


0= Deshabilita interrupción de RB0/INT.

Bit-3 RBIE (RB Port Change Interrupt Enable)

1 = Habilita interrupción por cambio de estado


0= Deshabilita interrupción.

Bit-2 T0IF (TMR0 Overflow Interrupt Flag)

67
1 = desborde de TMR0 (borrar en programa).
0= No ha ocurrido desborde.

Bit-1 INTF (RB0/INT External Interrupt Flag)

1 = RB0/INT externa (borrar en programa).


0= No ha ocurrido interrupción externa.

Bit-0 RBIF (RB Port Change Interrupt Flag)

1 = Cambio de RB7 a RB4 (borrar en programa).


0= No ha ocurrido cambio sobre Puerto B.

REGISTRO PIE1 (PERIPHERAL INTERRUPT ENABLE 1)

MSB PIE1 LSB


B7 B6 B5 B4 B3 B2 B1 B0
EEIE CMIE RCIE TXIE - CCP1IE TMR2IE TMR1IE

Bit-7 EEIE (EE Write Complete Interrupt Enable)

1 = Habilita interrupción fin escritura EEPROM


0= Deshabilita interrupción EEPROM.

Bit-6 CMIE (Comparator Interrupt Enable)

1 = Habilita interrupción de comparador.


0= Deshabilita interrupción de comparador.

Bit-5 RCIE (USART Receive Interrupt Enable)

68
1 = Habilita interrupción Recepción USART.
0= Deshabilita interrupción Recepción USART.

Bit-4 TXIE (USART Transmit Interrupt Enable)

1 = Habilita interrupción Transmisión USART.


0= Deshabilita interrupción Transmisión USART.

Bit-3 No Utilizado

Bit-2 CCP1IE (CCP1 Interrupt Enable)

1 = Habilita interrupción Captura/Compara.


0= Deshabilita interrupción Captura/Compara.

Bit-1 TMR2IE (TMR2 to PR2 Match Interrupt Enable)

1 = Habilita interrupción TMR2 –PR2/ igualdad


0= Deshabilita interrupción TMR2.

Bit-0 TMR1IE (TMR1 Overflow Interrupt Enable)

1 = Habilita Interrupción desborde de TMR1.


0= Deshabilita desborde TMR1.

REGISTRO PIR1 (PERIPHERAL INTERRUPT REGISTER)

MSB PIR1 LSB


B7 B6 B5 B4 B3 B2 B1 B0
EEIF CMIF RCIF TXIF - CCP1IF TMR2IF TMR1IF

69
Bit-7 EEIF (EE Write Complete Interrupt Flag)

1 = Fin escritura EEPROM (borrar en programa)


0= No ha ocurrido escritura EEPROM.

Bit-6 CMIF (Comparator Interrupt Flag)

1 = Cambio en salida del comparador.


0= No ha ocurrido cambio.

Bit-5 RCIF (USART Receive Interrupt Flag)

1 = Búfer Recepción USART lleno (dato recibido).


0 = Búfer Recepción USART vacio.

Bit-4 TXIF (USART Transmit Interrupt Flag)

1 = Búfer Transmisión USART vacio (fin TX).


0 = Búfer Transmisión USART lleno.

Bit-3 No Utilizado

Bit-2 CCP1IF (CCP1 Interrupt Flag)

Modo Captura
1 = Captura ocurrida TMR1 (Borrar en programa).
0= No ha ocurrido captura TMR1.

Modo Compara
1 = Igualdad de TMR1 (Borrar en programa).
0= No ha ocurrido igualdad TMR1.

Modo PWM No utilizado en este modo

70
Bit-1 TMR2IF (TMR2 to PR2 Match Interrupt Flag)

1 = Igualdad en TMR2 y PR2 (borrar en programa)


0= No igualdad.

Bit-0 TMR1IF (TMR1 Overflow Interrupt Flag)

1 = desborde de TMR1 (Borrar en programa).


0= No ha ocurrido desborde TMR1.

CONFIGURANDO PINES DE ENTRADA/SALIDA

Los pines del MCU se pueden configurar para que


sean entradas o salidas en forma individual en cada
puerto. Es tan sencillo como escribir un “1” para que sea
una entrada o un “0” para salida, en el bit
correspondiente dentro de un registro especial
denominado TRISA para los pines del PORTA o TRISB
para los pines del PORTB. La localización de los registros
TRISA y TRISB se encuentran en el BLOCK-1 del banco de
registros, por lo que se debe cambiar mediante los bits
RP0 y RP1 del registro STATUS. La correspondencia de los
pines es bit a bit, es decir el pin 6 del MCU que es RB0
corresponde con el BIT-0 del registro TRISB y con el BIT-0
del registro PORTB y así sucesivamente. El pin 17 del
MCU que es RA0 tendrá su correspondencia con el BIT-0
de TRISA y con el BIT-0 de PORTA.

71
El acceso a los puertos, tanto para leer un pin de
entrada o sacar un valor por un pin de salida se realiza
leyendo o escribiendo sobre los registros denominados
PORTA y PORTB que se hallan localizados en el BLOCK-0
del banco de registros (banco principal).

Cuando el MCU es alimentado los puertos no


están programados aún, entonces se encuentran en un
estado de alta impedancia para proteger la electrónica
que se encuentre ligada a ellos. Lo primero que debe
contener un programa entonces es la programación de
las entradas o salidas de los puertos. Es posible cambiar
la configuración de ellos, en cualquier momento que se
desee dentro del programa. Con el diseño de la
electrónica adecuada, es posible que un pin de puerto se
comporte como entrada en un instante e
inmediatamente después como una salida y viceversa,
pero nunca en forma simultánea.

EJEMPLO:

MSB TRISA LSB


B7 B6 B5 B4 B3 B2 B1 B0
1 0 0 1 0 0 0 0

En este ejemplo se han configurado como entradas los


pines RB7 y RB4, mientras que el resto son salidas.

72
Existe otro registro, denominado OPTION,
dicado a la manera en que queremos que se comporte el
MCU. Cada bit dentro del cumple una función de control
que se muestra a continuación.

REGISTRO OPTION (OPTION REGISTER)

MSB OPTION LSB


B7 B6 B5 B4 B3 B2 B1 B0
RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0

Bit-7 RBPU (PORTB Pull-up Enable)

1 = Deshabilita resistores sobre PORTB


0= Habilita resistores sobre entradas de PORTB.

Bit-6 INTEDG (Interrupt Edge Select)

1 = Sobre el flanco de subida de RB0/INT.


0 = Sobre el flanco de bajada de RB0/INT.

Bit-5 T0CS (TMR0 Clock Source Select)

1 = Transiciones sobre pin RA4/T0CKI/CMP2.


0= Transiciones sobre ciclos de instrucción.

Bit-4 TOSE (TMR0 Source Edge Select)

1 = Incremento en la transición de ALTO a BAJO.


0 = Incremento en la transición de BAJO a ALTO.

Bit-3 PSA (Prescaler Assignment)

73
1 = Asignado al WDT (perrito guardián).
0 = Asignado al módulo temporizador TMR0.

Bit-2-0 PS2 a PS0 (Prescaler Rate Select)

Relación de pulsos del pre escalador

PS2 PS1 PS0 TMR0 WDT


0 0 0 1:2 1:1
0 0 1 1:4 1:2
0 1 0 1:8 1:4
0 1 1 1:16 1:8
1 0 0 1:32 1:16
1 0 1 1:64 1:32
1 1 0 1:128 1:64
1 1 1 1:256 1:128

NOTA: Si se desea una relación 1:1 para el TMR0, asigne


el pre escalador al WDT colocando el bit PSA en “1”

CONFIGURACIÓN DE BASE

Hay configuraciones que son posibles de alterar


mediante el programa y otras que deben ser grabadas
independientemente a este. Las opciones que se pueden
alterar se realizan mediante los registros de RAM, como
ya se habrán dado cuenta, y las que, indefectiblemente
deben cargarse en forma externa, lo hacen en posiciones
especiales por encima de la memoria de programa
(0x2007), denominados bits de configuración y que la

74
única forma de acceso admisible es la escritura/lectura
mediante el programador (ver página 96 de la hoja de
datos).

En esta posición se configuran:

• Habilitación de protección de Código.


• Habilitación Protección de datos de EEPROM.
• Habilitación de Programación en baja tensión.
• Habilitación de RESET por bajada de tensión
(apagón).
• Habilitación de Temporizador de RESET.
• Habilitación de Temporizador de WDT “Perrito
guardián”.
• Tipo y frecuencia de reloj principal.

USER ID

Se han reservado 4 posiciones de 10 bits para


que el usuario las utilice como identificador de producto.

Se encuentran por encima de la memoria de programa y


están localizadas desde 0x2000 a 0x2003.

MÓDULOS PERIFERICOS

Los pormenores relacionados con cada módulo


periférico, es decir: Temporizador TMR0, Temporizador
TMR1, Temporizador TMR2, Comparadores analógicos
CMP1 y CMP2, Tensión de referencia interna VREF,
Captura y comparación digital CCP1,

75
Transmisor/Receptor Asincrónico/Sincrónico Serie
USART y EEPROM de Datos serán analizados en cada
práctica particular diseñada para tal fin.

SUMARIO DE INSTRUCCIONES

Las instrucciones que el MCU puede ejecutar,


están divididas en tres grupos. Las dedicadas al manejo
de bytes, las dedicadas al manejo de bits y las dedicadas
al control y literales.

INSTRUCCIONES ORIENTADAS AL BYTE

Operando,
NEMÓNICO DESCRIPCIÓN
destino
addwf f,d Suma W y f
andwf f,d AND W con f
clrf f Borra f
clrw --- Borra w
comf f,d Complementa f
decf f,d Decremento de f
decfsz f,d Decremento de f, salto si cero
incf f,d Incremento de f
incfsz f,d Incremento de f, salto si cero
iorwf f,d OR inclusiva W con f
movf f,d Mueve f
movwf f Mueve W a f
nop --- No opera
rlf f,d Rota a la izquierda desde CARRY
rrf f,d Rota a la derecha desde CARRY
subwf f,d Substrae W a f
swapf f,d Intercambio de NIBBLES en f

76
xorwf f,d OR exclusiva W con f
Para las instrucciones orientadas al BYTE, el
operando f es la dirección de un registro de RAM y es de
7 BITS. Por lo tanto f es un número hexadecimal
comprendido entre 0x00 y 0x7F. El operando d es el
destino del resultado, es de 1 BIT. Los destinos posibles
son dos, el registro de trabajo W o el registro f. Si el bit d
es 1 el resultado se escribe en el registro RAM, si es cero
en el registro de trabajo W.

El formato de estas instrucciones es:

M addwf 0x7F,F L
13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 1 1 1 1 1 1 1 1 1 1 1
Código instrucción d Registro RAM

INSTRUCCIONES ORIENTADAS AL BIT

Operando,
NEMÓNICO DESCRIPCIÓN
BIT
bcf f,b Pone a cero el bit b del registro f
bsf f,b Pone a uno el bit b del registro f
btfsc f,b Prueba estado bit b, salta si cero
btfss f,b Prueba estado bit b, salta si uno

Las instrucciones orientadas al BIT, realizan


operaciones de puesta a uno, puesta a cero, testeo de
estado en cero y testeo de estado en uno de uno de los 8
bits de un registro de RAM.

77
El formato de este tipo de instrucciones es:

M bcf 0x2A,F L
13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 1 0 0 1 0 1 0 1 0 1 0 1 0
Instrucción Bit Registro RAM

INSTRUCCIONES DE CONTROL Y LITERALES

Literal
NEMÓNICO DESCRIPCIÓN
inmediato
addlf k Suma literal y W
andlf k AND literal con W
call k Llamada a subrutina
clrwdt --- Borra temporizador WDT
goto k Ir a una dirección
iorlw k OR inclusiva literal con W
movlw k Mueve literal a W
retfie --- Retorno desde interrupción
retlw k Retorno subrutina con literal en W
return --- Retorno subrutina
sleep --- Entra en modo dormir
sublw k Substrae W al literal
xorlw k OR exclusiva literal con W

La forma general de este tipo de instrucciones es:

M andlw 0x73 L
13 12 11 10 09 08 07 06 05 04 03 02 01 00
1 1 1 0 0 1 0 1 1 1 0 0 1 1
Instrucción Literal inmediato

78
El número literal es un número de 8 bits cuyo
valor hexadecimal está comprendida entre 0x00 a 0xFF.

La forma se modifica cuando se tratan de dos


instrucciones particulares, ellas son goto y call, para ellas
el formato cambia a:

M goto 0x0183 L
13 12 11 10 09 08 07 06 05 04 03 02 01 00
1 0 1 0 0 1 1 0 0 0 0 0 1 1
Código Literal inmediato (dirección destino)

Para este caso el literal es una posición de memoria de


11 bits con los que es posible direccionar las 2048
posiciones de la memoria de programa.

YA estamos en condiciones para comenzar a utilizar la


placa de desarrollo. En la siguiente sección aprenderá a
montar la plataforma de trabajo en una computadora
personal y realizar los ensayos que permiten terminar
de comprender los conceptos vertidos en esta primer
parte. Desarrollaremos los aspectos más sobresalientes
de la programación diagramas de flujo, técnicas de
enmascaramiento, algoritmos destacados, etc. Le
sugerimos practicar el manejo de las bases numéricas
realizando conversiones y operaciones con ellas.

79
80
SUMARIO DE TEMAS

Prefacio 3
Electrónica de la placa 5
Plataforma de desarrollo 6
Programador 7
Construcciones cognitivas previas 8
Recomendaciones generales 8
La era del microcontrolador 9
Repasando conceptos 11
Sistemas de numeración 14
Numeración Octal 16
Numeración Hexadecimal 17
Numeración Binaria 18
La lógica, breve reseña histórica 20
Compuertas electrónicas digitales 21
Compuerta AND 23
Compuerta OR 24
NOT negador o inversor 26
YES buffer o amplificador 27
Compuerta NAND 28
Compuerta NOR 30
Compuerta XOR 31
Compuerta XNOR 32
El bit, el byte y el nibble 33
Conversión binario a decimal 35
Conversión decimal a binario 36
Conversión binario a hexadecimal 37
Conversión hexadecimal a binario 39
Código BCD 41
Código ASCII 41
Set de caracteres ASCII 43
Microcontrolador PIC 16F628A 45

81
Características de la CPU interna 48
Características especiales del MCU 49
Características de los periféricos 50
Arquitectura interna 51
Memoria FLASH de programa 52
Memoria RAM – Registros generales - 54
Registro de trabajo W 56
Registro STATUS 56
Modos de Direccionamiento 58
Direccionamiento Inmediato 58
Direccionamiento Directo 59
Direccionamiento Indirecto 60
Direccionamiento Relativo 62
Vector de RESET 64
Vector de INTERRUPCIÓN 65
Fuentes de Interrupciones 65
Registro INTCON 67
Registro PIE1 68
Registro PIR1 69
Configurando pines de entrada/salida 71
Registro OPTION 73
Configuraciones de base 74
USER ID 75
Módulos periféricos 75
Sumario de Instrucciones 76
Instrucciones orientadas al BYTE 76
Instrucciones orientadas al BIT 77
Instrucciones de control y literal 78

82

Вам также может понравиться