Sunteți pe pagina 1din 88

MICROCONTROLADORES

POR: HUGO ALBERTO MURILLO

UNIVERSIDAD EAFIT
DEPARTAMENTO DE INGENIERIA DE
DISEO DE PRODUCTO
MEDELLIN
2002

TABLA DE CONTENIDO
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.

INTRODUCCIN
CONCEPTOS BSICOS
COMPUERTAS LGICAS
FUNCIONES LGICAS CON BYTES
CIRCUITO COMBINACIONAL
LATCHES
FLIP-FLOP
MEMORIAS
ARITMTICA BINARIA
INTRODUCCIN AL MICROCONTROLADOR
EXPLICACIN DEL REGISTRO STATUS
SINTAXIS DE LAS INSTRUCCIONES
DIRECTIVAS PARA HACER UN PROGRAMA EN MICROCONTROLADOR
EJEMPLOS SENCILLOS DE DIAGRAMAS DE FLUJO
CONFIGURACIN DE LOS PUERTOS
EJEMPLOS SENCILLOS CON ENTRADAS Y SALIDAS DE DATOS
RETARDOS
MANEJO DE SUBRRUTINAS
EJEMPLO UTILIZANDO RETARDOS
GENERACIN DE TONOS CON MICROCONTROLADORES
MOTORES PASO A PASO
EJEMPLO DE MANEJO DEL MOTOR PASO A PASO
EXPLICACIN DE LAS INSTRUCCIONES DE ROTACIN
MANEJO DE DISPLAY 7 SEGMENTOS Y ANTIREBOTE
TRABAJOS CON PULSADORES
EJEMPLO CON MANEJO DE DISPLAY
MULTIPLEXAJE DE DISPLAY
EJEMPLO DE MULTIPLEXAJE
INTERRUPCIONES
EJEMPLO UTILIZANDO INTERRUPCION POR RB0
CONVERSOR ANALOGO / DIGITAL (A/D)
EJEMPLO DE CONVERSOR ANLOGO DIGITAL
COMUNICACIN SERIAL
EJEMPLO COMUNICACIN SERIAL

BIBLIOGRAFIA

2
7
9
10
13
13
16
21
23
27
30
31
33
37
38
40
44
45
46
48
49
52
55
57
59
61
64
66
70
73
77
79
83

INTRODUCCIN

La gua de microcontroladores fue hecha pensando bsicamente en que los


estudiantes cuenten con un material escrito que les sirva de alguna manera como
medio de consulta, en las diferentes practicas y proyectos que enfrentaran durante el
curso.
Inicialmente explica los conceptos bsicos, como sistemas de numeracin, compuertas
lgicas, flip flop, memorias y aritmtica binaria. Luego explica el microcontrolador
PIC16F873.
Los ejemplos que se desarrollan en esta gua son relativamente sencillos, y
seguramente no siempre ser la mejor manera de hacerlos, es solo una, entre varias
posibilidades.
Agradezco el trabajo y el gran apoyo de los estudiantes Mnica Andrea Lpez, Esteban
Gonzlez y Paulina Fernndez, que ayudaron en la edicin de esta gua.

MICROCONTROLADORES

2.

CONCEPTOS BSICOS:

Antes de comenzar el estudio de los Microcontroladores se estudiarn algunos


conceptos importantes para comprender bien el funcionamiento de los
Microcontroladores.
SISTEMAS DE NUMERACIN
BINARIO

27 26 25 24 23 22 21 20

DECIMAL

...........103 102 101 100


.............163 162 161 160

HEXADECIMAL

2.1

Sistemas de Numeracin Decimal (BASE 10)

Todos estamos familiarizados con el sistema decimal porque lo utilizamos da a da.


El sistema decimal es un sistema de numeracin en base 10 porque los smbolos
que existen para representar cualquier nmero son 10, de 0 a 9. Pero mas all de
representar cualquier nmero es importante conocer el peso de cada dgito.
Cuando se escribe un nmero decimal, cada dgito tiene un peso, por ejemplo:
1 4 1 2
Unidades
Decenas
Centenas
Miles

Se puede decir que el nmero es igual a:


1000 * (1) + 100 * (4) + 10 * (1) + 1 * (2)
1000 + 400 + 10 + 2 = 1412
Como se haba dicho antes cada bit tiene un peso y el sistema decimal, se puede
representar:
.....104 103 102 101 100
y retomando el ejemplo
1 4 1 2
103 * (1) +102 * (4) + 101 * (1) + 100 * (2)
1000 + 400
+ 10
+
2 =1412

INGENIERIA DE DISEO DE PRODUCTO

MICROCONTROLADORES

El valor de un nmero decimal es la suma de los dgitos despus de haber


multiplicado cada dgito por su peso.

2.2

Sistema de Numeracin Binario (BASE 2)

En electrnica digital es uno de los sistemas de numeracin ms utilizados. Es til


porque solo utiliza dos dgitos, 1 y 0. Los dgitos binarios se utilizan para representar
los dos niveles de voltaje usados en electrnica digital ALTO O BAJO. En la
mayora de los sistemas digitales el nivel de voltaje alto est representado por el 1,
mientras que el nivel de voltaje bajo o cero voltios lo representa el 0. El 1 representa
el estado de encendido de un interruptor, de una luz o de un transistor, mientras que
el estado apagado est representado por un 0.
Solo se tiene dos dgitos para representar cualquier nmero en binario, todos los
nmeros binarios solo tienen unos y ceros y su base es dos.
Cuando se cuenta en binario se produce una situacin similar al sistema decimal,
excepto que ahora solo se tiene dos dgitos, llamados bits. Empecemos a contar: 0,
1. Hasta aqu, ya hemos usado los dos dgitos, por lo que incluimos otra posicin de
dgito y continuamos 10,11, nuevamente agotadas todas las combinaciones de dos
dgitos, por los que se requiere de una tercera posicin. Con tres dgitos se puede
continuar contando 100, 101, 110 y 111, para continuar, necesitamos una cuarta
posicin de dgito, y as sucesivamente.
........23 22 21 20
Igual que en el sistema decimal cada dgito tiene un peso.
La palabra bit es una contraccin de las palabras en Ingls binary digit (Dgito
Binario). Cada posicin de un nmero binario se conoce como bit. El nmero 10110
es un nmero de cinco bits. El primer lugar del extremo derecho recibe el nombre de
bit menos significativo (o LSB por sus siglas en Ingls), mientras que el lugar que
est en el extremo izquierdo se conoce como bit ms significativo (MSB por sus
siglas en Ingls).
1 0 1 1 0
MSB

LSB

1 palabra = 16 bits
1 byte
= 8 bits
1 nible = 4 bits
1 byte = 1 0 1 0

1100

Nible superior Nible inferior

INGENIERIA DE DISEO DE PRODUCTO

MICROCONTROLADORES

2.3

Sistema Hexadecimal (Base 16)

Este sistema es en base 16, lo que significa que para cada columna es posible
escoger uno de entre 16 dgitos.
Estos son: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E y F.
Donde

A = 10
B = 11
C = 12

D = 13
E = 14
F = 15

Para contar en el sistema hexadecimal se inicia en la primera columna a la izquierda


y se cuenta de 0 hasta F, una vez que se llena la primera columna, se pone un 0 en
ella y se suma a la segunda columna.
0F
10
.
.
.
1F
20
21
.
.
.....163 162 161 160
De igual manera que en el sistema decimal y binario cada dgito tiene un peso.
Se suele poner una H al final del nmero para indicar que est representado en el
sistema hexadecimal 17H

2.4

Conversin de Binario a Decimal

Para convertir un nmero binario en uno decimal, se hace la lista con los valores de
cada posicin y luego se suman los que corresponden a las posiciones donde hay
un 1.
Ejemplo
1 0 1 0 1
24 23 22 21 20
16 + 0 + 4 + 0 + 1=21

INGENIERIA DE DISEO DE PRODUCTO

MICROCONTROLADORES

2.5

Conversin de Decimal a Binario

El numero decimal se divide repetidamente entre 2, ignorando los residuos, hasta


que se tiene un cociente igual a cero. Despus se emplean stas para obtener la
respuesta, por ejemplo convertir 10110 en su equivalente a binario.
101 / 2
50 / 2
25 / 2
12 / 2
6/2
3/2
1/2

= 50
= 25
= 12
=6
=3
=1
=0

Residuo
Residuo
Residuo
Residuo
Residuo
Residuo
Residuo

1 LSB
0
1
0
0
1
1 MSB

RESPUESTA 1 1 0 0 1 0 12
2.6

Conversin de Hexadecimal a Decimal

Para convertir un nmero hexadecimal a decimal, se multiplica el valor de cada


dgito por su correspondiente peso y luego se suman todos los valores.
2B616

decimal ?

162 161
2
B

160
6

2* 256 + 11 * 16 + 6 * 1 = 694

2.7

Conversin de Binario a Hexadecimal

Ntese que cuatro bits binarios corresponden a un dgito hexadecimal. Esto es, se
refieren cuatro bits para contar de 0 hasta F. Para representar nmeros binarios
como nmeros hexadecimales, se forman grupos de cuatro comenzando en el punto
binario y en direccin a la izquierda. A continuacin se convierte cada grupo en el
correspondiente dgito hexadecimal.
Convertir 10111100 en un numero hexadecimal
1011

1100

10111100 = BC16

INGENIERIA DE DISEO DE PRODUCTO

MICROCONTROLADORES

2.8

Conversin de Hexadecimal a Binario

La conversin de hexadecimal a Binario es igual de sencilla, por cada dgito


hexadecimal se escriben los dgitos binarios correspondientes.
FF16
F
1111

Binario ?
F
1111

FF16 = 11111111
2.9

Decimal codificado en Binario: (BCD)

En BCD cada dgito decimal esta representado por cuatro bits.


0.0000
1.0001
.
.
.
9.1001
para representar el 25 decimal en BCD

2.10

0010

0101

Representacin de los nmeros de 0 a 15


DECIMAL
0
1
2
3
4
5
6
7
8
9
10
11

BINARIO
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011

INGENIERIA DE DISEO DE PRODUCTO

HEXADECIMAL
0
1
2
3
4
5
6
7
8
9
A
B

BCD
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
0001 0000
0001 0001
6

MICROCONTROLADORES

12
13
14
15

1100
1101
1110
1111

C
D
E
F

0001 0010
0001 0011
0001 0100
0001 0101

3.

COMPUERTAS LGICAS

3.1

Compuerta AND: La compuerta AND genera una salida ALTO solo cuando
todas las entradas estn en nivel ALTO.
A
B

X=A*B

3.2

0
0
1
1

0
1
0
1

0
0
0
1

Compuerta OR: La compuerta OR genera un nivel alto a la salida cuando


cualquiera de sus entradas estn en nivel ALTO.

A
B

X=A+B

3.3

0
0
1
1

0
1
0
1

0
1
1
1

Compuerta NOT O INVERSOR: El inversor cambia el nivel lgico de la


salida al opuesto de la entrada, cambia un 1 por 0, y un 0
por 1.

X
X=A

0
1

1
0

X
X=A

El indicador de negacin es un circulo que indica inversin, cuando aparece


en la entrada o en la salida de un elemento lgico.

INGENIERIA DE DISEO DE PRODUCTO

MICROCONTROLADORES

3.4

Compuerta NAND: el termino NAND es una contraccin de NOT-AND, e


implica una funcin AND con la salida negada.
A
B

A
B

X=A*B

0
0
1
1

0
1
0
1

1
1
1
0

La compuerta NAND genera una salida a nivel bajo solo cuando todas las entradas
estn a nivel alto.
Cuando cualquiera de las entradas est a nivel bajo, la salida se pondr a nivel
ALTO.
3.5

Compuerta NOR: el termino NOR es una contraccin de NOT-OR e implica


una funcin OR con la salida invertida.
A
B

A
B

X=A+B

0
0
1
1

0
1
0
1

1
0
0
0

La compuerta NOR genera una salida a nivel bajo cuando cualquiera de las entradas
esta a nivel alto.
3.6

Compuerta (XOR) OR Exclusiva: la salida se pone a nivel ALTO solo


cuando las dos entradas estn a niveles lgicos opuestos.
A
B

3.7

X = AB + AB

0
0
1
1

0
1
0
1

0
1
1
0

Compuerta (XNOR) NOR EXCLUSIVA: el smbolo de la compuerta XNOR


indica que su salida es opuesta a la de la compuerta XOR.
A
B

X = AB + A.B

0
0
1
1

0
1
0
1

1
0
0
1

La salida se pone a nivel ALTO solo cuando las dos entradas estn a niveles lgicos
iguales.
INGENIERIA DE DISEO DE PRODUCTO

MICROCONTROLADORES

4. FUNCIONES LOGICAS CON BYTES


As como se forman compuertas lgicas con bits tambin es posible hacer funciones
lgicas con bytes.

5.

AND

1 0 1 1 0 1 1 1
0 0 0 0 1 1 1 1
0 0 0 0 0 1 1 1

OR

1 0 1 1 0 1 1 1
1 1 1 1 0 1 1 0
1 1 1 1 0 1 1 1

XOR

1 0 1 0 1 1 1 1
1 0 1 0 1 1 0 0
0 0 0 0 0 0 1 1

XOR: sirve para determinar si dos bytes


son iguales, en ese caso el resultado de la
XOR ser cero (0).

CIRCUITO COMBINACIONAL

El circuito combinacional es un circuito cuya funcin de salida esta determinada por


el estado de las entradas. Se soluciona mediante compuertas lgicas.
Se analizarn algunos circuitos combinados con su respectiva funcin de salida, en
las que, conociendo que estado tiene las entradas se puede saber el estado de la
salida.
A
B
X
A
B

X = A*B + A*B

La salida es uno si A = 1 y B = 0, si A = 1 y B = 1
El numero de posibles combinaciones de un circuito combinacional esta
representado por 2n ; donde n significa el numero de entradas.
Por ejemplo un circuito combinacional con 3 entradas puede tener 8 posibles
combinaciones:
23 = 8

INGENIERIA DE DISEO DE PRODUCTO

MICROCONTROLADORES

5.1

Diseo de un circuito combinacional

Problema:
Las acciones de una sociedad estn distribuidas de la siguiente manera:
El socia A tiene el 22% de las acciones, el socio B el 20%, el socio C el 27% y el
socio D el 31%. Cada decisin que toma la junta directiva compuesta por los cuatro
socios, ser aprobada con el 51% como mnimo del porcentaje total de las acciones.
Cada votacin de un socio es asumida como aceptada 1 y como no aceptada 0.
Se pide disear el circuito, que nos indique encendiendo un bombillo, cuando la
propuesta fue aceptada.
Pasos para el diseo de un circuito combinacional
1. Entender bien el problema.
2. Hacer la tabla de verdad. El numero de entradas determina el numero de
posibles combinaciones de la tabla de verdad con la formula 2n , donde n es
el numero de entradas.
En este caso cada socio representa una entrada, por los tanto el numero de
posibles combinaciones es 24 = 16
22%
A
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1

20%
B
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1

INGENIERIA DE DISEO DE PRODUCTO

27%
C
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1

31%
D
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1

SALIDA
0
0
0
1
0
1
0
1
0
1
0
1
0
1
1
1

ABCD
ABCD
ABCD
ABCD
ABCD
ABCD
ABCD
ABCD

10

MICROCONTROLADORES

3. Sacar la funcin de salida, hay dos formas:


Minterminos: (Suma de Productos)
Tiene en cuenta solo los casos en que la salida es 1 y cada salida se
separa por una OR.
Maxterminos: (productos de sumas)
Tiene en cuenta solo los casos en que la salida en cero 0 y cada salida
se separa por una AND.
En el ejemplo que se est solucionando se trabajar con los minterminos.
La funcin de salida queda as:
Sal = ABCD + ABCD + ABCD + ABCD + ABCD + ABCD + ABCD + ABCD
4. Simplificacin: Existen dos formas para simplificar un circuito combinacional,
por:
Mapas de Karnaugh
lgebra Booleana
Mapas de Karnaugh: se procede de la siguiente manera:
a) Se dibuja el mapa de Karnaugh con el numero de celdas igual al numero
de combinaciones de la tabla de verdad. A cada celda le corresponde una
salida.
NOTA: se debe tener en cuenta que entre celda y celda solo puede cambiar
una variable.
CD
00 01 11 10

AB
00
01
11
10

b) Se llena el mapa de Karnaugh con las salidas de la tabla de verdad. A


cada salida le corresponde una celda y cada celda corresponde a una
combinacin de la tabla de verdad.
Se debe ubicar inicialmente las combinaciones en que la salida es 1 y
luego los espacios restantes se llenan con ceros o.

INGENIERIA DE DISEO DE PRODUCTO

11

MICROCONTROLADORES

CD
AB

00 01 11 10
00

01

11

10

c) Se renen en grupos de 1, 2, 4, 8 o 16 unos que sean adyacentes.


Nota: Dos celdas son adyacentes si entre una y otra solo cambia una
variable. Una celda es adyacente con cualquiera de sus lados, Izquierda,
derecha, arriba o abajo.
Se debe tratar de tener la menor cantidad de grupos con el mayor numero
de unos (1) posible. Un 1 puede pertenecer a varios grupos.
CD
AB

00 01 11 10
00

01

11

10

AD

BD

ACD

CD

d) Se elimina de cada grupo las variables variables que cambian de estado.


e) Se unen las funciones simplificadas con una compuerta OR.
Sal = BD + AD + CD + ABC
La solucin final al circuito combinacional es:
Socios

Salida

INGENIERIA DE DISEO DE PRODUCTO

12

MICROCONTROLADORES

6.

LATCHES

Es un dispositivo biestable que almacena informacin binaria (1 bit).


Latch S R (Set - Reset)
S

0
0
1
1

0
1
0
1

Q
ESTADO PROHBIDO

0
1
NO CAMBIA

Latch S R con entrada activa a nivel bajo.


El latch tiene dos entradas R (Reset) poner a cero, y S (Set) pone a uno y dos
salidas Q y Q. Cuando la salida Q esta a nivel alto, el latch se encuentra en estado
SET y permanecer indefinidamente en l hasta que se aplique un nivel en la
entrada R.

Por ejemplo para encender un motor con una estacin Start/ Stop, se enciende con
el Start y permanece encendido hasta que se oprima el pulsador de Stop.

7.

FLIP FLOP:

Los flip-flop son dispositivos biestables sincrnicos. En este caso sincrnico significa
que la salida varia de estado nicamente en un instante especfico de una entrada
de disparo denominada reloj (clock).
Un flip-flop disparado por flanco cambia de estado con el flanco positivo (flanco de
subida) o con el flanco negativo (flanco de bajada) del pulso de reloj.
INGENIERIA DE DISEO DE PRODUCTO

13

MICROCONTROLADORES

Flip Flop S-R

Flanco de
Subida

Flanco de
Bajada

Tabla de Verdad
Ck

NO CAMBIA

RESET

SET

ESTADO PROHIBIDO

Flip Flop Tipo D


El flip-flop tipo D resulta muy til cuando se necesita un nico bit de datos (1 0 0) si
se aade un inversor a un flip flop S R obtenemos un flip flop D bsico.

Ck

Existen otros tipos de flip-flop que no se tratarn en el curso tales como: Flip Flop
JK y Tipo T.
Para implementar circuitos con flip flops existen circuitos integrados con diferentes
tipos de flip-flops.
En ste caso se trabajaran con el circuito integrado 74LS74 que es un flip flop tipo
D con entradas de preset y clear; se trabajar como latch S R y como flip flop
tipo D.
Adems se trabajar con el circuito integrado 74LS374, este circuito contiene 8 flip
flop tipo D, es decir un byte con un reloj comn.
A continuacin se muestran los circuitos de aplicacin.

INGENIERIA DE DISEO DE PRODUCTO

14

MICROCONTROLADORES

PRIMER CIRCUITO
Como flip/flop set - reset

1K

1K

Como flip/flop tipo D

74LS 74

1K

INGENIERIA DE DISEO DE PRODUCTO

15

MICROCONTROLADORES

1K

8.

MEMORIAS

Las memorias son unos dispositivos de almacenamiento de datos binarios que


pueden ser de largo plazo o corto plazo.
Como regla general, las memorias almacenan datos en unidades que tienen de uno
a ocho bits. En muchas aplicaciones se tratan los datos en unidades de 8 bits,
denominado byte.
Una memoria esta compuesta por una gran cantidad de latches, formando una
matriz.

Direccin

0
1
2
3
00

Bits

INGENIERIA DE DISEO DE PRODUCTO

16

MICROCONTROLADORES

Cada elemento de almacenamiento en una memoria puede almacenar un 1 un


0 y se le denomina celda. Las memorias estn formadas por matrices de celdas.
Cada bloque de la matriz de memoria representa una celda de almacenamiento y su
situacin se puede especificar mediante una fila y una columna.
La matriz de 4 x 8, se puede entender como una memoria de 32 bits o como una
memoria de 4 bytes.
La posicin de una unidad de datos en una matriz de memoria se denomina
direccin. La direccin de un bit en la matriz se especifica mediante la fila y la
columna en la que se encuentra. La direccin de un byte se especifica nicamente
mediante la fila.
La capacidad de una memoria es el nmero total de unidades de datos que puede
almacenar. En el ejemplo tratado la capacidad total es de 32 bits o 4 bytes.
Puesto que una memoria almacena datos binarios, los datos pueden introducirse en
la memoria y deben poderse recuperar cuando se necesiten. La operacin de
escritura coloca los datos en una posicin especfica de la memoria y la operacin
de lectura extrae los datos de una direccin especifica de memoria. La operacin de
direccionamiento, que forma parte tanto de la operacin de lectura como de
escritura, selecciona la direccin de manera especifica.
8.1

Diferentes Tipos de Memoria

a) Memoria RAM
La memoria RAM (Ramdom-Acces Memory; Memoria de Acceso Rpido), es un tipo
de memoria en la que se tarda lo mismo en acceder a cualquier direccin de
memoria y stas se pueden seleccionar en cualquier orden , tanto en una operacin
de lectura como de escritura. Todas las RAMs poseen la capacidad de lectura y
escritura.
Las memorias RAM reciben el nombre de memoria voltil, ya que pierden los datos
almacenados cuando se desconecta la alimentacin.

b) Memoria ROM
La memoria ROM (Read_Only Memory; Memoria de solo lectura), es un tipo de
memoria en la que los datos se almacenan en forma permanente o semipermanente.
Los datos se pueden leer de una ROM, pero no existe la operacin de escritura
como en las RAM.

c) Memoria EPROM
Son memorias que se programan elctricamente y que se borran con la exposicin
de la memoria a una luz ultravioleta que pasa a travs de la ventana de cuarzo que
tiene en la parte superior del encapsulado.
INGENIERIA DE DISEO DE PRODUCTO

17

MICROCONTROLADORES

d) Memoria EEPROM
Son memorias que se pueden borrar y programar mediante impulsos elctricos. Ya
que se pueden grabar y borrar elctricamente, las EEPROM se pueden reprogramar
dentro del propio circuito final.

c) Memoria FLASH
Las memorias flash son memorias de lectura / escritura de alta densidad (alta
densidad se refiere a gran cantidad de almacenamiento de bits) no voltil, lo que
significa que los datos se pueden almacenar indefinidamente sin necesidad de
alimentacin; En nuestro caso y como ejemplo practico trabajaremos con una
memoria EPROM (2716) que tienen una capacidad de almacenamiento de 1024
bytes.
A continuacin se muestra el diagrama de la memoria 2716, identificando sus pines.

Los pines del A0 al A10 permiten escoger la posicin de memoria que se desee leer
o escribir; los pines O0 al O7 son los datos (1 byte); las lneas OE y CE son
habilitadores que nos permiten leer y escribir en la memoria la lnea; y VPP se utiliza
para grabar la memoria.
El ejemplo que se plantea como aplicacin consiste en mostrar en un display siete
(7) segmentos, en este caso ser un mensaje HOLA.
En la memoria se almacenan los cdigos correspondientes a cada letra, iniciando en
la direccin 0,
hasta la 3. En la direccin 0 se almacenan los cdigos
correspondientes de la letra H, en la direccin 1 la O y as sucesivamente hasta
completar el mensaje.
Se necesitar un contador que vaya cambiando la direccin de memoria en forma
automtica y cuando llegue a 4 comience de nuevo.
INGENIERIA DE DISEO DE PRODUCTO

18

MICROCONTROLADORES

Partiendo de un display de ctodo comn y con la conexin que se muestra en la


siguiente figura, se determina el contenido de cada letra en la memoria.
330

Para determinar el cdigo de la H, se define inicialmente que segmentos del display


se deben encender.

Como se observa, se deben encender los segmentos : b, c, e, f, y g.


Y este cdigo se debe almacenar en la memoria.

O7

O6

O5

O4

O3

O2

O1

O0

El contador 4029 del diagrama me permite cambiar en forma automtica de direccin


y de letra; cuando llega a 4 el contador automticamente comienza en cero
nuevamente, y por lo tanto el mensaje comienza de nuevo.

INGENIERIA DE DISEO DE PRODUCTO

19

MICROCONTROLADORES

INGENIERIA DE DISEO DE PRODUCTO

20

MICROCONTROLADORES

9.

ARITMTICA BINARIA

8.1

Suma Binaria:
Las cuatro reglas bsicas para sumar dgitos binarios son:
0
0
1
1

+
+
+
+

0
1
0
1

=
=
=
=

0
1
1
0

suma
suma
suma
suma

0 con acarreo
1 con acarreo
1 con acarreo
0 con acarreo

0
0
0
1

Ejemplos
100 + 10
100 +
10
110

4+
2
6

10011100 + 00110011
11
10011100 +
00110011
11001111

156 +
51
207

Como ya se sabe en un byte el numero mximo que podemos representar es el 255,


con todos los 8 bits en uno. Cuando el resultado de una suma da un numero mayor
de 255, se genera un bit adicional llamado carry.
Ejemplo:

10101011 + 01101100
1

11 1
10101011 +
01101100
00111111
Bit de acarreo

9.2

Resta Binaria:

La operacin de resta algunas veces podra dar valores negativos, es importante


tener presente ste signo. La resta requiere entender como sacar el complemento
a dos, de un numero.
Obtencin del Complemento a Uno binario:
El Complemento a uno se obtiene cambiando todos los unos por ceros, y todos los
ceros por unos, como se ilustra a continuacin:

INGENIERIA DE DISEO DE PRODUCTO

21

MICROCONTROLADORES

1 0 1 1 0 0 1 0

Numero Binario

0 1 0 0 1 1 0 1

Complemento a uno

Obtencin del Complemento a Dos de un numero Binario:


El Complemento a Dos de un numero Binario se obtiene sumando uno (1) a LSB
(Dgito menos significativo) del complemento a uno.
Ejemplo: Hallar el complemento a dos de:
1 0 1 1 0 0 1 0
0 1 0 0 1 1 0 1
+ 1
0 1 0 0 1 1 1 0

Numero Binario
Complemento a Uno
Complemento a Dos

Para restar dos nmeros binarios se calcula el complemento a dos del sustraendo y
se suman el mimuendo y el complemento a dos del sustraendo. Si genera un bit de
acarreo, el resultado es positivo o cero, sino lo genera, el resultado es negativo.
Ejemplo:

Restar
10111001

01000010

Minuendo

Sustraendo

10111001+
10111110
1 01110111

185 66
119

Numero Positivo

Ejemplo:

Restar
10111001

11100011

10111001+
00011101
11010110

185 227
- 42

Numero Negativo

Para hallar el resultado se calcula el complemento a dos del resultado.


11010110
00101001
+
1
00101010

Complemento a uno
Complemento a dos

- 42
INGENIERIA DE DISEO DE PRODUCTO

22

MICROCONTROLADORES

10.

INTRODUCCION AL MICROCONTROLADOR

Un microcontrolador es un circuito integrado que contiene toda la estructura de un


Microcomputador, es decir, unidad de proceso (CPU), memoria RAM, memoria ROM
y circuitos de entrada/salida.
Es un dispositivo programable que puede ejecutar un sinnmero de tareas y
procesos.
Un Microcontrolador esta compuesto bsicamente por cuatro componentes
principales:
Memoria ROM, EEPROM o EPROM: es la memoria donde se almacena el
programa.
Memoria RAM o SRAM: es la memoria donde se almacenan los datos.
Lneas de Entrada / Salida (I / O): tambin llamada puertos, se utilizan para
conectar elementos externos al microcontrolador.
CPU: controla y ejecuta todas las instrucciones que conforman el programa.
Existen diferentes familias de microcontroladores: Intel, Motorola, Microchip, entre
otras.
En este curso solo se estudiar el microcontrolador PIC16F873, que pertenece a la
familia de Microchip; esta familia de microchip se caracteriza por tener procesador
RISC y arquitectura Harvard caracterizada por la independencia entre la memoria
de cdigo (programa) y la de memoria de datos.

Memoria de
Cdigo (Flash)

Bus de Direccin de
Instrucciones

Bus de Direccin de
Datos

Procesador

Bus de Instrucciones

Memoria de
Datos
(SRAM)

Bus de Datos

El conjunto de instrucciones es de solo 35, por esto se dice es un microcontrolador


de tipo RISC (computador con set de instrucciones reducido)

Organizacin de la memoria de datos RAM

INGENIERIA DE DISEO DE PRODUCTO

23

MICROCONTROLADORES

Mapa de Memoria del PIC16F873

Indirect addr.(*) 00h


TMRO

01h

Indirect addr.(*)

80h

OPTION_REG

81h

PCL

02h

PCL

STATUS

03h

STATUS

82h
83h

FSR

04h

FSR

84h

PORTA

05h

TRISA

85h

PORTB

06h

TRISB

86h

PORTC

07h

87h

PORTD (1)

08h

TRISC
PORTD (1)

PORTE (1)

09h

PORTE (1)

89h

PCLATH
INTCON

0Ah
0Bh

PCLATH

8Ah

INTCON

8Bh

88h

PIR1

0Ch

PIE1

8Ch

PIR2

0Dh

PIE2

8Dh

TMR1L

0Eh

PCON

8Eh

TMR1H

0Fh

8Fh

T1CON

10h

90h

TMR2

11h

SSPCON2

91h

T2CON
SSPBUF

12h
13h

PR2
SSPADD

93h

SSPCON

14h

94h

CCPR1L

15h

95h
96h

92h

CCPR1H

16h

CCP1CON

17h

RCSTA

18h

TXSTA

98h

TXREG
RCREG

19h

SPBRG

1Ah

99h
9Ah

CCPR2L

1Bh

9Bh

CCPR2H

1Ch

9Ch

CCP2CON

1Dh

97h

9Dh

1Eh

ADRESL

9Eh

ADCON0

1Fh

ADCON1

9Fh

Registros de
Propsito
General
96 Bytes

20h

Registros de
Propsito
General
80 Bytes

A0h

ADRESH

EFh

7Fh
Banco 0

Mapeados con
70h-7Fh

F0h
FFh

Banco1

Posiciones de memoria no implementadas, ledos como O


No es un registro fsico.

INGENIERIA DE DISEO DE PRODUCTO

24

MICROCONTROLADORES

Para seleccionar el banco al que se desea acceder en la RAM se emplean los bits 6
y 5 del registro de estado (status)
A partir de la posicin de memoria 20H estn los registros de propsito general,
donde se almacenan datos temporales durante la ejecucin del programa. Todos
estos registros son de 8 bits, por lo tanto el numero mximo que podemos almacenar
es 255.
Existe adems en el microcontrolador el registro W de 8 bits, es un registro de
trabajo y la mayor parte de las instrucciones del microcontrolador lo involucran.

Descripcin de los Pines

OSC1 / CLK IN (9): Entrada del cristal de cuarzo o del oscilador externo.
OSC2 / CLK OUT (10): Salida del cristal de cuarzo.
VSS (8 - 19): Conexin a tierra (GND)
VDD (20): Conexin a positivo (+5V)
MCLR# / VPP (1): Entrada de Reset o entrada del voltaje de programacin.
Si no se va a utilizar se debe poner a +5V.

INGENIERIA DE DISEO DE PRODUCTO

25

MICROCONTROLADORES

Puerto A : El puerto A del microcontrolador esta compuesto por 6 lneas de


entrada / salida que adems nos permiten trabajar con seales
anlogas.
RA0 / AN0 (2): puede funcionar como lnea digital.
RA1 / AN1 (3): igual que la RA0 / AN0.
RA2 (4): lnea de entrada / salida digital.
RA3 (5): lnea de entrada / salida digital.
RA4 (6): lnea de entrada / salida digital.
Cuando se configura como salida es de colector abierto.
RA5 (7): lnea de entrada / salida digital.

Puerto B: Este puerto esta compuesto por 8 lneas que se pueden configurar
como entrada / salida digital y para interrupciones externas.
RB0 (21): lnea de entrada / salida digital.
RB1 (22): lnea de entrada / salida digital.
RB2 (23): lnea de entrada / salida digital.
RB3 (24): lnea de entrada / salida digital.
RB4 (25): lnea de entrada / salida digital.
RB5 (26): lnea de entrada / salida digital.
RB6 (27): lnea de entrada / salida digital.
RB7 (28): lnea de entrada / salida digital.

Puerto C: Este puerto esta compuesto por 8 lneas que se pueden configurar
como entrada / salida digitales, adems sirve para trabajar con los
temporizadores del microcontrolador y la comunicacin serial.
RC0 (11): lnea de entrada / salida digital.
RC0 (12): lnea de entrada / salida digital.
RC0 (13): lnea de entrada / salida digital.
RC0 (14): lnea de entrada / salida digital.
RC0 (15): lnea de entrada / salida digital.
RC0 (16): lnea de entrada / salida digital.
RC0 (17): lnea de entrada / salida digital.
RC0 (18): lnea de entrada / salida digital.
INGENIERIA DE DISEO DE PRODUCTO

26

MICROCONTROLADORES

NOTA:
El cristal determina la velocidad de ejecucin del programa.
Para ejecutar un programa se necesita garantizar las siguientes conexiones.

11.

EXPLICACIN DEL REGISTRO STATUS

El Registro de estado es el registro mas utilizado en el microcontrolador, ubicado en


la posicin 03 del banco 1 de memoria y en la 83H en el banco 2 de memoria.
Su estructura es la siguiente:
IRP

RP1

RP0

TO#

PD#

DC

Los tres bits de menos peso son los sealizadores de ciertas condiciones en las
operaciones lgicas aritmticas.
Z: Sealizador de cero: Se pone a 1 automticamente cuando el resultado de una
operacin lgica o aritmtica da cero.
C: Acarreo/llevada en el bit 8: Se pone a 1 automticamente cuando existe acarreo
en el bit de mas peso en las instrucciones de suma. Tambin acta como
sealizador de llevada en las instrucciones de resta, pero en este caso la
correspondencia es inversa. Es si vale 0 hay llevada.
DC: Acarreo/llevada en el bit 4: Funciona igual que el sealizador C, pero en el
cuarto bit. Es muy til en las operaciones con nmeros expresados en BCD.

INGENIERIA DE DISEO DE PRODUCTO

27

MICROCONTROLADORES

PD#: Se activa a 0 al ejecutarse la instruccin SLEEP (Modo reposo). Se pone a


1 automticamente tras la conexin de la alimentacin, o bien al ejecutarse la
instruccin CLRWDT (Refresco del perro guardin)
TO#: Se activa a nivel bajo al desbordarse el perro guardin. Toma el valor 1 tras
la conexin de la fuente de alimentacin o al ejecutarse la instruccin CLRWDT o
SLEEP.
Finalmente los tres bits de mas peso del registro de estado se emplean para
seleccionar el banco de RAM al que se desea acceder.
Se utilizan los bits RP1 y RP0 de acuerdo con la siguiente codificacin:
RP1

RP0

Banco Seleccionado

0
0
1
1

0
1
0
1

Banco 0
Banco 1
Banco 2
Banco 3

En el caso del PIC16F873 solo se cuenta con dos bancos de memoria el banco 0 y
el banco 1.
El bit IRP se usa concatenado con el bit de mas peso del registro FSR para elegir el
banco de RAM en el direccionamiento indirecto.
IRP Seleccin del banco de RAM en direccionamiento indirecto.
0: Bancos 0 y 1
1: Bancos 2 y 3
En los primeros ejemplos que haremos solo usaremos los bits Z (cero) y C (carry)
del registro de estado.

INGENIERIA DE DISEO DE PRODUCTO

28

MICROCONTROLADORES

Resumen de Instrucciones del Microcontrolador Pic 16f873


NEM
NICOS

PARMETROS

OPERACIN

CICLOS

SEALIZADORES

INSTRUCCIONES QUE MANEJAN REGISTRO


ADDWF

f,d

SUMA de W con f

C,DC,Z

ANDWF

f,d

AND de W con f

CLRF

BORRADO de f

CLRW

a,e

BORRADO de W

COMF

f,d

COMPLEMENTO de f

DECF

f,d

DECREMENTO de f

INCF

f,d

INCREMENTO de f

IORWF

f,d

OR de W con f

MOVIMIENTO de f

MOVIMIENTO de W a f

MOVF

f,d

MOVWF

NOP

ae

NO OPERACIN

RLF

f,d

ROTACION de f a izquierda con carry

RRF

f,d

ROTACION de f a derecha con carry

SUBWF

f,d

C,DC,Z

SWAPF

f,d

XORWF

f,d

RESTA de W a f (f - W)
INTERCAMBIO de 4 bits de +peso por los 4
de peso.
OR exclusiva de W con f

1
1

INSTRUCCIONES QUE MANEJAN BITS


BCF

f,b

PUESTA a 0 del bit b de f

BSF

f,b

PUESTA a 1 del bit b de f

INSTRUCCIONES DE <SALTO>
BTFSC

f,b

PRUEBA del bit b de f; SALTA si es 0

1 (2)

BTFSS

f,b

PRUEBA del bit b de f; SALTA si es 1

1 (2)

DECFSZ

f,d

DECREMENTO de f; SALTA si es 0

1 (2)

INCFSZ

f,d

INCREMENTO de f; SALTA si es 0

1 (2)

INSTRUCCIONES QUE MANEJAN OPERANDOS INMEDIATOS


ADDLW
ANDLW
IORLW
MOVLW
SUBLW
XORLW

k
k
k
k
k
k

SUMA de literal con W


AND de literal con W
OR de literal con W
MOVIMIENTO de literal a W
RESTA W de literal (k-w)
OR exclusiva de literal con W

1
1
1
1
1
1

C, DC,Z
Z
Z
C,DC,Z
Z

INSTRUCCIONES DE CONTROL Y ESPECIALES


CALL
CLRWDT
GOTO
RETFIE
RETLW
RETURN
SLEEP

k
K
k

LLAMADA a subrrutina
BORRADO del WATHDOG
SALTO a una direccin
RETORNO de interrupcin
RETORNO devolviendo literal en W
RETORNO de subrrutina
PUESTA del microprocesador en reposo

INGENIERIA DE DISEO DE PRODUCTO

2
1
2
2
2
2
1

#TO, #PD

#TO,#PD

29

MICROCONTROLADORES

12.

SINTAXIS DE LAS INSTRUCCIONES

Todas las instrucciones del microcontrolador tienen una sintaxis, que se indica en la
tabla de instrucciones:
1) MOVLW K: carga en W el valor del literal K.
K: es una constante que puede tomar el valores de 0 a 255, ya que es de 8
bits.
Las constantes se pueden indicar en 3 sistemas de numeracin diferentes:
MOVLW
MOVLW
MOVLW

.255
b11111111
0FFH

carga 255 en W (Sistema Decimal)


carga 255 en W (Sistema Binario)
carga 255 en W (Sistema Hexadecimal)

2) CLRF F: pone en cero el registro F.


El registro F es cualquier posicin de memoria RAM del microcontrolador,
Incluyendo los registros de propsito general. (los que empiezan a partir de la
posicin 20H y son declarados por el usuario).
Ejemplo:
CLRF PORTB: pone en cero todos los bits del puerto B.
3) DECF f,d: decrementa el registro f
f: es cualquier posicin de memoria RAM
d: es el destino del resultado. Solo hay dos posibles destinos: el registro W o
el registro f.
DECF contador, F : Decrementa el contador y almacena el resultado en el
mismo contador.
DECF contador, W : Decrementa el contador y almacena el resultado en el
registro w.
Tambin se puede especificar el destino con 0 o 1 donde 0 indica
destino w y 1 destino F.
DECF contador, 1 : Decrementa el contador y almacena el resultado en el
mismo contador.
DECF contador, 0 : Decrementa el contador y almacena el resultado en el
registro w.
4) BCF f,b : pone en 0 el bit b del registro f.
f: es cualquier posicin de memoria RAM.
b: es el bit especfico del registro f. Este bit puede estar entre 0 y 7.
Ejemplo:
BCF PORTB,0 : pone en 0 el bit 0 del puerto B (RB0).
.
Nota: solo se incluyen algunas instrucciones, sin embargo todas las
instrucciones cumplen esta sintaxis
INGENIERIA DE DISEO DE PRODUCTO

30

MICROCONTROLADORES

13.

DIRECTIVAS PARA HACER UN PROGRAMA EN MICROCONTROLADOR


Etiqueta

Operacin

Operandos

Inicio

movlw

Comentarios
; Carga el circuito w

Etiquetas:
Son nombres simblicos que se asignan a una direccin de memoria. Por ejemplo,
cuando se escribe la palabra inicio, se le est diciendo al ensamblador que esa es la
direccin de memoria correspondiente donde quedar grabada la primera
instruccin.
Operacin:
Es la instruccin del microcontrolador que se ejecuta.
Operandos:
Son los registros o cantidades sobre los que se realizan las operaciones o
instrucciones. Puede ser un registro de la memoria de datos o un valor constante
que comnmente se conoce como literal.
Cuando se utilizan dos operandos, el primero es el operando fuente y el segundo es
el operando destino.
Comentario:
El ensamblador ignora esta lnea en el momento de generar el cdigo objeto, pero
para la persona que hace el programa es muy importante ya que ah puede escribir
la idea o la explicacin de lo que esta haciendo en esa lnea del programa.
Punto y coma (;):
Es un delimitador. Hace que el ensamblador ignore la linea de texto que se
encuentra a la derecha de l. Se usa para escribir comentarios acerca de la
instruccin particular que se tiene y de la accin que esta ejecutando el
microcontrolador.
Clases de lneas en un programa:
Se pueden usar cuatro tipos diferentes de lineas, la de igualdad (EQU), la de origen
(ORG), la de instruccin normal y la de final (END).
Igualdades:
Se utilizan para asignar un nombre o smbolo a un valor especifico (Hexadecimal).
Por ejemplo cuando se hace:
PORT B
EQU
06
Se est asignando el nombre PORTB al valor 06, que corresponde a la direccin
fsica del puerto B.
INGENIERIA DE DISEO DE PRODUCTO

31

MICROCONTROLADORES

Tambin se puede usar para asignar nombres a un numero cualquiera, por ejemplo:
EQU

CONTADOR

09

Origen:
ORG es una directiva del ensamblador que se usa para definir el sitio (de la
memoria) donde se desea escribir alguna porcin de programa en particular.
ORG

En este caso se indica que las instrucciones que vienen a continuacin quedarn a
partir de la direccin de memoria 00 en el microcontrolador.

Final:
Se usa para decirle al ensamblador que el programa ha terminado; se usa la
directiva END.
Encabezado del programa
list

P = 16F873
R = Hex

; indica el tipo de procesador


; sistema de numeracin hexadecimal

Include <PIC16F873.INC> ; se incluye la definicin de los registros


internos en la librera.
Ejemplo:
Include <P16F873.INC>
LIST
P= 16F873, R=Hex
OPERANDO 1 EQU
OPERANDO 2 EQU
RESULTADO EQU
ORG
MOVLW
MOVWF
MOVLW
MOVWF
MOVF
ADDWF
MOVWF

20
21
22

; DEFINE LA POSICIN DEL OPERADO 1


; DEFINE LA POSICIN DEL OPERADO 2
; DEFINE LA POSICIN DEL RESULTADO

0
05
OPERANDO1
02
OPERANDO2
OPERANDO1
OPERANDO2,W
RESULTADO

END

INGENIERIA DE DISEO DE PRODUCTO

;w=5
; w = OPERANDO1
;w=2
; w = OPERANDO2
; w = OPERANDO1
; w = w+OPERANDO2
; w = RESULTADO
; DIRECTIVA DEL FIN DE PROGRAMA

32

MICROCONTROLADORES

14.

EJEMPLOS SENCILLOS CON DIAGRAMAS DE FLUJO

Ejemplo 1: Como hacer que un programa se ejecute N veces


Cuando se quiere que un programa se repita N veces se debe utilizar un registro de
memoria RAM que funciona como contador en forma descendente, este contador se
carga inicialmente con el numero de veces que queremos que se repita el programa.
Include<P16F873.INC>
LIST P=16F873, R=HEX
CONTADOR

EQU

20

LOOP

ORG
MOVLW
MOVWF
NOP
NOP
NOP
DECFSZ
GOTO
END

0
5
CONTADOR

; El Programa se repite 5 veces


; Carga contador con 5
; Programa
; Programa
; programa
CONTADOR,F : Decrementa contador e ignora la siguiente
; instruccin si el contador es cero
LOOP
; salta a LOOP
; Fin del programa

Ejemplo 2: Como comparar si dos nmeros son iguales


Para comparar si dos nmeros son iguales se utiliza la instruccin XORWF f,d (XOR
entre W y el registro f), si los dos nmeros son iguales el resultado de la XORWF
ser cero y la bandera Z del registro de estado se pone en 1
Include<P16F873.INC>
LIST P=16F873, R=HEX
NUMERO 1

EQU

20

ORG
MOVLW
MOVWF
MOVLW
XORWF
BTFSS

0
.10
NUMERO1
.15
NUMERO1,W
STATUS,Z

GOTO
GOTO

NOIGUAL
IGUAL

INGENIERIA DE DISEO DE PRODUCTO

; Carga W con 15
; Lleva 15 a NUMERO1
; Carga W con 15
; Realiza una XOR entre W y NUMERO1
; Pregunta si el bit Z del registro de
; estado esta en uno
; Salta a NOIGUAL
; Salta a IGUAL

33

STATUS,Z
LOOP
INICIO

BTFSS

GOTO

GOTO

END

CONTADOR,W ; XOR entre W y contador.

XORWF

;si Z=1 salta una instruccin.

.15

MOVLW

;lleva W al contador

CONTADOR,F ;incrementa contador

CONTADOR

MOVWF

;carga W con o

INCF

ORG

MOVLW

20

EQU

LIST P=16F873, R=HEX

INCLUDE <P16F873,INC>

Programa

INGENIERIA DE DISEO DE PRODUCTO

LOOP

INICIO

CONTADOR

EJEMPLO 3

SI

Contador=15

34

NO

INCREMENTAR CONTADOR

CONTADOR=0

INICIO

Diagrama de flujo

Hacer un programa en microcontrolador que me genere los nmeros de 0 a 15, y cuando


llegue a 15, nuevamente comience el conteo desde cero.

MICROCONTROLADORES

LOOP

GOTO
END

MULTIPLICADOR,F

DECFSZ

RESULTADO

MOVWF
RESULTADO,F

.0

MOVLW

ADDWF

MULTIPLICADOR

MOVWF

MULTIPLICANDO,W

.Y

MOVLW

MOVF

MULTIPLICANDO

MOVWF

INGENIERIA DE DISEO DE PRODUCTO

LOOP

.X

22

MOVLW

EQU

RESULTADO

21

EQU

MULTIPLICADOR

20

ORG

EQU

MULTIPLICANDO

LIST P=16F873, R=HEX

INCLUDE <P16F873.INC>

Programa

NO

EN D

SI

M ultiplicador=0

35

D ecrem enta m ultiplicador

R esultado=
resultado+m ultiplicando

Carga resultado=0

C argar m ultiplicador

C argar m ultiplicando

M U LTIPLIC AC I N

Diagrama de flujo

MULTIPLICACION DE DOS NUMEROS ENTEROS

EJEMPLO 4

MICROCONTROLADORES

20
21
22
23

RESULTADO,F
LOOP

0
.X
DIVIDENDO
.Y
DIVISOR
.0
RESULTADO
DIVIDENDO,W
RESIDUO
DIVISOR,W
RESIDUO,F
.0
RESIDUO,W
STATUS,Z

EQU
EQU
EQU
EQU

INGENIERIA DE DISEO DE PRODUCTO

LOOP

ORG
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVF
MOVWF
MOVF
SUBWF
MOVLW
XORWF
BTFSC
RETURN
INCFSZ
GOTO
END

DIVIDENDO
DIVISOR
RESULTADO
RESIDUO

INCLUDE <P16F873.INC>
LIST P=16F873, R=HEX

Programa

Incrementa
resultado

NO

END

SI

Residuo = 0

36

Residuo =
residuo-dividendo

Residuo=dividendo

Carga resultado=0

Cargar divisor

Cargar dividendo

DIVISIN

Diagrama de flujo

DIVISION DE DOS NUMEROS ENTEROS Y RESULTADO NUMERO ENTERO

EJEMPLO 5

MICROCONTROLADORES

MICROCONTROLADORES

15.

CONFIGURACIN DE LOS PUERTOS

Los puertos del microcontrolador se pueden configurar cada patica como entrada o
salida digital.
Cada lnea de cada puerto representa un bit, por ejemplo el puerto B:
RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

Para denotar un bit en particular, se puede decir


Portb, 6

el bit 6 del puerto b

Pasos para configurar el puerto b (PORTB) y el puerto c (PORTC):

1. Cargar en w el valor para la configuracin del puerto, teniendo en cuenta que


para configurar una lnea como entrada se pone el bit en 1 y si se quiere
configurar como salida se pone el bit correspondiente en 0.
Ejemplo: configurar el puerto b de la siguiente manera:

RB0

RB1

RB2

RB3

RB4

RB5

RB6

RB7

Entrada

Salida

El valor que se debe cargar en w es 0 0 0 0 1 1 1 1 y la instruccin es:


MOVLW b00001111
2. Digitar la instruccin TRIS y el puerto. Si nos referimos al puerto b, la instruccin
ser TRIS PORTB

INGENIERIA DE DISEO DE PRODUCTO

37

MICROCONTROLADORES

La configuracin completa es:


MOVLW b00001111
TRIS PORTB

16.

EJEMPLO SENCILLOS CON ENTRADA Y SALIDA DE DATOS

Este ejemplo muestra una aplicacin muy simple y bsica de un microcontrolador la


cual consiste en que, s cualquier entrada (RB0) se pone en uno, la salida (RC2) se
pone en uno tambin.
Configurar Puertos

Port B = 0

Rc 2 = 0 ?

Si

No

RB 0 = 0

RB 0 = 1

Programa:
Include
LIST

LOOP

H1

<P16F873. INC>
P = 16873 = HEX

;LA INSTRUCCIN INCLUDE ME CARGA UN ARCHIVO


DONDE SE ENCUENTRAN TODOS LOS REGISTROS
CON SUS RESPECTIVAS DIRECCIONES.

ORG

;ESTO INDICA QUE EL PROGRAMA COMIENZA EN LA


DIRECCIN CERO.

MOVLW
TRIS
MOVLW
TRIS
CLRF
BTFSS
GOTO
BSF
GOTO
BCF
GOTO
END

0
PORTB
.255
PORTC
PORTB
PORTC,2
H1
PORTB,0
LOOP
PORTB,0
LOOP

;CONFIGURAR EL PUERTO B TODO COMO SALIDA.


;CONFIGURAR EL PUERTO C TODO COMO ENTRADA.
;PONE EN 0 EL PUERTO B.
;SI EL BIT2 DEL PUERTO C ESTA EN 0?.
;SALTA A H1.
;ENTONCES COLOQUE LA SALIDA RB0 EN 1.
;SALTA A LOOP.
;SI NO ENTONCES COLOQUE EN 0 LA SALIDA RB0.
;FIN DEL PROGRAMA.

INGENIERIA DE DISEO DE PRODUCTO

38

EJEMPLO 6

EQU
0
B'00000001
PORTC
B'00000000
PORTB
.0
CONTADOR
PORTB
PORTC,0
ASCENDENTE
CONTADOR,W
STATUS,Z
DESCENDENTE
CONTADOR,1
CONTADOR,0
PORTB
PUERTO
.15
CONTADOR
PUERTO
.15
CONTADOR,W
STATUS,Z
INICIO
CONTADOR,1
CONTADOR,W
PORTB
PUERTO

20

;carga W con 00000001


;configurar puertoB RCO como entrada
; carga W con 00000000
;configurar puertoB como salida
;carga W con 0
;lleva 0 de W a contador
;lleva 0 de W a puertoB
;pregunta si RC0=1
;si RC0=0, salta a ascendente
:si RC0=1, lleva contador a W
;pregunta por Z=0
;salta a descendente
;si Z=1,decrementa contador
;carga W con contador
;lleva contador de W a puertoB
;salta a puerto
;carga W con .15
;lleva .15 de W a contador
;salta a puerto
;carga W con .15
;OR exclusiva de W y contador
;pregunta por Z=0
;salta a inicio
;Z=1,incrementa contador
;lleva contador a W
;lleva contador de W a puertoB
;salta a puerto

<P16F873.INC>
P=16F873,
R=HEX

INGENIERIA DE DISEO DE PRODUCTO

ORG
MOVLW
TRIS
MOVLW
TRIS
INICIO
MOVLW
MOVWF
MOVWF
PUERTO
BTFSC
GOTO
MOVF
BTFSC
GOTO
DECF
MOVF
MOVWF
GOTO
DESCENDENTE MOVLW
MOVWF
GOTO
ASCENDENTE MOVLW
XORWF
BTFSC
GOTO
INCF
MOVF
MOVWF
GOTO
END

CONTADOR

INCLUDE
LIST

Programa

SI

Inc cont

NO

Cont=15

SI

SI

39

Dec cont

NO

Cont=0

NO

Cont=1

RC0=1

CONTADOR=0

INICI

Diagrama de flujo

Un contador de nmeros de 0 a 15 en forma ascendente o descendente dependiendo de la entrada de RC0.


Si RC0=1 contador ascendente.
RC0=0 contador descendente.

MICROCONTROLADORES

MICROCONTROLADORES

17.

RETARDOS

Los retardos son muy utilizados en el control de procesos con microcontrolador.


Cuando se trabaja el microcontrolador a 4 MHz, cada ciclo de reloj dura
1 s = 1X10-6 segundos.
La mayora de instrucciones se demora 1 ciclo de reloj en ejecutarse y algunas se
demoran dos ciclos de reloj.
En la informacin de las instrucciones de los microcontroladores se indican los ciclos
de reloj que se demora cada instruccin.
Como primer ejemplo, tenemos un contador que se carga inicialmente con 15 y se
va decrementando hasta llegar a cero.
INICIO

Contador = 15

Decremento de
Contador

No

Contador = 0
Si

FIN

Programa:
Include < P16F873. INC>
LIST P=16F873, R = HEX
CONTADOR

EQU

20
CICLOS DE RELOJ

LOOP

ORG
0
MOVLW
.15 _______ 1
MOVWF CONTADOR __ 1
DECFSZ CONTADOR ___ 1
GOTO LOOP __________ 2
END

45 + 2 = 47
3 x 15 = 45

Para calcular el tiempo que se demora el programa en ejecutarse, primero se debe


tener claro cuantos ciclo de reloj se demora cada instruccin.
Despus se observa si dentro del programa existen saltos repetitivos, en el ejemplo
el programa decrementa el contador y salta si no es cero a LOOP, donde
nuevamente decrementa el contador. La siguiente pregunta es cuantas veces salta a

INGENIERIA DE DISEO DE PRODUCTO

40

MICROCONTROLADORES

LOOP, en este caso lo hace 15 veces, ya que con este valor se carga inicialmente el
contador, se puede ver que las instrucciones: DECFSZ CONTADOR,F y GOTO
LOOP se ejecutan 15 veces y se demoran 3 ciclos de reloj, por lo tanto, 3 (ciclos de
reloj) x 15 (veces que se repite), nos da como resultado 45, adems las
instrucciones MOVLW .15 y MOVWF CONTADOR solo se ejecuta una vez.
En total el tiempo de ejecucin ser 45 + 2 = 47 ciclos de reloj, es decir 47s.
El numero mximo con el que se puede cargar un contador (registro de memoria) es
255 ya que cada posicin de memoria es de 8 bits.
Para calcular el tiempo total de ejecucin del programa se utiliza la formula:
T = 3 x N +2, donde N es el valor inicial que se le asigna al contador, esto significa
que el retardo mximo que se puede conseguir con un solo registro, es:
3 x 255 + 2 = 767s.
Cuando se quiere retardos de tiempos mayores se utilizan 2 o 3 contadores
(registros).
Ejemplo: se quiere hacer un retardo de 40 ms (milisegundos) = 40.000 s
(microsegundos) siempre se debe pasar el tiempo a microsegundos.
Para generar retardos mayores a 767 microsegundos utilizamos dos contadores y el
diagrama de flujo en el siguiente:
INICIO

CONTADOR 1 = M

CONTADOR 2 = N
DECREMENTA
CONTADOR 2

No

CONTADOR 2 = 0

DECREMENTA
CONTADOR 1

No

CONTADOR 1 = 0

FIN
INGENIERIA DE DISEO DE PRODUCTO

41

MICROCONTROLADORES

Como se puede ver en el diagrama de flujo lo que se hace es decrementar el


CONTADOR 2 N veces, y el CONTADOR 1 nos indica cuantas veces debemos
repetir esto.
El programa en microcontrolador ser el siguiente:
Programa:
Include < P16F873. INC>
LIST P=16F873, R = HEX
CONTADOR 1
CONTADOR 2

LOOP1
LOOP

EQU
EQU

20
21

ORG
MOVLW
MOVWF
MOVLW
MOVWF
DECFS2
GOTO
DECFS2
GOTO
END

O
M
CONTADOR 1
N
CONTADOR 2
T1=3x N+2
CONTADOR 2, F
LOOP
CONTADOR 1, F ___________________1
LOOP, ___________________________2

T 2 = (T 1 + 3) M

El tipo T1 es equivalente al primer ejemplo y la formula es la misma:


T1 = 3 x N + 2.
Suponiendo que N = 255, T1 = 767s. El retardo que se esta calculando es de 40ms
= 40000s.
Para calcular el tiempo 2 T2 = (T1 + 3) M . El tiempo T2 debe ser
aproximadamente 40000s.
Para calcular M, sabiendo que T1 + 3 = 770 s se debe dividir 40000/700 = 51.94
52 M = 52
T2 = (T1 + 3) 52 = (767 + 3) 52 = 40040 s
Y el tiempo total del retardo es T2 + 2 = 40040 + 2 = 40042s
El retardo mximo que se puede tener con dos contadores ser:
T2 = (770) x 255 = 196350
Tiempo Total: T2 + 2 = 196352
Si se quieren retardos mayores a 196352 es necesario utilizar 3 contadores.

INGENIERIA DE DISEO DE PRODUCTO

42

MICROCONTROLADORES

Diagrama de Flujo
Inicio

Contador 1 = L

Contador 2 = M

Contador 3 = N
Decrementar
contador 3

No

Contador 3 = 0
Si

Decrementar
contador 2

NO

Contador 2 = 0

Si

Decrementar
contador 1

NO

Contador 1 = 0
Si

FIN

Suponiendo que M y N sean 255 y partiendo de los clculos del ejemplo anterior nos
da 196352 s.
Para calcular T3 se aplica la formula:
T3 = (T2 + 2 + 3) x L
T3 = (169350 + 2 + 3) x L
T3 = (196355) x L

INGENIERIA DE DISEO DE PRODUCTO

43

MICROCONTROLADORES

Como se quiere un (1) segundo = 1000000 s, para calcular L solo dividimos


1000000 = 5.09 5
195355
T3 = 196355 x 5 = 981775
El tiempo total es T3 + 2 = 981775 + 2 = 981777
Si se cambian los valores de L, M y N lgicamente el retardo cambia, sin embargo se
siguen aplicando las mismas formulas.

18.

MANEJO DE SUBRUTINAS

Las subrutinas son subprogramas que se llaman varias veces en un programa, por
ejemplo los retardos.
Para llamar una subrutina se utiliza la instruccin CALL N, donde N es el nombre de
la subrutina. El programa salta a la subrutina y cuando termina de ejecutarla
continua con la siguiente instruccin del programa que llamo la subrutina.

Programa Principal
.
.
.
LOOP BSF PORTB, 0
CALL RETARDO
BCF PORTB, 0
CALL RETARDO

Subrutina

RETARDO

.
.
.
.
.
.
RETURN

GOTO LOOP

Toda subrutina termina con la instruccin RETURN o RETLW N, donde N es


cualquier valor entre 0 y 255, en este caso al retornar, W se carga con ese valor.
Existe una diferencia entre CALL N (llamada subrutina) y GOTO N, en la primera
cuando se termina de ejecutar retorna a la siguiente instruccin del programa que lo
llamo a diferencia de la segunda (GOTO N) que puede saltar a otra parte del
programa.
Cada vez que se llama una subrutina, se almacena en el Stack-Pointer, la direccin
de retorno, es decir la direccin a donde debe regresar, cuando termina la subrutina.

INGENIERIA DE DISEO DE PRODUCTO

44

MICROCONTROLADORES

19.

EJEMPLO UTILIZANDO RETARDOS

Este programa consiste en que por medio de un ciclo repetitivo se encienda y se


apague un led a una frecuencia constante; en este programa es necesario el empleo
de una subrutina (programa alterno) que genere lo que se llama un retardo
(1segundo aproximadamente) ya que si ste no existe, el led se prendera y se
apagara tan rpido que se vera siempre encendido, debido a la velocidad a la que
trabaja el Microcontrolador.

Configurar Puertos

RB 0 = 0

Retardo 1 segundo

RB 0 = 1

Retardo 1 segundo

INGENIERIA DE DISEO DE PRODUCTO

45

MICROCONTROLADORES

Programa:
Include <P16F873.INC>
LIST P=16F873, R=HEX
REG1
REG2
REG3

LOOP

RETARDO
REP3
REP2
REP1

EQU
EQU
EQU

20
21
22

ORG
MVLW
TRIS
BSF
CALL
BCF
CALL
GOTO

0
0
PORTB
PORTB,0
RETARDO
PORTB,0
RETARDO
LOOP

MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
DECFSZ
GOTO
DECFSZ
GOTO
DECFSZ
GOTO
RETURN

.5
REG1
.255
REG2
.255
REG3
REG3,F
REP1
REG2,F
REP2
REG3,F
REP3

END

20.

;CONFIGURAR EL PUERTO B TODO COMO SALIDA.


;PONE EN UNO EL BIT 0 DEL PUERTO B.
;LLAMA UN RETARDO DE UN SEGUNDO.
;PONE EN 0 EL BIT 0 DEL PUERTO B.
;LLAMAR RETARDO DE UN SEGUNDO.
;SALTA A LOOP.
;RETARDO DE UN SEGUNDO

;ESTA COMANDO ME DEVUELVE A UN PASO


MS DE DONDE EL RETARDO FUE LLAMADO
;FIN DEL PROGRAMA.

GENERACIN DE TONOS CON MICROCONTROLADORES

Para generar diferentes tonos con el microcontrolador se debe conocer la frecuencia


del tono, por ejemplo si queremos generar un tono de 1 KHz, entonces:
F= 1 KHz, por lo tanto el periodo es
T = 1/F = 1/ 1000 = 0,001 s = 1000 s

Se puede notar que el periodo esta compuesto por el tiempo en que la salida
permanece en alto 1 y en bajo 0.
En el caso de la frecuencia de 1KHz nos da un periodo de 1000 s que se divide en
dos, por lo tanto T/2 = 500 s

INGENIERIA DE DISEO DE PRODUCTO

46

MICROCONTROLADORES

El diagrama del circuito podra ser el siguiente:

Inicio

Activar Salida

Call retardo 500s

Desactivar Salida

Call reardo 500s

Programa:
Include <P16F873.INC>
LIST
P= 16F873, R=Hex
CONTADOR

LOOP

RETARDO
LOOP1

EQU

20

ORG
MOVLW

0
B11111110

TRIS
BSF
CALL
BCF
CALL
GOTO

PORTB
PORTB,0
RETARDO
PORTB,0
RETARDO
LOOP

MOVLW
MOVWF
DECFSZ
GOTO
RETURN
END

.166
;RETARDO DE 500s.
CONTADOR
CONTADOR,F
LOOP 1

INGENIERIA DE DISEO DE PRODUCTO

;CONFIGURA EL PORTB COMO ENTRADA


EXCEPTO RB0
;PONE EN 1 RB0
;LLAMA RETARDO DE 500s.
;PONE EN 0 RB0.
;LLAMA RETARDO DE 500s.
;SALTA A LOOP

;FIN DEL PROGRAMA

47

MICROCONTROLADORES

21.

MOTORES PASO A PASO

Los motores paso a paso son un tipo especial de motores que permiten el
movimiento de su eje en ngulos muy precisos y por pasos, tanto a la izquierda
como a la derecha. Aplicando a ellos una secuencia de pulsos.
Cada paso tiene un ngulo muy preciso, determinado por la construccin del motor
lo que permite realizar movimientos exactos.
Son utilizados para generar movimientos precisos, por ejemplo en robots, en equipos
con movimientos X-Y, entre otros.
Existen dos tipos de motores paso a paso:
1. Motores Unipolares: este tipo de motor tienen dos bobinas en cada uno de los
estatores y cada par de bobinas tienen un punto comn, es decir, tiene seis
terminales.

2. Motores Bipolares: este tipo de motor tiene dos bobinas y no poseen puntos
comn, es decir tiene cuatro terminales.

Para controlar este tipo de motor paso a paso bipolar es necesario una fuente con
polaridad positiva y negativa.

INGENIERIA DE DISEO DE PRODUCTO

48

MICROCONTROLADORES

CONTROL DEL MOTOR PASO A PASO UNIPOLAR

Para controlar el motor paso a paso se debe conocer su secuencia y sus terminales,
de tal manera que el circuito o el programa en microcontrolador genere la secuencia
lgica de cuatro bits que energiza una bobina del motor en el orden correcto.

Para que el motor gire a la derecha se aplica la secuencia de pulsos en un sentido y


para girar a la izquierda simplemente se invierte la secuencia. Por ejemplo
GIRO A LA DERECHA
PASOS Q1
ON
1
OFF
2
OFF
3
OFF
4
ON
1

GIRO A LA IZQUIERDA

Q2

Q3

Q4

OFF
ON
OFF
OFF
OFF

OFF
OFF
ON
OFF
OFF

OFF
OFF
OFF
ON
OFF

PASOS
1
2
3
4
1

Q1

Q2

Q3

Q4

OFF
OFF
OFF
ON
OFF

OFF
OFF
ON
OFF
OFF

OFF
ON
OFF
OFF
OFF

ON
OFF
OFF
OFF
ON

Las seales que habilita cada transistor pueden venir desde un circuito integrado o
desde el microcontrolador, el transistor lleva el negativo a la bobina del motor, en el
momento en que es habilitado.
La velocidad del motor depende de la frecuencia con que se enven los pulsos a
cada transistor.
Existen otras formas de controlar un motor paso a paso para generar ms torque o
hacerlo ms preciso, en el prximo ejemplo se ver una nueva forma.

22.

EJEMPLO DE MANEJO DEL MOTOR PASO A PASO

En este caso se utilizar un motor de cuatro bobinas, la secuencia utilizada consiste


en alternar la posicin de dos unos a lo largo de las bobinas (a,b,c,d).

INGENIERIA DE DISEO DE PRODUCTO

49

MICROCONTROLADORES

Inicio

ABCD
1 1 0 0
0 1 1 0
0 0 1 1
1 0 0 1
1 1 0 0

12
6
3
9
12

INGENIERIA DE DISEO DE PRODUCTO

Sentido horario

No

Si

PortB=00001001

PortB=00000011

Retardo 100ms

Retardo 100ms

PortB=00001100

PortB=00000110

Retardo 100ms

Retardo 100ms

PortB=0000110

PortB=0001100

Retardo 100ms

Retardo 100ms

PortB=0000011

PortB=0001001

Retardo 100ms

Retardo 100ms

50

MICROCONTROLADORES

Programa:
Include <P16F873>
LIST
P=16F873
REG2
REG3

SEC
LOOP

HOR

RETARDO
REP2
REP1

EQU
EQU

20H
21H

ORG
MOVLW
TRIS
MOVLW
TRIS
BTFSS
GOTO
MOVLW
MOVWF
CALL
MOVLW
CALL
MOVLW
MOVWF
CALL
MOVLW
MOVWF
CALL
GOTO
MOVLW
MOVWF
CALL
MOVLW
MOVWF
CALL
MOVLW
MOVWF
CALL
MOVLW
MOVWF
CALL
GOTO

0
0
PORT B
.255
PORTC
PORTC,2
HOR
.9
PORT B
RETARDO
.3
RETARDO
.6
PORT B
RETARDO
.12
PORT B
RETARDO
SEC
.12
PORT B
RETARDO
.6
PORTB
RETARDO
.3
PORTB
RETARDO
.9
PORTB
RETARDO
SEC

MOVLW
MOVWF
MOVLW
MOVWF
DECFSZ
GOTO
DECFSZ
GOTO
RETURN
END

.132
REG2
.255
REG3
REG3,F
REP1
REG2,F
REP2

INGENIERIA DE DISEO DE PRODUCTO

;CONFIGURAR PUERTO B TODO COMO SALIDA.


;CONFIGURA EL PUERTO C COMO ENTRADA.
;PULSADOR DE SELECCIN DE DIRECCION.
;SENTIDO ANTIHORARIO.

;SENTIDO HORARIO.

;FIN DEL PROGRAMA.

51

MICROCONTROLADORES

23.

EXPLICACIN DE LAS INSTRUCCIONES DE ROTACIN

Existen dos instrucciones de rotacin de un registro a la derecha o a la izquierda a


travs del carry.
RLF f,d

Rotacin de f a la izquierda a travs del carry

Registro f

RRF f,d

Rotacin de f a la derecha a travs del carry

Registro f

Como Utilizar las Instrucciones de Rotacin


Ejemplo 1: Como ejemplo haremos un programa que inicialmente encienda todas
los bits del puerto B y luego los vaya apagando, uno por uno, comenzando
por el bit 0.
Include<P16F873.INC>
LIST P=16F873, R=HEX

INICIO
LOOP

ORG 0
MOVLW b'00000000'
TRIS PORTB
MOVLW b'11111111'
MOVWF PORTB
BCF STATUS,C
RLF PORTB,F
BTFSS PORTB,7
GOTO INICIO
GOTO LOOP
END

INGENIERIA DE DISEO DE PRODUCTO

; CARGA W CON 00000000


; CONFIGURA EL PUERTO B COMO SALIDA
; CARGA W CON 11111111
; ACTIVA TODOS LOS BITS DEL PUERTO B
; PONE EN "0" EL BIT CARRY
; ROTA A LA IZQUIERDA EL PORTB
; PREGUNTA RB7 ESTA EN UNO
; SI RB7 = 0, SALTA A INICIO
; SI RB7 = 1, SALTA A LOOP

52

MICROCONTROLADORES

Ejemplo 2: Este programa genera una secuencia en la que un uno (led encendido)
rota desde el bit cero del RB0 hasta el bit 7 RB7 y una vez termina pone los
bits en cero desde RB0 hasta RB7.
Inicio

Poner en 0 PortB

Poner en 1 RB0

Llamar retardo 1 seg

Poner en 1 el carry
Rotar a la izq a traves
de carry

Llamar retardo 1 seg

No

RB7 =1?
Si

Poner en "0" el carry


Rotar a derecha a
travs de carry

Llamar retardo 1 seg

No

RB0=0?
Si

Llamar retardo 1 seg

INGENIERIA DE DISEO DE PRODUCTO

53

MICROCONTROLADORES

Programa:
Include
LIST

<P16F873.INC>
P= 16F873, R=HEX

REG1
REG2
REG3

EQU
EQU
EQU

20H
21H
22H

ORG
MOVLW
TRIS
CLRF
BSF
CALL
BSF
RLF

0
0
PORTB
PORTB
PORTB,0
RETARDO
STATUS,C
PORTB,F

CALL
BTFSS
GOTO

RETARDO
PORTB,7
REP

LOOP 10

BCF
RRF
CALL
BTFSS
GOTO
GOTO

STATUS,C
PORTB,F
RETARDO
PORT B,O
LOOP 10
LOOP

RETARDO

MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
DECFSZ
GOTO
DECFSZ
GOTO
DECFSZ
GOTO
RETURN

.10
REG1
.132
REG2
.255
REG3
REG3,F
REP1
REG2,F
REP3
REG1,F
REP3

LOOP

REP

REP3
REP2
REP1

END

INGENIERIA DE DISEO DE PRODUCTO

;CONFIGURA EL PUERTO B COMO SALIDA.


;LIMPIA EL PUERTO B.
;PONE EN 1 EL BIT 0 DEL PUERTO B.
;LLAMA UN RETARDO DE UN SEGUNDO.
;COLOCA LA BANDERA DE CARRY EN 1.
;ROTA A LA IZQUIERDA A TRAVES DEL
CARRY (EL UNO SE ALMACENA EN F ).
;LLAMA EL RETARDO DE UN SEGUNDO.
;SI EL BIT7 DEL PUERTO B ES 0.
;SALTA A REP
;PONE EN CERO (0) EL CARRY
;ROTA A LA DERECHA A TRAVS DE CARRY.
;LLAMA RETARDO DE UN SEGUNDO

;FIN DEL PROGRAMA

54

MICROCONTROLADORES

24.

MANEJO DE DISPLAY 7 SEGMENTOS Y ANTIREBOTE

Conexin de Display 7 segmentos

Cuando se quiere mostrar datos en display, existen dos opciones para hacerlo, una
utilizar un decodificador BCD a 7 segmentos despus del microcontrolador, y otra es
generar con el mismo microcontrolador el cdigo 7 segmentos equivalente a cada
numero de 0 a 9.
En este caso se har el decodificador BCD a 7 segmentos con el mismo
microcontrolador.
Antes de explicar como mostrar datos en un display con el mocrocontrolador, se
recordar que hace un decodificador BCD a 7 segmentos

El decodificador BCD a 7 segmentos me convierte el cdigo BCD a cdigo 7


segmentos, encendiendo los segmentos correspondientes al numero, por ejemplo el
numero cero (0000 en BCD) debe encender los segmentos a, b, c, d, e y f, el numero
cuatro (0100 en BCD) debe encender los segmentos b, c, e, f y g.
As se podra seguir indicando que segmentos se encienden con cada numero, sin
embargo nos centraremos en la forma como el microcontrolador lo har.
Se pretende que el mismo microcontrolador maneje directamente el display sin
utilizar decodificadores.
La conexin del microcontrolador con el display ser la siguiente:

INGENIERIA DE DISEO DE PRODUCTO

55

MICROCONTROLADORES

Para lograr este objetivo se necesita entender el manejo de tablas con


microcontroladores, en la tabla se almacena cada uno de los cdigos 7 segmentos
de cada numero.

NUMERO RB7
0
1
2
3
4
5
6
7
8
9

RB6
g

CODIGO 7 SEGMENTOS
RB5
RB4
RB3
RB2
f
e
d
c

RB1
b

RB0
a

Las tablas se manejan como si se trataran de rutinas. La clave esta en colocar en W


el valor que se quiere mostrar en el display, lgicamente este valor debe estar entre
0 y 9, y hacer el llamado a la direccin base de la tabla. Dentro de la tabla debe
existir una primera instruccin que realiza una suma sobre el contador del programa,
logrndose un salto relativo a ste. En la direccin en la cual el programa salte
deber incluir alguna instruccin que obliga a W a regresar o retornar el cdigo
correspondiente al valor 7 segmentos.
Las instrucciones respectivas y la tabla son las siguientes:

INGENIERIA DE DISEO DE PRODUCTO

56

MICROCONTROLADORES

.
.
MOVF

VALOR,W

CARGAR EN W VALOR A MOSTRAR

CALL

TABLA

LLAMAR TABLA DE DATOS

MOVWF

PORTB

MOSTRAR VALOR EN PORTB

ADDWF

PCL,F

PCL + W

RETLW

B 00111111

CODIGO PARA EL 0

RETLW

B 00000110

CODIGO PARA EL 1

RETLW

B 01011011

CODIGO PARA EL 2

RETLW

B 01001111

CODIGO PARA EL 3

RETLW

B 01100110

CODIGO PARA EL 4

RETLW

B 01101101

CODIGO PARA EL 5

RETLW

B 01111100

CODIGO PARA EL 6

RETLW

B 00000111

CODIGO PARA EL 7

RETLW

B 01111111

CODIGO PARA EL 8

RETLW

B 01100111

CODIGO PARA EL 9

TABLA

La instruccin ADDWF PCL,F suma el contenido de PCL + W y deja el resultado en


PCL, esto hace que el microcontrolador salte a la posicin correspondiente al cdigo
para cada numero y en esta posicin encuentra la instruccin RETLW B xxxxxxxx,
sta instruccin le dice al microcontrolador que retorne de la subrutina pero que a
su vez regrese en W el valor correspondiente al cdigo 7 segmentos del numero.
25.

TRABAJOS CON PULSADORES (ANTIRREBOTES)

Cuando se trabaja con pulsadores o suiches, en el momento en que estos cambian


de estado se genera una seal como la que se muestra en la figura:
1

Es decir, el suiche o pulsador genera unos y ceros hasta que finalmente se estabiliza
debido a que es un dispositivo electromecnico, el microcontrolador con su velocidad
de trabajo se da cuenta de esto.
INGENIERIA DE DISEO DE PRODUCTO

57

MICROCONTROLADORES

Para evitar errores en la deteccin de pulsadores y suiches se utilizan retardos de


150 a 300ms aproximadamente, en el momento en que se detecta que un pulsador o
suiche cambi de estado, este tiempo es suficiente mientras se estabiliza y luego, se
pregunta nuevamente por el estado del suiche.

No

Pulsador = 1

Retardo 200 ms

Falsa
Alarma

No

Pulsador = 1

El Pulsador
se oprimi

El programa para detectar si un pulsador se oprimi, es el siguiente:


Supongamos que el pulsador esta conectado a RC1.
.
.
LOOP

BTFSS

PORTC,1

SI RC1 = 1, IGNORE LA SIGUIENTE INSTRUCCIN

GOTO

LOOP

SALTA A LOOP

CALL

RET200ms

LLAMA RETARDO DE 200 MS

BTFSS

PORTC,1

SI RC1 = 1, IGNORE LA SIGUIENTE INSTRUCCIN

GOTO

FALSO

SALTA A FALSO

GOTO

INCREM

SALTA A INCREM

INGENIERIA DE DISEO DE PRODUCTO

58

MICROCONTROLADORES

26.

EJEMPLO CON MANEJO DE DISPLAY

En este ejemplo se har un conteo de 0 a 9 incrementando cada segundo y cuando


llega a 9, comienza de nuevo el conteo.

Inicio

Contador=0

w=contador

Saltar a tabla para


obtener codigo 7
segmentos

PortB=cod7 seg

Llamar retardo 1seg

Incrementar contador

No

Contador=10?
Si

INGENIERIA DE DISEO DE PRODUCTO

59

MICROCONTROLADORES

Programa:
Include <p16f873.inc>
List
p=16f873

CONTADOR

EQU

20

REG
REG
REG

EQU
EQU
EQU

21
22
23

ORG
MOVLW
TRIS
MOVLW
MOVWF
MOVF
CALL
MOVWF
CALL
INCF
MOVLW
XORWF
BTFSC
GOTO
GOTO

00
0
PORTB
;CONFIGURAR EL PORTB COMO SALIDA
0
CONTADOR ;CARGAR EL CONTADOR CON 0
CONTADOR,W;CONTADOR=W
TABLA
;LLAMAR TABLA
PORTB
;LLEVAR VALOR 7 SEGMENTOS A PORTB
RET1S
;LLAMA RETARDO 1S.
CONTADOR,F
.10
;COMPARA CONTADOR CON 10
CONTADOR,W
STATUS,2
LOOP
INICIO

MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
DECFSZ
GOTO

.10
REG1
.132
REG2
.255
REG3
REG3,F
REP1

DECFSZ
GOTO
DECFSZ
GOTO
RETURN

REG2,F
REP2
REG1,F
REP3

ADDWF
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
END

PCL,F
B 00111111
B 00000110
B 01011011
B 01001111
B 01100110
B 01101101
B 01111100
B 00000111
B 01111111
B 01100111

INICIO
LOOP

RET1S
REP3
REP2
REP1

TABLA

INGENIERIA DE DISEO DE PRODUCTO

; PCL + W
; CODIGO PARA EL 0
; CODIGO PARA EL 1
; CODIGO PARA EL 2
; CODIGO PARA EL 3
; CODIGO PARA EL 4
; CODIGO PARA EL 5
; CODIGO PARA EL 6
; CODIGO PARA EL 7
; CODIGO PARA EL 8
; CODIGO PARA EL 9
;FIN DEL PROGRAMA.

60

MICROCONTROLADORES

27.

MULTIPLEXAJE DE DISPLAY

En muchas ocasiones se requiere mostrar nmeros en display de mas de un dgito,


es decir, 2, 3, o 4 dgitos.
Si se pretende controlar cada display, se necesitan siete (7) lneas del
microcontrolador por cada uno, esto ocupara todas las lneas disponibles en cada
puerto del microcontrolador, sin embargo existe una tcnica llamada multiplexaje que
consiste en conectar a las mismas 7 lneas los 2,3 o 4 display e ir encendiendo uno
a uno los display, a travs de un transistor, tan rpidamente que perecen
encendecen todos al mismo tiempo.
Cualquier elemento que se encienda y apague con una frecuencia mayor a 25Hz es
imperceptible para el ojo humano, ste lo ver encendido en todo momento.
El circuito para manejar 2 display multiplexados puede ser el siguiente:

Nota: los segmentos de cada display van unidos entre si, es decir a con a, b con b,
hasta el g con g. y por cada display adicional se necesita un transistor y solo una
lnea mas del microcontrolador.
En este diagrama se asume que las unidades estn en el display de la derecha y las
decenas en el display de la izquierda.
El diagrama de flujo para mostrar datos en el display es el siguiente:

INGENIERIA DE DISEO DE PRODUCTO

61

MICROCONTROLADORES

INICIO

W = Unidades

Llamar tabla

Llevar a PORTB

Activar RC5 y
desactivar RC4

Llamar retardo 1ms

W = decenas

Llamar tabla

Activar RC4 y
desactivar RC5

Llamar retardo 1ms

Return

Es importante aclarar que cuando se utiliza el multiplexaje con el display, se debe


estar llamando constantemente en el programa principal la rutina de mostrar, es
decir que siempre que el programa principal este en un loop, dentro de ese loop se
debe llamar la subrutina de mostrar.

INGENIERIA DE DISEO DE PRODUCTO

62

MICROCONTROLADORES

El programa para la subrutina que me permite mostrar los nmeros en el display,


segn el diagrama de flujo anterior es el siguiente:
MOSTRAR

MOVF
CALL
MOVWF
BSF
BCF
CALL
MOVF
CALL
MOVWF
BSF
BCF
CALL
RETURN

DECE,W
TABLA
PORTB
PORTC,4
PORTC,5
RETARDO
UNID,W
TABLA
PORTB
PORTC,5
PORTC,4
RETARDO

; CARGA EN W EL VALOR DE LAS DECENAS


; LLAMA TABLA
; LLEVA DECENAS A PORTB
; ACTIVA TRANSISTOR DE LAS DECENAS
; DESACTIVA TRANSISTOR DE LAS UNIDADES
; LLAMA RETARDO DE 774 MICROSEGUNDOS
; CARGA EN W EL VALOR DE LAS UNIDADES
; LLAMA TABLA
; LLEVA UNIDADES A PORTB
; DESACTIVA TRANSISTOR DE LAS DECENAS
; ACTIVA TRANSISTOR DE LAS UNIDADES
; LLAMA RETARDO DE 774 MICROSEGUNDOS
; RETORNA DE LA SUBRUTINA

TABLA

ADDWF

PCL,F

; PCL + W

RETLW

B 00111111

; CODIGO PARA EL 0

RETLW

B 00000110

; CODIGO PARA EL 1

RETLW

B 01011011

; CODIGO PARA EL 2

RETLW

B 01001111

; CODIGO PARA EL 3

RETLW

B 01100110

; CODIGO PARA EL 4

RETLW

B 01101101

; CODIGO PARA EL 5

RETLW

B 01111100

; CODIGO PARA EL 6

RETLW

B 00000111

; CODIGO PARA EL 7

RETLW

B 01111111

; CODIGO PARA EL 8

RETLW

B 01100111

; CODIGO PARA EL 9

MOVLW

.255

MOVWF

REG1

DECFSZ

REG1,F

GOTO

RET1

RETARDO

RET1

RETURN

Esto ocurre cuando por ejemplo, se pregunta por un pulsador, donde se llama el
retardo de 200 ms, la rutina mostrar debe estar dentro del retardo de 200ms y as
cada vez que el programa principal este dentro de un loop.
Otro caso es el retardo de un segundo, aqu tambin es necesario que la rutina de
mostrar haga parte del retardo de un segundo.

INGENIERIA DE DISEO DE PRODUCTO

63

MICROCONTROLADORES

28.

EJEMPLO DE MULTIPLEXAJE

En este ejemplo solo mostraremos el numero 57 en los displays.

Valor1=5

Valor2=7

Llevar valor1 a PortB

Habilitar transistor de
valor1(RC0) y deshabilitar
transistor de valor2(RC1)

Retardo de 1ms

Llevar valor2 a PortB

Habilitar transistor de
valor2(RC1) y deshabilitar
transistor de valor1(RC0)

Retardo de 1ms

INGENIERIA DE DISEO DE PRODUCTO

64

MICROCONTROLADORES

Programa:
INCLUDE
<P16F873.INC>
LIST
P=16F873, R = HEX
R12
VALOR 1
VALOR 2

EQU
EQU
EQU

20H
21H
22H

MOVLW
TRIS
MOVLW
TRIS
MOVLW
MOVWF
MOVLW
MOVWF
MOVF
CALL

0
PORTB
0
PORTC
.7
VALOR 2
.5
VALOR 1
VALOR 1,W
TABLA

MOVWF
MOVLW
MOVWF

PORTB
.1
PORT C

CALL
MOVF
CALL

RETARDO
VALOR 2,W
TABLA

MOVWF
MOVLW
MOVWF
CALL
GOTO

PORT B
.2
PORTC
RETARDO
LOOP1

MOVLW
MOVWF
DECFSZ
GOTO

.255
R12
R12,F
REP

;RETARDO DE 1 mS APROX.

TABLA

ADDWF
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW

PCL,F
B 00111111
B 00000110
B 01011011
B 01001111
B 01100110
B 01101101
B 01111100
B 00000111
B 01111111
B 01100111

; PCL + W
; CODIGO PARA EL 0
; CODIGO PARA EL 1
; CODIGO PARA EL 2
; CODIGO PARA EL 3
; CODIGO PARA EL 4
; CODIGO PARA EL 5
; CODIGO PARA EL 6
; CODIGO PARA EL 7
; CODIGO PARA EL 8
; CODIGO PARA EL 9

RETARDO

MOVLW
MOVWF
DECFSZ
GOTO
RETURN
END

.255
REG1
REG1,F
RET1

LOOP 1

RETARDO
REP

RET1

INGENIERIA DE DISEO DE PRODUCTO

;CONFIGURAR EL PERTO B TODO COMO SALIDA.


;CONFIGURA EL PUERTO C COMO SALIDA.
;CARGA W CON 7.
;LLEVA 7 A VALOR 2.
;CARGA W CON 5.
;LLEVA 5 A VALOR 1.
;LLEVA VALOR 1 A W.
;LLAMA A TABLA PARA ENCONTRAR EL VALOR
7 SEGMENTOS DEL NUMERO 5.
;LLEVA EL VALOR 7 SEG AL PUERTO B.
;HABILITA EL TRANSISTOR
CORRESPONDIENTE A VALOR1 (RC0)
;LLEVA VALOR 2 A W.
;CONVIERTE VALOR 2 A CODIGO 7
SEGMENTOS.
;SACA AL PUERTO B EL VALOR 2.
;HABILITA EL TRANSISTOR DE VALOR2 (RC1).

;FIN DEL PROGRAMA.

65

MICROCONTROLADORES

29.

INTERRUPCIONES

Las llamadas subrutinas mediante la instruccin CALL hacen que el programa


ejecute un subprograma y luego regrese al programa principal, sin embargo el
programador esta definiendo en que momento debe saltar a ejecutar la subrutina
mediante las instrucciones, por esta razn se consideran sincronas.
Las interrupciones son desviaciones de flujo de control del programa originadas
asincronicamente por diversos sucesos que no dependen del programador, es decir,
ocurren en cualquier momento.
Las interrupciones ocurren por sucesos externos como la generacin de un flanco o
nivel en una patica del microcontrolador o eventos internos tales como el
desbordamiento de un contador.
El comportamiento del microcontrolador ante la interrupcin es similar al de la
instruccin CALL de llamada a subrutina. En ambos casos se detiene la ejecucin
del programa en curso, se guarda la direccin a donde debe retornar cuando termine
de ejecutar la interrupcin y salta a la direccin de la interrupcin que siempre ser
la direccin 004H.
Existen 13 diferentes causas que producen una interrupcin, por lo tanto el primer
paso de la rutina de interrupcin ser identificar la causa de la interrupcin.
Nosotros solo trataremos la interrupcin externa por cambio de estado en la patica
RB0.
Para entender los pasos necesarios para trabajar con las interrupciones es
importante conocer algunos registros del microcontrolador que tienen que ver
directamente con las interrupciones.
REGISTRO OPTION

RBPU# INTEDG

TOCS

TOSE

PSA

PS2

PS1

PS0

PS2

PS1

PS0

DIVISION DEL
TMR0

0
0
0
0
1
1
1
1

0
0
1
1
0
0
1
1

0
1
0
1
0
1
0
1

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

INGENIERIA DE DISEO DE PRODUCTO

66

MICROCONTROLADORES

PSA : Asignacin del divisor de frecuencias


1 = El divisor de frecuencias se le asigna al WDT
0 = El divisor de frecuencias se le asigna al TMR0
TOSE : tipo de flanco en TOCKI
1 = Incremento del TMR0 cada flanco descendente
0 = Incremento del TMR0 cada flanco ascendente
TOCS : Tipo de reloj para TMR0
1 = Pulsos introducidos a travs de TOCKI (contador)
0 = Pulsos de reloj interno FOSC/4 (temporizador)
INTEDG : Flanco activo de interrupcin externa
1 = Flanco de subida
0 = Flanco de bajada
RBPUH : Resistencias de pull up de la puerta B
1 = Desactivadas
0 = Activadas

REGISTRO INTCON

GIE

PEIE

TOIE

INTE

RBIE

TOIF

INTF

RBIF

GIE : Bit de permiso global de interrupciones


1 = Permitido
0 = Prohibido
PEIE : Habilitacin de interrupciones de perifricos
0 = Las deshabilita
1 = las habilita
TOIE : Habilitacin de interrupcin del temporizador TMR0
0 = las deshabilita
1 = las habilita

INGENIERIA DE DISEO DE PRODUCTO

67

MICROCONTROLADORES

INTE : Bit de permiso de la interrupcin externa por RB0/INT


0 = La deshabilita
1 = La habilita
RBIE : Bit de permiso de la interrupcin por cambio RB4 RB7
0 = La deshabilita
1 = La habilita
TOIF : Sealizador de desbordamiento en TMR0
Se coloca en 1 cuando el TMR0 pasa de offh a ooh; esta debe ser
puesta a 0 por programa
INTF : Sealizador de activacin de la patica RB0/INT
Se coloca en 1 cuando la interrupcin INT (RB0) ocurre; esta debe
ser puesta a 0 por programa
RBIF : Sealizador de cambio RB4 RB7
Se coloca en 1 cuando una de las entradas RB(7:4) cambia; esta
debe ser puesta a "0 por programa
Los pasos que se siguen en general para habilitar y atender una interrupcin por
cambio de nivel en RB0 son los siguientes:
1. En el programa principal seleccionar el flanco activo de la interrupcin: Bit INTEG
del registro OPTION REG
2. Limpiar el sealizador de interrupcin: Bit INTF del registro INTCON
3. Habilitar el bit de permiso global de interrupciones: Bit GIE del registro INTCON
4. Habilitar la interrupcin por RB0: Bit RBIE del registro INTCON

En la rutina de interrupcin
1. Deshabilitar la interrupcin por RB0: Bit INTE del registro INTCON
2. Limpiar sealizador de interrupcin por RB0: Bit INTF del registro INTCON
Al terminar la rutina de interrupcin:
Habilitar nuevamente la interrupcin por RB0: Bit INTE del registro INTCON
Retornar de la interrupcin con la instruccin RETFIE

INGENIERIA DE DISEO DE PRODUCTO

68

MICROCONTROLADORES

El programa quedar de la siguiente manera:


ORG
GOTO
ORG
GOTO
INICIO

0
Inicio
4
INTER

:
:
BSF

STATUS,5

; CAMBIAR AL BANCO 1 DE MEMORIA

BSF OPTION REG, INTEDG


BCF
STATUS,5
BCF INTCON, INTF
BSF INTCON, GIE
BSF INTCON, INTE

; SELECCIONA FLANCO DE SUBIDA PARA LA


INTERRUPCIN POR RB0
;CAMBIAR AL BANCO 0 DE MEMORIA
; LIMPIA EL BIT SEALIZADOR DE
INTERRUPCIN POR RB0
; HABILITA LAS INTERRUPCIONES EN
FORMA GLOBAL
; HABILITA LA INTERRUPCIN POR RB0

:
:
:
INTER

BCF INTCON, INTE

; DESHABILITA LA INTERRUPCIN POR RB0

BCF INTCON, INTF

; BORRA SEALIZADOR DE INTERRUPCIN POR


RB0

:
:
:
:

PROGRAMA
QUE DEBE
EJECUTAR LA
INTERRUPCIN

BSF INTCON, INTF

; HABILITA LA INTERRUPCIN POR RB0

RETFIE

; RETORNO DE LA INTERRUPCIN

INGENIERIA DE DISEO DE PRODUCTO

69

MICROCONTROLADORES

30.

EJEMPLO UTILIZANDO INTERRUPCIONES POR CAMBIO DE RB0

Se plantea un ejercicio de un contador de 0 a 99, que solo incrementa cuando hay


una interrupcin, en este caso ser causada por un flanco de subida por la patica
RB0.
El diagrama de flujo correspondiente al ejercicio es el siguiente:
Para el programa principal:

INICIO
Configurar Puertos
Unidades = 0
Decenas = 0
Configurar Interrupcin
por RB0
Habilitar Interrupcin
por RB0
CALL Mostrar

Para la interrupcin:
INICIO

Incrementar Unidades

Unidades = 10

Si

Decenas = 9

NO

Si

Unidades = 0

Incrementar
Decenas

Decenas = 0

Unidades = 0

Return
INGENIERIA DE DISEO DE PRODUCTO

70

MICROCONTROLADORES

Programa:
Include<P16F873.INC>
LIST P=16F873, R=HEX
UNID
DECE
REG1
REG2
REG3

INICIO

EQU
EQU
EQU
EQU
EQU

20
21
23
24
25

ORG
GOTO
ORG
GOTO

0
INICIO
4
INTER

ORG 6
MOVLW
TRIS

1
PORTB

;SALTA A INICIO
; SALTA A EJECUTAR LA INTERRUPCIN

; CONFIGURA EL PORTB COMO SALIDA Y RB0 COMO


ENTRADA

MOVLW
0
TRIS
PORTC
BSF
STATUS,5
BSF OPTION_REG,INTEDG
BSF
BCF
BSF

; CONFIGURA PORTC COMO SALIDA


; CAMBIA AL BANCO 1 DE MEMORIA
;SELECCIONA FLANCO DE SUBIDA PARA LA
INTERRUPCIN
STATUS,5
; CAMBIA AL BANCO 0 DE MEMORIA
INTCON,INTF ; BORRA SEALIZADOR DE INTERRUPCIN
INTCON,INTE ; HABILITA LA INTERRUPCIN EXTERNA POR RB0

BSF
CLRF
CLRF
CALL
GOTO

INTCON,GIE
UNID
DECE
MOSTRAR
LOOP

MOSTRAR

MOVF
CALL
MOVWF
BSF
BCF
CALL
MOVF
CALL
MOVWF
BSF
BCF
CALL
RETURN

DECE,W
TABLA
PORTB
PORTC,4
PORTC,5
RETARDO
UNID,W
TABLA
PORTB
PORTC,5
PORTC,4
RETARDO

RETARDO

MOVLW
MOVWF
DECFSZ
GOTO

0FFH
REG1
REG1,F
REP

LOOP

REP

; HABILITA LAS INTERRUPCIONES


; PONE EN CERO LAS UNIDADES
; PONE EN CERO LAS DECENAS

RETURN

INGENIERIA DE DISEO DE PRODUCTO

71

MICROCONTROLADORES

TABLA

ADDWF
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW

INTER

BCF INTCON,INTE
BCF INTCON,INTF

DECREM

LOOP1

RET100
LOOP3
LOOP2

PCL,F
B 00111111
B 00000110
B 01011011
B 01001111
B 01100110
B 01101101
B 01111100
B 00000111
B 01111111
B 01100111

; PCL + W
; CODIGO PARA EL 0
; CODIGO PARA EL 1
; CODIGO PARA EL 2
; CODIGO PARA EL 3
; CODIGO PARA EL 4
; CODIGO PARA EL 5
; CODIGO PARA EL 6
; CODIGO PARA EL 7
; CODIGO PARA EL 8
; CODIGO PARA EL 9

; DESHABILITA INTERRUPCION POR RB0


; BORRA SEALIZADOR DE INTERRUPCION
; POR RB0

INCF
MOVLW
XORWF
BTFSS
GOTO

UNID,F
.10
UNID,W
STATUS,Z
LOOP1

MOVLW
XORWF
BTFSS
GOTO

.9
DECE,W
STATUS,Z
DECREM

CLRF
CLRF
GOTO

UNID
DECE
LOOP1

INCF
CLRF
CALL
BSF
RETFIE

DECE,F
UNID
RET100
INTCON,INTE ; HABILITA INTERRUPCIONES POR RB0
; RETORNA DE LA INTERRUPCIN

MOVLW
MOVWF
MOVLW
MOVWF
CALL
DECFSZ
GOTO

2
REG3
.255
REG2
MOSTRAR
REG2,F
LOOP2

DECFSZ
GOTO

REG3,F
LOOP3

RETURN
END

INGENIERIA DE DISEO DE PRODUCTO

;FIN DEL PROGRAMA

72

MICROCONTROLADORES

31.

CONVERSOR ANALOGO/DIGITAL (A/D).

Los microcontroladores PIC16F873 poseen un conversor anlogo/digital de 10 bits y


5 canales de entrada.
Una seal anloga es una seal continua, por ejemplo una seal de 0 a 5V es una
seal anloga y puede tomar valores (1V, 2V, 2.5 V, etc.).
Una seal digital solo puede tomar dos valores 0V 5V, abierto o cerrado, activado
o desactivado.
Un sensor de nivel que me genere una seal anloga no solo me indica si el tanque
esta lleno o vaco, sino que adems me indica que nivel tiene el tanque en todo
momento y la seal ser proporcional al nivel del tanque.
Un conversor A/D me convierte la seal anloga en un numero digital (binario), l
nmero es proporcional a la seal anloga.
En el caso del microcontrolador PIC16F873 el conversor A/D tiene 10 bits y la seal
anloga de entrada puede estar entre 0V y 5V, sin embargo el conversor A/D tiene
dos niveles de referencia VREF+ y VREF- que me indican entre que valores ser la
seal anloga de entrada. El voltaje mnimo diferencial es de 2V, es decir la
diferencia entre VREF+ y VREF- no puede ser mayor a 2V.
Con 10 bits el mayor numero binario que podemos tener es 1024, por lo tanto la
resolucin del conversor A/D esta dada por la formula:
Resolucin = (VREF+ - VREF-) / 1024
As, por ejemplo, si VREF = +5V y VREF- es 0V, la resolucin es 5V/1024 = 4.8mV /bit,
cuando la seal anloga sea 0V le corresponde un numero digital = 0000000000 y
para 5V ser 1111111111.
Si VREF+ = +5V y VREF- podemos determinar en todo momento a que numero digital
aproximado corresponde cualquier seal anloga de entrada, con la formula:
VEntrada. = VEntrada.
4.8mV
0.0048V
Por ejemplo si la seal anloga es 2V, el nmero digital aproximado, ser:
2V = 416
0.0048
La tensin de referencia VREF+ puede implementarse con la tensin interna de
alimentacin VDD, o bien, con una externa que se pone en la patica RA2/AN2/ VREF-.
Para el funcionamiento del conversor A/D se necesita trabajar con 4 registros:
ADRESH:
ADRESL:
ADCONO:
ADCONI:

Parte alta del resultado de la conversin


Parte baja del resultado de la conversin
Registro de control 0
Registro de control 1

INGENIERIA DE DISEO DE PRODUCTO

73

MICROCONTROLADORES

El registro ADCONO controla la operacin del conversor A/D, mientras que el


ADCON1 sirve para configurar las paticas del puerto A como entradas anlogas o
entradas y salidas digitales.
REGISTRO ADCON1

ADFM

-------

PCFG2:PCFG0
000
001
010
011
100
101
11X

-------

-------

PCFG3

PCFG2

PCFG1

PCFG0

RA0

RA1

RA2

RA5

RA3

VREF

A
A
A
A
A
A
D

A
A
A
A
A
A
D

A
A
A
A
D
D
D

A
A
A
A
D
D
D

A
VREF
A
VREF
A
VREF
D

VDD
RA3
VDD
RA3
VDD
RA3
-------

A: Entrada anloga.
D: Entrada/salida digital.

ADFM: Selecciona el formato del resultado de la conversin si vale 1, el resultado


esta justificado en el registro ADRESH, que tiene sus 6 bits de mas peso a 0,
mientras que si vale 0 la justificacin se realiza sobre el registro ADRESL, que
tiene sus 6 bits de mas peso a 0.
Veamos como configurar el PORTA para diferentes aplicaciones:
Los pasos que debemos seguir para configurar el PORTA son los siguientes:
1. Paso al banco 1 de memoria:
BSF STATUS,5
2. Configurar el Registro ADCON1 con la configuracin deseada. El puerto A solo
tiene 6 lneas disponibles desde RA0 hasta RA5, la patica RA4 solo puede
funcionar como Entrada/Salida digital, cuando funciona como salida hay que
tener en cuenta que es una salida de colector abierto, es decir, se debe poner
una resistencia entre la salida y 5V.
Para lograr este objetivo, se hace referencia a la tabla del registro ADCON1.
INGENIERIA DE DISEO DE PRODUCTO

74

MICROCONTROLADORES

Como ejemplo de este punto, se supone que se quiere configurar todo el puerto A
como Entradas/Salidas digital.
El valor que se debe cargar en el Registro ADCON1 ser la combinacin 00000110
o 00000111 (6 0 7 en decimal), como nos los indica el Registro ADCON1. La X
significa que el estado de este bit no importa.
MOVLW 6
MOVWF ADCON1
3. Paso al banco 0 de memoria.
BCF STATUS,5
4. Configurar el puerto A como lo necesitamos, es decir cuales de los pines
funcionaran como entradas o salidas.
En este paso configuramos el PORTA como lo hemos hecho siempre.
MOVLW B00000000
TRIS PORTA.
REGISTRO ADCON0
ADCS1

ADCS0

CHS2

CHS1

CHS0

G0/ DONE H

--------

ADON

ADCS1: ADSC0 : Seleccin del reloj de conversin.


00 : FOSC/2
01 : FOSC/8
10 : FOSC/32
11 : FRC : Oscilador RC interno en el conversor A/D

CHS2:

CHS0 : Bits de seleccin de canales anlogos


000 : Canal 0, (RA0/AN0)
001 : Canal 1, (RA1/AN1)
010 : Canal 2, (RA2/AN2)
011 : Canal 3, (RA3/AN3)
111 : Canal 4, (RA4/AN4)

INGENIERIA DE DISEO DE PRODUCTO

75

MICROCONTROLADORES

GO/DONE : Bit de estado de la conversin


Si ADON = 1
1: Conversin A/D en progreso (poniendo este bit en 1
comienza la conversin A/D)
0: No hay conversin A/D (este bit es borrado automticamente
cuando la conversin A/D termina)
ADON :

Bit de activacin del conversor A/D


1: Esta operando la conversin
0: Modulo del conversor esta inactivo.

Los pasos que se deben seguir para realizar una conversin anloga son los
siguientes:
1. Configurar el modulo A/D

Configurar los pines anlogos/ voltajes de referencia/ pines digitales (Registro


ADCON1)
Seleccionar el canal de entrada A/D (Registro ADCONO)
Seleccionar reloj de conversin (Registro ADCONO)
Activar el modulo A/D (registro ADCONO)

2. Configurar la interrupcin de modulo A/D (si lo desea)


3. Esperar a que termine el tiempo de muestreo (tpico de 20 s)
4. Iniciar la conversin

Poner en uno el bit GO/DONE (Registro ADCONO)

5. Esperar a que termine la conversin A/D

Revisando que el bit GO/DONE se ponga en cero


Esperando la interrupcin del modulo A/D

6. Leer el resultado de los registros ADRESH y ADRESL y borrar el bit ADIF

Para la prxima conversin se debe regresar al paso 1 al 2 segn se requiera.

INGENIERIA DE DISEO DE PRODUCTO

76

MICROCONTROLADORES

32.

EJEMPLO DE CONVERSOR ANLOGO DIGITAL

A continuacin se describe un ejemplo en el que la entrada anloga viene de una


resistencia variable por RA0 y el resultado de la conversin se muestra en binario
por el puerto B y parte del puerto C (RC0 y RC1).
El diagrama del circuito es el siguiente:

Programa:
Include <P16F873.INC>
LIST P=16F873, R=HEX

REP3

REG1
REG2
REG3
REG4

EQU
EQU
EQU
EQU

ORG
MOVLW
TRIS
TRIS
BSF
MOVLW

0
0
PORTB
PORTC
STATUS,5
80

MOVWF
BCF
MOVLW

ADCON1
STATUS,5
1

MOVWF
CALL

ADCON0
RETARDO

INGENIERIA DE DISEO DE PRODUCTO

20
21
22
23

; CONFIGURAR EL PORTB COMO SALIDA


; CONFIGURAR EL POTRC COMO SALIDA
; CAMBIA AL BANCO 1 DE MEMORIA
; CONFIGURA EL PORTA COMO
; ENTRADAS ANLOGAS
; CAMBIA AL BANCO 0 DE MEMORIA
; CONFIGURA CANAL 0, FRECUENCIA, Y
; ENCIENDE EL CONVERSOR A/D
; LLAMA RETARDO DE 767 MICROSEGUNDOS

77

MICROCONTROLADORES

REP1

BSF

ADCON0,2

; INICIA LA CONVERSIN

REP

BTFSC
GOTO
MOVF

ADCON0,2
REP
ADRESH,W

MOVWF
BSF
MOVF

PORTC
STATUS,5
ADRESL,W

BCF
MOVWF
CALL
GOTO

STATUS,5
PORTB
RETD
REP3

; PREGUNTA SI YA TERMINO LA CONVERSIN


; SALTA A REP SI NO HA TERMINADO
; PASA EL VALOR DE ADRESH A W (BITS
; MS SIGNIFICATIVOS DE LA CONVERSIN)
; MUESTRA EN EL PORTC
; CAMBIA AL BANCO 1 DE MEMORIA
; PASA EL VALOR DE ADRESL A W (BITS
; MENOS SIGNIFICATIVOS DE LA CONVERSIN)
; CAMBIA AL BANCO 0 DE MEMORIA
; MUESTRA EN EL PORTC
; LLAMA RETARDO DE 100 MILISEGUNDOS
; SALTA A REP3 (COMENZAR DE NUEVO
; LA CONVERSIN)

MOVLW
MOVWF
DECFSZ
GOTO

.255
REG4
REG4,F
REP4

RETARDO
REP4

RETURN
RETD
REP6
REP2
REP7

MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
DECFSZ
GOTO
DECFSZ
GOTO
DECFSZ
GOTO
RETURN

2
REG1
84H
REG2
0FFH
REG3
REG3,F
REP7
REG2,F
REP2
REG1,F
REP6

END

INGENIERIA DE DISEO DE PRODUCTO

; FIN DEL PROGRAMA.

78

MICROCONTROLADORES

33.

COMUNICACIN SERIAL

Existen dos formas comunes de transferir informacin binaria entre dos equipos, la
comunicacin paralela y la comunicacin serial.
En la comunicacin en forma paralela los datos se transfieren en forma simultnea y
existen algunas lneas adicionales de control que permite la comunicacin entre los
dos equipos.
Bus de
Datos
EQUIPO

EQUIPO

Bus de
Control

Una de las desventajas de la comunicacin paralela es la cantidad de lneas que


necesita, esto aumenta los costos y ms cuando la distancia entre los equipos es
grande.
La comunicacin serial solo utiliza tres lneas, una para recibir los datos Rx, otra
para trasmitir los datos Tx y la lnea comn GND.
Cada dato se transmite bit a bit, un bit a la vez, por lo tanto se hace mucho ms
lenta, pero tiene la ventaja de necesitar menos lneas y las distancias a las cuales se
puede transferir la informacin son mayores, adems con el uso de los mdem se
puede trasmitir a cualquier parte del mundo.
Tx

Tx

EQUIPO

EQUIPO
Rx
GND

Rx
GND

Existen dos formas de comunicacin serial:


Sincrnica
Asincrnica
Comunicacin Sincrnica: en esta comunicacin adems de una lnea sobre la que
se transfieren los datos, se necesita otra que contenga pulsos de reloj que indiquen
que el dato es vlido; la duracin del bit est determinada por la duracin del pulso
de sincronismo.

INGENIERIA DE DISEO DE PRODUCTO

79

MICROCONTROLADORES

Comunicacin Asincrnica: en esta comunicacin los pulsos de reloj no son


necesarios y se utilizan otros mecanismos para realizar la transferencia de datos. La
duracin de cada bit esta determinada por la velocidad con la cual se realiza la
trasferencia de datos, por ejemplo si trasmitimos a 1200 bits por segundo (baudios),
la duracin de cada bit es de 833 microsegundos.
Las velocidades de transmisin ms comunes son 300, 600,1200, 2400, 9600,
14400 y 28800 baudios.

En este curso solo se estudiar la comunicacin asincrnica.


LSB

MSB

Bit de
Start

Bit de
Stop

En la figura se muestra la forma como se trasmite un dato cuando se realiza alguna


transferencia, la lnea del transistor permanece en alto. Para empezar a transmitir
datos esta lnea se pone en bajo durante un bit, lo cual se conoce como bit de Start,
y luego comienza a transmitir los bits correspondientes al dato, empezando por el bit
menos significativo (LSB) y terminando con el ms significativo (MSB). Al finalizar se
agrega el bit de paridad, si est activada esta opcin, y por ultimo los bits de stop,
que pueden ser 1 o 2, en los cuales la lnea regresa a nivel alto.
En el ejemplo de la figura, despus del bit de start se trasmite el dato 01101001 y al
final hay un bit de stop.
Esto significa que la configuracin de la transmisin serial es: 1 bit start, 8 bits dato,
no paridad y 1 bit de stop.
El receptor no est sincronizado con el transistor y no sabe cuando va a recibir
datos. La transicin de alto a bajo de la lnea del transmisor, activa el receptor y este
genera un conteo de tiempo de tal manera que realiza una lectura de la lnea medio
bit despus del evento; si la lectura realizada es un estado alto, asume que la
transicin ocurrida fue ocasionada por ruido en la lnea; si por el contrario la lectura
es un estado bajo, considera como vlida la transicin y empieza a realizar lecturas
secuenciales a intervalos de un bit hasta conformar el dato transmitido. Lgicamente
tanto el transmisor como el receptor debern tener los mismos parmetros de
configuracin (velocidad, numero bits del dato, paridad y bits de parada)

INGENIERIA DE DISEO DE PRODUCTO

80

MICROCONTROLADORES

Diagrama de Flujo de la Rutina Transmitir

Inicio

Bit de Start

Contador = 8

Colocar Tx en bajo

Rotar registro de
transmisin a la
derecha

Carry = 0 ?

No

Colocar Tx en bajo

Si

Call retardo 1 bit

Decrementar
contador

No

Contador = 0
Si

Bit de parada
Retorne

INGENIERIA DE DISEO DE PRODUCTO

81

MICROCONTROLADORES

Diagrama de Flujo Para la Recepcin de Datos


Inicio

Esta la lnea
Rx en bajo

No

Si

Call retardo 1.5 bits

Contador = 8

Carry = 0

Esta la lnea
Rx en bajo

No

Carry = 1

Rotar a la derecha
registro de recepcin
Call retardo 1 bits
Decrementar
contador

No

Contador = 0
Si

Retornar

Para la comunicacin serial se utiliza el protocolo RS-232, segn esta norma un uno
lgico es un voltaje comprendido entre 5V y 15V y entre 3V y 25V en el
receptor.
Un cero lgico es un voltaje comprendido entre 5V y 15V en el transmisor y entre 3V
y 25V en el receptor.

INGENIERIA DE DISEO DE PRODUCTO

82

MICROCONTROLADORES

Segn lo anterior, se debe utilizar dispositivos que permitan convertir niveles TTL a
niveles RS-232 y viceversa, de esta funcin se encarga el circuito integrado
MAX232.

34.

EJEMPLO COMUNICACIN SERIAL

Como ejemplo de aplicacin se plantea un ejercicio donde se conecta un display 7


segmentos al microcontrolador, el cual recibe informacin en forma serial desde el
computador y el dato que enva, que lgicamente es un numero entre 0 y 9 es
mostrado en el display. El diagrama del circuito es el siguiente.

INGENIERIA DE DISEO DE PRODUCTO

83

MICROCONTROLADORES

Programa:
INCLUDE <P16F873.INC>
List
P=16F873, R = HEX
CBLOCK
20H
CONT,DELAY,REGTX,REGRX,VALOR
ENDC
#DEFINE
#DEFINE

REPETIR

TRANSMISOR PORTC,7
RECEPTOR
PORTC,6
ORG
BSF
MOVLW
MOVWF
CLRF
BCF
BSF
MOVLW
CALL
MOVWF
CALL
MOVF
MOVWF
MOVLW
SUBWF
CALL
MOVWF
CALL
GOTO

0
STATUS,5
B'01111111'
TRISC
TRISB
STATUS,5
TRANSMISOR
0
TABLA
PORTB
RECEP
REGRX,W
VALOR
.48
VALOR,W
TABLA
PORTB
TRANS
REPETIR

;RUTINA DE TRANSMISION
TRANS

TOTRO

MOVWF
MOVLW
MOVWF
BCF
CALL
BCF
BCF
RRF
BTFSC
BSF
CALL
DECFSZ
GOTO
BSF
CALL
RETURN

REGTX
.8
CONT
TRANSMISOR
RETAR1
TRANSMISOR
STATUS,C
REGTX,F
STATUS,C
TRANSMISOR
RETAR1
CONT,F
TOTRO
TRANSMISOR
RETAR1

INGENIERIA DE DISEO DE PRODUCTO

;DEFINO DATO DE 8 BITS


;INICIALIZO BIT DE START
;LLAMO RUTINA DE 1 BIT
;TX = 0
;CARRY = 0
;ROTO REGISTRO DE TRANSMISION
;PREGUNTO SI CARRY = 0
;NO ES CERO, ENTONCES TX = 1
;SI ES CERO, LLAMO RUTINA DE 1 1 BIT
;DECREMENTO CONTADOR DE # DE BITS
;CONTADOR NO ES CERO, TRANSMITO DATO
;INICIALIZO BIT DE STOP
;LLAMO RUTINA DE 1 BIT
;RETORNO A PROGRAMA PPAL

84

MICROCONTROLADORES

;RUTINA DE RECEPCION DE DATOS


RECEP

ROTRO

CLRF
BTFSC
GOTO
CALL
MOVLW
MOVWF
BCF
BTFSC
BSF
RRF
CALL
DECFSZ
GOTO
RETURN

REGRX
RECEPTOR
RECEP
RETAR2
.8
CONT
STATUS,C
RECEPTOR
STATUS,C
REGRX,F
RETAR1
CONT,F
ROTRO

;ASEGURO LECTURA CORRECTA


;PREGUNTO RX = 0 (INICIO COMUNICACION)
;NO ES CERO (PREGUNTO NUEVAMENTE)
;SI ES CERO, LLAMO RUTINA DE BIT Y MEDIO
;DEFINO DATOS DE 8 BITS
;CARRY = 0
;PREGUNTO LINEA DE RX = 0
;NO ES CERO, ENTONCES CARRY = 1
;EMPAQUETO DATO EN REGISTRO DE RECEPC
;LLAMO RUTINA DE 1 BIT
;DECREMENTO CONTADOR DE # DE BITS
;CONTINUA LA RECEPCION HASTA CONT = 0
;CONT = 0, RETORNO A PROGRAMA PPAL

;RUTINA DE RETARDO PARA TIEMPO DE UN BIT A 9600 BPS


RETAR1
CICLO

MOVLW
MOVWF
DECFSZ
GOTO
RETURN

.32
DELAY
DELAY,F
CICLO

;RUTINA DE RETARDO PARA TIEMPO DE UN BIT Y MEDIO A 9600 BPS


RETAR2
CICLO1

TABLA

MOVLW
MOVWF
DECFSZ
GOTO
RETURN

.50
DELAY
DELAY,F
CICLO1

ADDWF
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW

PCL,F
B 00111111
B 00000110
B 01011011
B 01001111
B 01100110
B 01101101
B 01111100
B 00000111
B 01111111
B 01100111

; PCL + W
; CODIGO PARA EL 0
; CODIGO PARA EL 1
; CODIGO PARA EL 2
; CODIGO PARA EL 3
; CODIGO PARA EL 4
; CODIGO PARA EL 5
; CODIGO PARA EL 6
; CODIGO PARA EL 7
; CODIGO PARA EL 8
; CODIGO PARA EL 9

END

INGENIERIA DE DISEO DE PRODUCTO

85

BIBLIOGRAFIA

ANGULO USATEQUI, Jos Mara. Microcontroladores PIC: Diseo Prctico de


aplicaciones. Segunda Edicin. Editorial Mc Graw-Hill. 1999.

ANGULO USATEQUI, Jos Mara. Microcontroladores PIC: Diseo Prctico de


aplicaciones. Segunda Parte. Editorial Mc Graw-Hill. 2000.

FLOYD, T.L. Fundamentos de Sistemas Digitales. Sexta Edicin


Editorial Prince Hall. 1997

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