Vous êtes sur la page 1sur 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

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

BIBLIOGRAFIA

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 DECIMAL HEXADECIMAL 27 26 25 24 23 22 21 20 ...........103 102 101 100 .............163 162 161 160

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 1 palabra = 16 bits 1 byte = 8 bits 1 nible = 4 bits 1 byte = 1 0 1 0 1100 Nible superior Nible inferior LSB

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 162 161 2 B decimal ? 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
B

1100
C

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 F 1111 Binario ?

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 0010
2

0101
5

2.10

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 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

INGENIERIA DE DISEO DE PRODUCTO

MICROCONTROLADORES

12 13 14 15

1100 1101 1110 1111

C D E F

0001 0010 0001 0011 0001 0100 0001 0101

3. 3.1

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

X=A*B

0 0 1 1

0 1 0 1

0 0 0 1

3.2

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

X=A+B

0 0 1 1

0 1 0 1

0 1 1 1

3.3

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.

A X=A

0 1

1 0

A 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 X

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 X

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 X X = AB + AB A B X

0 0 1 1

0 1 0 1

0 1 1 0

3.7

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 X = AB + A.B A B X

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.
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 1 0 1 1 0 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 0 1 1 1 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).

OR

XOR

5.

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 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

INGENIERIA DE DISEO DE PRODUCTO

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 AB 00 01 11 10 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 0 0 0 0 0 1 1 1 1 1 1 1 0 0 1 0

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 0 0 0 0
AD

0 1 1 1

1 1 1 1

0 0 1 0
CD

BD

ACD

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 A B C D

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 Q

Q
ESTADO PROHBIDO

0 0 1 1

0 1 0 1

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 X S 0 0 1 1 R 0 1 0 1 Q Q 0 1 ?
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.

D 1 0

Ck

Q 1 0

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.
14

INGENIERIA DE DISEO DE PRODUCTO

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 1 2 3 4 5 6 7

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 0

O6 1 g

O5 1 f

O4 1 e

O3 0 d

O2 1 c

O1 1 b

O0 0 a

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. 8.1

ARITMTICA BINARIA 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:
1 10101011 + 01101100 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 10111001+ 10111110 1 01110111 Numero Positivo

Sustraendo 185 66 119

Ejemplo:

Restar
10111001 10111001+ 00011101 11010110 Numero Negativo 11100011 185 227 - 42

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

Memoria de Datos (SRAM)

Bus de Instrucciones

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 PCL STATUS FSR PORTA PORTB PORTC PORTD (1) PORTE (1) PCLATH INTCON PIR1 PIR2 TMR1L TMR1H T1CON TMR2 T2CON SSPBUF SSPCON CCPR1L CCPR1H CCP1CON RCSTA TXREG RCREG CCPR2L CCPR2H CCP2CON ADRESH ADCON0 Registros de Propsito General 96 Bytes 01h 02h 03h 04h 05h 06h 07h 08h 09h 0Ah 0Bh 0Ch 0Dh 0Eh 0Fh 10h 11h 12h 13h 14h 15h 16h 17h 18h 19h 1Ah 1Bh 1Ch 1Dh 1Eh 1Fh 20h

Indirect addr.(*)
OPTION_REG PCL STATUS FSR TRISA TRISB TRISC PORTD (1) PORTE (1) PCLATH INTCON PIE1 PIE2 PCON

80h 81h 82h 83h 84h 85h 86h 87h 88h 89h 8Ah 8Bh 8Ch 8Dh 8Eh 8Fh 90h

SSPCON2 PR2 SSPADD

91h 92h 93h 94h 95h 96h 97h

TXSTA SPBRG

98h 99h 9Ah 9Bh 9Ch 9Dh

ADRESL ADCON1 Registros de Propsito General 80 Bytes

9Eh 9Fh A0h

EFh Mapeados con 70h-7Fh Banco1 F0h FFh

7Fh Banco 0

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# Z DC C

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 0 0 1 1 RP0 0 1 0 1 Banco Seleccionado 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
ADDWF ANDWF CLRF CLRW COMF DECF INCF IORWF MOVF MOVWF NOP RLF RRF SUBWF SWAPF XORWF

PARMETROS
f,d f,d f a,e f,d f,d f,d f,d f,d f ae f,d f,d f,d f,d f,d

OPERACIN

CICLOS

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

INSTRUCCIONES QUE MANEJAN REGISTRO


SUMA de W con f AND de W con f BORRADO de f BORRADO de W COMPLEMENTO de f DECREMENTO de f INCREMENTO de f OR de W con f MOVIMIENTO de f MOVIMIENTO de W a f NO OPERACIN ROTACION de f a izquierda con carry ROTACION de f a derecha con carry 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 1 1

1
1 1 1 1 1 1 1 1 1 1 1

C C C,DC,Z

INSTRUCCIONES QUE MANEJAN BITS


BCF BSF f,b f,b PUESTA a 0 del bit b de f PUESTA a 1 del bit b de f 1 1

INSTRUCCIONES DE <SALTO>
BTFSC BTFSS DECFSZ INCFSZ f,b f,b f,d f,d PRUEBA del bit b de f; SALTA si es 0 PRUEBA del bit b de f; SALTA si es 1 DECREMENTO de f; SALTA si es 0 INCREMENTO de f; SALTA si es 0 1 (2) 1 (2) 1 (2) 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 2 1 2 2 2 2 1 #TO, #PD

#TO,#PD

INGENIERIA DE DISEO DE PRODUCTO

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 Inicio Operacin movlw Operandos 0 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: CONTADOR EQU 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 0

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 END 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

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

INGENIERIA DE DISEO DE PRODUCTO

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 0 5 CONTADOR

LOOP

ORG MOVLW MOVWF NOP NOP NOP DECFSZ GOTO END

; 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 0 .10 NUMERO1 .15 NUMERO1,W STATUS,Z NOIGUAL IGUAL

ORG MOVLW MOVWF MOVLW XORWF BTFSS GOTO GOTO

; 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

INGENIERIA DE DISEO DE PRODUCTO

33

MICROCONTROLADORES

EJEMPLO 3
Programa Diagrama de flujo
INICIO
20

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.

INCLUDE <P16F873,INC>

LIST P=16F873, R=HEX

CONTADOR

EQU

CONTADOR=0
0 0 CONTADOR CONTADOR,F ;incrementa contador .15 CONTADOR,W ; XOR entre W y contador. STATUS,Z LOOP INICIO ;si Z=1 salta una instruccin. ;lleva W al contador ;carga W con o

ORG

INICIO

MOVLW

MOVWF

LOOP

INCF

INCREMENTAR CONTADOR

MOVLW

XORWF

BTFSS

GOTO

SI

Contador=15

NO

GOTO

END

INGENIERIA DE DISEO DE PRODUCTO

34

MICROCONTROLADORES

EJEMPLO 4
Programa
INCLUDE <P16F873.INC> LIST P=16F873, R=HEX EQU EQU EQU 0 .X MULTIPLICANDO .Y MULTIPLICADOR .0 RESULTADO MULTIPLICANDO,W RESULTADO,F MULTIPLICADOR,F LOOP
SI NO

MULTIPLICACION DE DOS NUMEROS ENTEROS

Diagrama de flujo
M U LTIPLIC AC I N

MULTIPLICANDO 21 22

20

C argar m ultiplicando C argar m ultiplicador Carga resultado=0

MULTIPLICADOR

RESULTADO ORG MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF MOVF ADDWF DECFSZ GOTO END

R esultado= resultado+m ultiplicando

D ecrem enta m ultiplicador

LOOP

M ultiplicador=0

EN D

INGENIERIA DE DISEO DE PRODUCTO

35

MICROCONTROLADORES

EJEMPLO 5
Programa Diagrama de flujo
DIVISIN Cargar dividendo Cargar divisor Carga resultado=0 Residuo=dividendo Residuo = residuo-dividendo Incrementa resultado

DIVISION DE DOS NUMEROS ENTEROS Y RESULTADO NUMERO ENTERO

INCLUDE <P16F873.INC> LIST P=16F873, R=HEX EQU EQU EQU EQU 20 21 22 23

DIVIDENDO DIVISOR RESULTADO RESIDUO

LOOP

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

NO

Residuo = 0
SI

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

END
36

INGENIERIA DE DISEO DE PRODUCTO

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:

1 1 1 1 0 0 0 0

RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7


Salida Entrada

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

Si

Rc 2 = 0 ?
No

RB 0 = 0

RB 0 = 1

Programa:
Include LIST <P16F873. INC> P = 16873 = HEX ;LA INSTRUCCIN INCLUDE ME CARGA UN ARCHIVO DONDE SE ENCUENTRAN TODOS LOS REGISTROS CON SUS RESPECTIVAS DIRECCIONES. ;ESTO INDICA QUE EL PROGRAMA COMIENZA EN LA DIRECCIN CERO. ;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.

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

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

LOOP

H1

INGENIERIA DE DISEO DE PRODUCTO

38

MICROCONTROLADORES

EJEMPLO 6
Programa
<P16F873.INC> P=16F873, R=HEX 20

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.

INCLUDE LIST

Diagrama de flujo

CONTADOR

EQU

INICI
CONTADOR=0

SI RC0=1

NO

SI

Cont=15 NO

SI

Cont=0 Cont=1 NO

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 ;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

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

Inc cont

Dec cont

INGENIERIA DE DISEO DE PRODUCTO

39

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

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

FIN

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 EQU EQU ORG MOVLW MOVWF MOVLW MOVWF DECFS2 GOTO DECFS2 GOTO END 20 21 O M CONTADOR 1 N CONTADOR 2 T1=3x N+2 CONTADOR 2, F LOOP CONTADOR 1, F ___________________1 LOOP, ___________________________2

LOOP1 LOOP

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 GOTO LOOP

Subrutina

RETARDO

. . . . . . RETURN

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 EQU EQU EQU ORG MVLW TRIS BSF CALL BCF CALL GOTO MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF DECFSZ GOTO DECFSZ GOTO DECFSZ GOTO RETURN END 20 21 22 0 0 PORTB PORTB,0 RETARDO PORTB,0 RETARDO LOOP .5 REG1 .255 REG2 .255 REG3 REG3,F REP1 REG2,F REP2 REG3,F REP3

LOOP

;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

RETARDO REP3 REP2 REP1

;ESTA COMANDO ME DEVUELVE A UN PASO MS DE DONDE EL RETARDO FUE LLAMADO ;FIN DEL PROGRAMA.

20.

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 EQU ORG MOVLW TRIS BSF CALL BCF CALL GOTO MOVLW MOVWF DECFSZ GOTO RETURN END 20 0 B11111110 PORTB PORTB,0 RETARDO PORTB,0 RETARDO LOOP

;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

LOOP

RETARDO LOOP1

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

INGENIERIA DE DISEO DE PRODUCTO

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
OFF ON OFF OFF OFF

Q3
OFF OFF ON OFF OFF

Q4
OFF OFF OFF ON OFF

PASOS 1 2 3 4 1

Q1
OFF OFF OFF ON OFF

Q2
OFF OFF ON OFF OFF

Q3
OFF ON OFF OFF OFF

Q4
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

Sentido horario
Si

No

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

INGENIERIA DE DISEO DE PRODUCTO

50

MICROCONTROLADORES

Programa:
Include <P16F873> LIST P=16F873 REG2 REG3 EQU EQU 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 MOVLW MOVWF MOVLW MOVWF DECFSZ GOTO DECFSZ GOTO RETURN END 20H 21H 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 .132 REG2 .255 REG3 REG3,F REP1 REG2,F REP2 ;FIN DEL PROGRAMA.

;CONFIGURAR PUERTO B TODO COMO SALIDA. ;CONFIGURA EL PUERTO C COMO ENTRADA. ;PULSADOR DE SELECCIN DE DIRECCION. ;SENTIDO ANTIHORARIO.

SEC LOOP

HOR

;SENTIDO HORARIO.

RETARDO REP2 REP1

INGENIERIA DE DISEO DE PRODUCTO

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 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

INICIO LOOP

; 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

INGENIERIA DE DISEO DE PRODUCTO

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 REG1 REG2 REG3 <P16F873.INC> P= 16F873, R=HEX EQU EQU EQU 20H 21H 22H

LOOP

REP

ORG MOVLW TRIS CLRF BSF CALL BSF RLF CALL BTFSS GOTO

0 0 PORTB PORTB PORTB,0 RETARDO STATUS,C PORTB,F RETARDO PORTB,7 REP STATUS,C PORTB,F RETARDO PORT B,O LOOP 10 LOOP

;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

LOOP 10

BCF RRF CALL BTFSS GOTO GOTO

RETARDO REP3 REP2 REP1

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

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

;FIN DEL PROGRAMA

INGENIERIA DE DISEO DE PRODUCTO

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
X X X X X X X X X X

RB6 g
0 0 1 1 1 1 1 0 1 1

CODIGO 7 SEGMENTOS RB5 RB4 RB3 RB2 f e d c


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

RB1 b
1 1 1 1 1 0 0 1 1 1

RB0 a
1 0 1 1 0 1 0 1 1 1

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 CALL MOVWF . VALOR,W TABLA PORTB CARGAR EN W VALOR A MOSTRAR LLAMAR TABLA DE DATOS MOSTRAR VALOR EN PORTB

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

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 GOTO CALL BTFSS GOTO GOTO . PORTC,1 LOOP RET200ms PORTC,1 FALSO INCREM SI RC1 = 1, IGNORE LA SIGUIENTE INSTRUCCIN SALTA A LOOP LLAMA RETARDO DE 200 MS SI RC1 = 1, IGNORE LA SIGUIENTE INSTRUCCIN SALTA A FALSO 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 REG REG REG

EQU EQU EQU EQU ORG MOVLW TRIS MOVLW MOVWF MOVF CALL MOVWF CALL INCF MOVLW XORWF BTFSC GOTO GOTO MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF DECFSZ GOTO DECFSZ GOTO DECFSZ GOTO RETURN

20 21 22 23 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 .10 REG1 .132 REG2 .255 REG3 REG3,F REP1 REG2,F REP2 REG1,F REP3

INICIO LOOP

RET1S REP3 REP2 REP1

TABLA

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

; 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.

INGENIERIA DE DISEO DE PRODUCTO

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 ADDWF RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW 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 ; 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

TABLA

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

RETARDO

MOVLW MOVWF

.255 REG1 REG1,F RET1

RET1

DECFSZ GOTO 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 MOVLW TRIS MOVLW TRIS MOVLW MOVWF MOVLW MOVWF MOVF CALL MOVWF MOVLW MOVWF CALL MOVF CALL MOVWF MOVLW MOVWF CALL GOTO RETARDO REP TABLA MOVLW MOVWF DECFSZ GOTO ADDWF RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW MOVLW MOVWF DECFSZ GOTO RETURN END 20H 21H 22H 0 PORTB 0 PORTC .7 VALOR 2 .5 VALOR 1 VALOR 1,W TABLA PORTB .1 PORT C RETARDO VALOR 2,W TABLA PORT B .2 PORTC RETARDO LOOP1 .255 R12 R12,F REP PCL,F B 00111111 B 00000110 B 01011011 B 01001111 B 01100110 B 01101101 B 01111100 B 00000111 B 01111111 B 01100111 .255 REG1 REG1,F RET1 ;FIN DEL PROGRAMA.

;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).

LOOP 1

;RETARDO DE 1 mS APROX.

; 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 RET1

INGENIERIA DE DISEO DE PRODUCTO

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
0 0 0 0 1 1 1 1

PS1
0 0 1 1 0 0 1 1

PS0
0 1 0 1 0 1 0 1

DIVISION DEL TMR0


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 : : BSF 0 Inicio 4 INTER

STATUS,5

; CAMBIAR AL BANCO 1 DE MEMORIA ; 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

BSF OPTION REG, INTEDG BCF STATUS,5 BCF INTCON, INTF BSF INTCON, GIE BSF INTCON, INTE : : : INTER BCF INTCON, INTE BCF INTCON, INTF

; DESHABILITA LA INTERRUPCIN POR RB0 ; BORRA SEALIZADOR DE INTERRUPCIN POR RB0

: : : :

PROGRAMA QUE DEBE EJECUTAR LA INTERRUPCIN

BSF INTCON, INTF RETFIE

; HABILITA LA INTERRUPCIN POR RB0 ; 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

Para la interrupcin:
INICIO

CALL Mostrar

Incrementar Unidades

Unidades = 10

Si

Decenas = 9
Si

NO

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 EQU EQU EQU EQU EQU 20 21 23 24 25

ORG GOTO ORG GOTO ORG 6 MOVLW TRIS

0 INICIO 4 INTER

;SALTA A INICIO ; SALTA A EJECUTAR LA INTERRUPCIN

INICIO

1 PORTB

; CONFIGURA EL PORTB COMO SALIDA Y RB0 COMO ENTRADA

MOVLW 0 TRIS PORTC BSF STATUS,5 BSF OPTION_REG,INTEDG BSF BCF BSF BSF CLRF CLRF CALL GOTO MOVF CALL MOVWF BSF BCF CALL MOVF CALL MOVWF BSF BCF CALL RETURN MOVLW MOVWF DECFSZ GOTO RETURN

; 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 ; HABILITA LAS INTERRUPCIONES ; PONE EN CERO LAS UNIDADES ; PONE EN CERO LAS DECENAS

LOOP

INTCON,GIE UNID DECE MOSTRAR LOOP DECE,W TABLA PORTB PORTC,4 PORTC,5 RETARDO UNID,W TABLA PORTB PORTC,5 PORTC,4 RETARDO

MOSTRAR

RETARDO REP

0FFH REG1 REG1,F REP

INGENIERIA DE DISEO DE PRODUCTO

71

MICROCONTROLADORES

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

INTER

BCF INTCON,INTE BCF INTCON,INTF INCF MOVLW XORWF BTFSS GOTO MOVLW XORWF BTFSS GOTO CLRF CLRF GOTO UNID,F .10 UNID,W STATUS,Z LOOP1 .9 DECE,W STATUS,Z DECREM UNID DECE LOOP1

; DESHABILITA INTERRUPCION POR RB0 ; BORRA SEALIZADOR DE INTERRUPCION ; POR RB0

DECREM

LOOP1

INCF CLRF CALL BSF RETFIE

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

RET100 LOOP3 LOOP2

MOVLW MOVWF MOVLW MOVWF CALL DECFSZ GOTO DECFSZ GOTO RETURN END

2 REG3 .255 REG2 MOSTRAR REG2,F LOOP2 REG3,F LOOP3

;FIN DEL PROGRAMA

INGENIERIA DE DISEO DE PRODUCTO

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

-------

-------

-------

PCFG3

PCFG2

PCFG1

PCFG0

PCFG2:PCFG0 000 001 010 011 100 101 11X

RA0 A A A A A A D

RA1 A A A A A A D

RA2 A A A A D D D

RA5 A A A A D D D

RA3 A VREF A VREF A VREF D

VREF 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 REG1 REG2 REG3 REG4 ORG MOVLW TRIS TRIS BSF MOVLW MOVWF BCF MOVLW MOVWF CALL EQU EQU EQU EQU 20 21 22 23

0 0 PORTB PORTC STATUS,5 80 ADCON1 STATUS,5 1 ADCON0 RETARDO

; 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

REP3

INGENIERIA DE DISEO DE PRODUCTO

77

MICROCONTROLADORES

REP1 REP

BSF BTFSC GOTO MOVF MOVWF BSF MOVF BCF MOVWF CALL GOTO

ADCON0,2 ADCON0,2 REP ADRESH,W PORTC STATUS,5 ADRESL,W STATUS,5 PORTB RETD REP3

; INICIA LA CONVERSIN ; 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)

RETARDO REP4

MOVLW MOVWF DECFSZ GOTO RETURN

.255 REG4 REG4,F REP4

RETD REP6 REP2 REP7

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

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

; FIN DEL PROGRAMA.

INGENIERIA DE DISEO DE PRODUCTO

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 Bus de Control EQUIPO

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 EQUIPO Rx GND Rx GND Tx EQUIPO

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 ?
Si

No

Colocar Tx en bajo

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

No

Esta la lnea Rx en bajo

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 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

REPETIR

;RUTINA DE TRANSMISION TRANS 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

;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

TOTRO

INGENIERIA DE DISEO DE PRODUCTO

84

MICROCONTROLADORES

;RUTINA DE RECEPCION DE DATOS RECEP 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

ROTRO

;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 MOVLW MOVWF DECFSZ GOTO RETURN ADDWF RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW END .50 DELAY DELAY,F CICLO1

TABLA

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

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

Vous aimerez peut-être aussi