COMPENDIO DE PRÁCTICAS

38
INSTITUTO POLITECNICO NACIONAL [COMPENDIO DE PRÁCTICAS] Alumno: Oscar Eduardo Martínez Flores Grupo: 6CM9 MICROPROCESADORES Prof. Jesús Jaime Moreno Escobar

Transcript of COMPENDIO DE PRÁCTICAS

Page 1: COMPENDIO DE PRÁCTICAS

INSTITUTO

POLITECNICO

NACIONAL

[COMPENDIO DE PRÁCTICAS]Alumno: Oscar Eduardo Martínez FloresGrupo: 6CM9

MICROPROCESADORES

Prof. Jesús Jaime Moreno Escobar

Page 2: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

i

o OBJETIVOSo GENERAL iiio PARTICULARES iii

1. INTRODUCCIONES

1.1. Decodificación de dos memorias 11.1.1. Memoria ROM1.1.2. Contador de décadas 74LS1901.1.3. Compuerta inversora con Schmitt Trigger

1.2. Decodificación de cuatro memorias 31.2.1 Decodificadores

1.3. Encendido y apagado de led´s con subrutina de retardo 41.3.1. PIC18F4550

1.4. Librerías y programa Espejo en Ensamblador 61.4.1. Microprocesador (PIC 18F4550)

1.5. Programa cuenta ascendente/descendente 6

1.6. Programa codificar/decodificar mensaje 71.6.1. Codificar y decodificar mensaje

1.7. Acceso a Memoria 71.7.1. Puerto Programable 82C55

1.8. Acceso a Memoria ascendente/descendente 8

1.9. Teclado Matricial 8

I N D I C E

Page 3: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

ii

2. DESARROLLOS

2.1. Decodificación de dos memorias 9

2.2. Decodificación de cuatro memorias 11

2.3. Encendido y apagado de led´s con subrutina de retardo 13

2.4. Librerías y programa Espejo en Ensamblador 16

2.5. Programa cuenta ascendente/descendente 19

2.6. Programa codificar/decodificar mensaje 21

2.7. Acceso a Memoria 23

2.8. Acceso a Memoria ascendente/descendente 28

2.9. Teclado Matricial 30

3. CONCLUSIONES

3.1. Decodificación de dos memorias 32

3.2. Decodificación de cuatro memorias 32

3.3. Encendido y apagado de led´s con subrutina de retardo 32

3.4. Librerías y programa Espejo en Ensamblador 32

3.5. Programa cuenta ascendente/descendente 32

3.6. Programa codificar/decodificar mensaje 33

3.7. Acceso a Memoria 33

3.8. Acceso a Memoria ascendente/descendente 33

3.9. Teclado Matricial 33

Page 4: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

iii

OBJETIVO GENERAL

El alumno diseñará y construirá una microcomputadora basada en unmicroprocesador moderno, para aplicaciones de cómputo, control industrial,telecomunicaciones e instrumentación digital.

OBJETIVOS PARTICULARES

Decodificación de dos memoriaso Diseñar un decodificador que maneje dos memorias ROM 2816

Decodificación de cuatro memoriaso Diseñar un decodificador que maneje cuatro memorias ROM 2816

Encendido y apagado de led´s con subrutina de retardoo Conocer y familiarizarse con el microcontrolador Pic18F4550.o Familiarizarse con el software requerido para crear programas, y así,

programarlo.o Asimismo, realizar programas básicos de reconocimiento del dispositivo y

sus funciones esenciales para el dominio del mismo.

Librerías y programa Espejo en Ensambladoro Diseñar un programa que refleje lo que hay en la entrada del sistema

mínimo, a la salida del mismo.

Programa cuenta ascendente/descendenteo Diseñar un programa que cuente de forma ascendente si a la entrada hay

un número par, y descendente si es impar.

Programa codificar/decodificar mensajeo Diseñar un programa que codifique un mensaje a la entrada con una llave y

con el mensaje codificado anterior, lo muestre a la salida y despuésdecodifique el mensaje con la misma llave y con el mismo mensajecodificado anterior.

Page 5: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

iv

Acceso a Memoriao Diseñar un programa que acceda a la memoria y muestre el contenido de

cada localidad en un display de 7 segmentos y en 8 led’s

Acceso a Memoria ascendente/descendenteo Diseñar un programa que acceda a la memoria y muestre el contenido de

cada localidad de forma ascendente y descendente en un display de 7segmentos.

Teclado Matricialo Diseñar un programa que muestre en los display’s el numero de equipo y se

recorran los números a la izquierda, el nuevo digito será el oprimido en elteclado matricial.

Page 6: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

1

1. INTRODUCCIONES

1.1. Decodificación de dos memorias

1.1.1. Memoria ROM

La memoria ROM, (read-only memory) o memoria de sólo lectura, es la memoriaque se utiliza para almacenar los programas que ponen en marcha el ordenador yrealizan los diagnósticos.

Las memorias tienen un tamaño de palabra de 8 bits.

Tabla 1.1.1. Tamaños de memorias.

16 2k*8 A0-A10 Q0-Q732 4k*8 A0-A11 Q0-Q764 8k*8 A0-A12 Q0-Q7

128 16k*8 A0-A13 Q0-Q7256 32k*8 A0-A14 Q0-Q7512 64k*8 A0-A15 Q0-Q7010 128k*8 A0-A16 Q0-Q7

Para determinar el tamaño de una memoria se tiene que dividir el numero de lamemoria entre 8 bits, es decir, para una memoria XX16 dividimos 16/8=2 entoncesesta memoria tiene 2KB de direcciones y un rango de memoria de 0 →7FF paraesta memoria tenemos un bus de direcciones de A0-A10. La memoria que sigue esuna XX32 se hace el mimo procedimiento y observamos que esta memoria tiene4KB de direcciones, su bus de direcciones aumenta en una dirección más que laanterior, por efecto su rango de memoria aumenta (0 → FFF). (Ver tabla 1.1.2).

Figura 1.1.1. Diagrama de una memoria.

Page 7: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

2

Tabla 1.1.2. Rangos de memorias.

Memoria Bus deDatos (bits) Bus de Direcciones Tamaño Dir Rango memoria

XX16 8 A0-A10 2KB 07FFXX32 8 A0-A11 4KB 0FFFXX64 8 A0-A12 8KB 01FFF

XX128 8 A0-A13 16KB 03FFFXX256 8 A0-A14 32KB 07FFFXX512 8 A0-A15 64KB 0FFFFXX010 8 A0-A16 128KB 01FFFF

Tabla 1.1.3. Rango de la memoria 2816.

A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 Mapa (H)0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00000 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 07FF

1.1.2. Contador de décadas 74LS190

El contador MOD 10 se conoce también como contador de décadas. De echo uncontador de décadas es cualquier contador que tenga 10 estados diferentesindependientemente de la secuencia. Estos también se denominan contadoresBCD para reiterar lo dicho cualquier contador MOD 10 es un contador de décadasy cualquier contador de décadas que cuenta en binario de 0000 a 1001 es uncontador BCD.(Ver Figura 2).

Figura 1.1.2. Distribución de pines del 74Ls190

Page 8: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

3

1.1.3. Compuerta inversora con Schmitt Trigger

El schmitt trigger es un comparador con histéresis, que se encarga de producir unpulso de disparo cuando el valor de voltaje en su entrada esta dentro de un rangoespecifico, determinado por su ventana de histéresis.(Ver Figura 3).

Figura 1.1.3. Símbolo del 74LS14

1.2. Decodificación de cuatro memorias

1.2.1. Decodificadores

Es un circuito combinacional, tal que cada línea de salida será activada para unasola de las combinaciones posibles de entrada. Estos circuitos, normalmente, sesuelen encontrar como decodificador / demultiplexor. Esto es debido a que undemultiplexor puede comportarse como un decodificador. (Ver Tabla 1.1.2.1)

Entradas SalidasA B D3 D2 D1 D00 0 0 0 0 10 1 0 0 1 01 0 0 1 0 01 1 1 0 0 0

Tabla 4.1.2.1. Tabla de Verdad de un decodificador

Page 9: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

4

1.3. Encendido y apagado de led´s con subrutina de retardo

1.3.1. PIC18F4550

Los PIC son una familia de microcontroladores tipo RISCreducedinstruction setcomputer fabricados por Microchip.Al tener este tipo de arquitectura es caracterizada por:

Codificación uniforme de instrucciones (ejemplo: el código de operación seencuentra siempre en la misma posición en cada instrucción, la cual essiempre una palabra), lo que permite una decodificación más rápida.

Un conjunto de registros homogéneo, permitiendo que cualquier registrosea utilizado en cualquier contexto y así simplificar el diseño del compilador(aunque existen muchas formas de separar los ficheros de registro deentero y coma flotante).

Modos de direccionamiento simple con modos más complejosreemplazados por secuencias de instrucciones aritméticas simples.

GAMAS DE PIC'S

Los PIC'S se clasifican por distintas gamas, cada una con sus propiascaracterísticas:

1ª. Microcontroladores de arquitectura cerrada

Cada modelo se construye con un determinado CPU, ciertacapacidad de memoria de datos, cierto tipo y capacidad dememoria de instrucciones, un número de E/S y un conjuntode recursos auxiliares muy concreto. El modelo no admitevariaciones ni ampliaciones. La aplicación a la que sedestina debe encontrar en su estructura todo lo que precisay, en caso contrario, hay que desecharlo.

2ª. Microcontroladores de arquitectura abierta

Estos microcontroladores se caracterizan porque, además de disponer de unaestructura interna determinada, pueden emplear sus líneas de E/S para sacar alexterior los buses de datos, direcciones y control, con lo que se posibilita laampliación de la memoria y las E/S con circuitos .integrados externos. Microchipdispone de modelos PIC con arquitectura abierta, sin embargo, esta alternativa seescapa de la idea de un microcontrolador incrustado y se asemeja a la. soluciónque emplean los clásicos microprocesadores.

Page 10: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

5

La mayoría de los sistemas de control incrustados requieren CPU, memoria dedatos, memoria de instrucciones, líneas de E/S, y diversas funciones auxiliarescomo temporizadores, comunicación serie y otras. La capacidad y el tipo de lasmemorias, el número de líneas de E/S y el de temporizadores, así como circuitosauxiliares, son parámetros que dependen exclusivamente de la aplicación y varíanmucho de unas situaciones a otras.

Con las tres gamas de PIC se dispone de gran diversidad de modelos yencapsulados, pudiendo seleccionar el que mejor se acople a las necesidades deacuerdo con el tipo y capacidad de las memorias, el número de líneas de E/S y lasfunciones auxiliares precisas. Sin embargo, todas las versiones están construidasalrededor de una arquitectura común, un repertorio mínimo de instrucciones y unconjunto de opciones muy apreciadas, como el bajo consumo y el amplio margendel voltaje de alimentación.

CARACTERISTICAS DEL PIC18F4550

Frecuencia de operación hasta 48 Mhz memoria de programa 32768/1024 = 32k bytes memoria RAM de datos 2048/1024 = 2k bytes Memoria EEPROM datos 256/1024 = .25k = 256 bytes Interruptores 20 Reset 35 líneas se comportan como puertos de entrada o salida 1 temporizador 1 modulo de comparación Canales de comunicación serie MSSP,EUSART 1 Canal usb 1 punto paralelo de transmisión de datos 13 canales de conversión A/D de 10 bits 2 Comparadores lógicos 75 Instrucciones en su set Encapsulado PDIP 40 pines Forma del chip OFN 40 pines

El PIC18f4550 posee 5 puertos con la siguiente configuración:

Puerto A -> A0 – A5 Puerto B -> 8 bits Puerto C -> 7bits Puerto D -> 4 bits Puerto E -> 3bits (pero no se utiliza)

Page 11: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

6

También posee acumuladores y banderas para auxiliarse sobre las operacionesque realiza la ALU (Unidad Lógica Aritmética), que es la encargada de realizartodas las operaciones lógicas-aritméticas que demanda el programa del PIC.

NEMONICOS

Un nemónico es un dato simbólico que identifica a un comando generalmentenumérico (binario, octal, hexadecimal) de una forma más sencilla que sunumeración original, lo cuál facilita radicalmente la memorización de este comandopara el programador.

Al igual que en C++ los nemónicos son palabras reservadas para el programa, lalista de estos nemónicos se componen de 63 palabras usadas únicamente por elprograma que hacen referencia a las distintas funciones y operaciones que puederealizar propiamente el PIC.

1.4. Librerías y programa Espejo en Ensamblador

1.4.1. Microprocesador (PIC 18F4550)

Es el encargado de ejecutar los programas; desde el sistema operativo hasta lasaplicaciones de usuario; sólo ejecuta instrucciones programadas en lenguaje debajo nivel, realizando operaciones aritméticas y lógicas simples, tales como sumar,restar, multiplicar, dividir, las lógicas binarias y accesos a memoria.

Esta unidad central de procesamiento está constituida, esencialmente, porregistros, una unidad de control, una unidad aritmética lógica (ALU).

En esta ocasión usaremos un microcontrolador como microprocesador.

Un microcontrolador es un circuito integrado o chip que incluye en su interior lastres unidades funcionales de una computadora: CPU, Memoria y Unidades de E/S,es decir, se trata de un computador completo en un solo circuito integrado.

Para más información sobre el microcontrolador ver archivo pdf pic18F4550

1.5. Programa cuenta ascendente/descendente

Uso de la misma teoría de la práctica anterior.

Page 12: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

7

1.6. Programa codificar/decodificar mensaje

1.6.1. Codificar y decodificar mensaje

Para codificar un mensaje se aplica una XOR al mensaje que se desea transmitircon una llave (contraseña) y se obtiene un mensaje codificado, para poderrecuperar el mensaje transmitido se vuelve a aplicar una XOR pero ahora almensaje codificado con la misma llave y se obtiene el mensaje original.

1.7. Acceso a Memoria

1.7.1. Puerto Programable 82C55

Dispone de un total de 24 líneas de E7S. Los canales se queden agrupar enpuertas, según tres modos diferentes de programación. Sus característicasbásicas son:

24 líneas de E/S programables. Compatible con niveles TTL. Control Set/Reset sobre cualquier línea. Alimentación simple de 5V. Encapsulado DIL 40. Potencia de disipación 1W.

1011 llave1001mensaje0010 mensaje codificado1011 llave1001mensaje

⨁⨁

Page 13: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

8

1.8. Acceso a Memoria ascendente/descendente

Uso de la misma teoría de la práctica anterior.

1.9. Teclado Matricial

Los teclados matriciales son ensamblados en forma de matriz de 4x4, (para estecaso) 16 teclas configuradas en 4 columnas y 4 filas. Cuando no se ha oprimidoninguna tecla, (teclas abiertas) no hay conexión entre renglones y columnas.Cuando se oprime una tecla se hace una conexión entre la columna y la fila de latecla.

Page 14: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

9

2.1. Decodificación de dos memorias

Diseñar un decodificador para un microprocesador 20/8 que maneje dos memorias2816. Permitiendo foldback. (Ver Tabla 2.1.2.1.)

Una vez colocados los datos de las memorias que se usarán (ver tabla 2.1.2.1.),se observa que se tienen 2 memorias XX16 ya que se tiene el mismo bus dedirecciones y por ende el mismo rango de memoria, pero como el micro no esinteligente se puede obligar a que trabajen una memoria tras de otra, es decir,como si fuera una sola memoria. Al último valor de la primer memoria se le sumauno, para que la otra memoria quede enseguida de la primera.

Se observa que A11 cambia en dos estados y de A12 en adelante se repite lamisma secuencia. Esto quiere decir que A11 nos servirá como decodificador,aunque solo es una compuerta inversora no ayuda a pasar de una memoria a otra.Y de A12 en adelante se ocupa para el foldback.

Tabla 2.1.2.1. Asignación de direcciones para cada memoria

A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 Memoria Mapa (H) Micro(H)0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

A0000 0000

0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 07FF 07FF

0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0B

0000 0800

0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 07FF 0FFF

Memoria 2816Foldback

Decodificador

Page 15: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

10

Código para programar las memorias 2816: (Ver Tabla 2.1.2.2.).

Tabla 2.1.2.2.a. Código para memoria A

0 a b c d e f g Carac. Hex.0 1 1 0 1 1 0 1 2 6D0 1 1 1 1 1 1 0 0 7E0 1 1 1 1 1 1 0 0 7E0 1 1 1 1 1 1 1 8 7F0 1 1 1 1 0 0 1 3 790 1 1 1 1 1 1 0 0 7E0 1 1 1 1 1 1 0 0 7E0 1 0 1 1 0 1 1 5 5B0 0 0 1 1 1 1 1 6 1F0 1 0 1 1 0 1 1 5 5B0 1 0 0 1 1 1 0 C 4E0 0 0 0 1 1 1 0 L 0E0 1 1 1 0 1 1 1 A 770 1 0 1 1 0 1 1 S 5B0 1 0 0 1 1 1 1 E 4F0 1 0 1 1 0 1 1 S 5B0 0 0 0 0 0 0 0 000 0 1 1 1 1 0 1 D 3D0 1 0 0 1 1 1 1 E 4F0 0 0 0 0 0 0 0 000 1 1 1 0 1 1 1 A 770 0 1 1 1 1 1 0 U 3E0 0 0 0 1 1 1 1 T 0F0 1 1 1 1 1 1 0 O 7E0 1 0 0 1 1 1 0 C 4E0 1 1 1 0 1 1 1 A 770 0 1 1 1 1 0 1 D 3D0 0 0 0 0 0 0 0 000 0 1 1 0 0 1 1 Y 330 0 0 0 0 0 0 0 000 0 1 1 1 1 0 1 D 3D0 1 0 0 1 1 1 1 E 4F0 0 0 0 0 0 0 0 000 1 0 0 1 1 1 0 C 4E0 1 1 1 0 1 1 1 A 770 0 0 0 1 1 1 0 L 0E0 1 0 0 1 1 1 0 C 4E0 0 1 1 1 1 1 0 U 3E0 0 0 0 1 1 1 0 L 0E0 1 1 1 1 1 1 0 O 7E

Tabla 2.1.2.2.b. Código para memoria B

0 a b c d e f g Carac. Hex.0 0 1 1 0 1 1 1 H 370 0 0 1 1 1 0 1 O 1D0 0 0 0 1 1 1 0 L 0E0 1 1 1 0 1 1 1 A 770 0 0 0 0 0 0 0 000 0 0 1 1 1 1 1 B 1F0 1 0 0 1 1 1 1 E 4F0 0 0 1 1 1 1 1 B 1F0 1 1 1 0 1 1 1 A 770 0 0 0 0 0 0 0 000 1 1 0 0 1 1 1 P 670 0 0 1 1 1 0 1 O 1D0 0 0 0 1 1 1 0 L 0E0 0 0 0 0 1 1 0 I 060 0 0 0 0 0 0 0 000 0 0 0 0 1 1 0 I 060 0 0 0 0 0 0 0 000 1 0 0 1 1 1 0 C 4E0 0 0 0 0 0 0 0 000 1 0 0 1 1 1 1 E 4F0 0 0 1 0 1 0 1 N 150 1 0 0 1 1 1 1 E 4F0 0 0 1 0 1 0 1 N 150 1 1 1 0 1 1 1 A 770 0 0 0 0 0 0 0 000 1 0 0 0 1 1 1 F 470 0 0 0 0 1 1 0 I 060 1 0 0 1 1 1 0 C 4E0 0 1 1 0 1 1 1 H 370 0 1 1 1 1 1 0 U 3E0 0 1 1 0 1 1 1 H 370 1 1 1 0 1 1 1 A 770 1 0 1 1 0 1 1 S 5B0 0 0 0 1 1 1 1 T 0F0 1 1 1 0 1 1 1 A 770 0 0 0 1 1 1 0 L 0E0 0 1 1 1 1 1 0 U 3E0 1 0 0 1 1 1 1 E 4F0 1 1 1 1 0 1 1 G 7B0 0 0 1 1 1 0 1 O 1D

Page 16: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

11

Implemente el siguiente circuito para observar los mensajes grabados en las memorias.

2.2. Decodificación de cuatro memorias

Diseñar un decodificador para un microprocesador 20/8 que maneje dos memorias2816. Permitiendo foldback. (Ver Tabla 2.1.2.1.)

Tabla 2.1.2.1. Asignación de direcciones para cada memoria

A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 Memoria Mapa (H) Micro(H)0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 A 0000 00000 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 07FF 07FF

0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0B

0000 0800

0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 07FF 0FFF

0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0C

0000 1000

0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 07FF 17FF

0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0D

0000 1800

0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 07FF 1FFF

Memoria 2816Foldback

Decodificador

Page 17: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

12

Código para programar las memorias 2816: (Ver Tabla 2.1.2.2. de la practica #1).

Implemente el siguiente circuito para observar los mensajes grabados en lasmemorias.

Page 18: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

13

2.3. Encendido y apagado de led´s con subrutina de retardo

Comenzamos a crear el programa en el software MAPLAB. Como lo vimos enclase,cada instrucción ocupa 1 ciclo de reloj para ejecutarse. Por lo que, utilizamosel reloj interno del PIC 18F4550, en el cual, cada instrucción se ejecuta en(1/4MHZ)*4 o lo que es lo mismo 1uS.El programa ejecuta 5 instrucciones mientras los leds están encendidos y otras 5mientras están apagados, así que encienden 5uS y apagan otros 5uS. Al ver elfuncionamiento en el proto veremos que los leds nunca se apagan, ¿cómohacemos para que esto se alcance a ver? La respuesta la tenemos al utilizar unretardo al encender los leds y otro al apagarlos.El principio del retardo es contar descendentemente desde un número dado y almomento de que la cuenta llega a cero dejar de contar. El cero indica el fin delretardo y una vez concluido puede continuar la ejecución del programa y asísucesivamente.

Lo primero es definir nuestras constantes que usaremos como contador, en estecasocnt1, cnt2, cnt3. Cabe mencionarque al momento de definir la constante conla directiva equ lo que hacemos es declarar la dirección del registro que usaremoscomo cnt1,... Esto es, que si declaramos cnt1equ 0x20 no significa que cuentavaya a valer 0x20, sino que en esa dirección estará ese registro.

Habiendo declarado lasconstantes y después de cargar ese registro con un valorpodemos realizar la rutina de retardo. Para eso decrementamoscnt3 por 1 hastaque el valor llegue a 0. De esto se encarga la instrucción decfsz. Su sintaxisesdecfszf,d donde f es el registro que queremos decrementar y d es el destino enel que guardamos el resultado, si d=0 el resultado se guarda en el registro W, sid=1 el resultado se guarda en el mismo registro f. decfsz cnt3,1decrementa elvalor de cnt3 en 1 y guarda el resultado en el mismo registro cnt3. Paraasegurarnos de que decfsz se ejecute hasta que el registro llegue a 0 utilizamos lainstrucción goto para estar volviendo hasta que la cuenta termine su proceso.

Page 19: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

14

Entonces el nuevo código queda de la siguiente manera:

;------Encabezado-------------------LIST P=18F4550, F=INHX32 ;directiva para definir el procesador#include<P18F4550.INC>;procesador

;------Declaracion de variables-----PORTA equ 0x06cnt1equ 0x20cnt2equ 0x21cnt3 equ 0x22;------Configuracion de puertos-----RESET_VECTOR ORG 0 ;vector de resetgoto _Reset ;ir a la memoria del programa ;este programa se ejecutara siempre q ocurra un reset

ORG 0x1000 ;inicio de memoria de programa_ResetgotoMain ;se va al inicio del codigo principalMaincall Retardo ;llama a Retardo

;------Enciende y apaga el led-----ciclomovlw .0movwf PORTA ;Bits de salida en 1call Retardo ;llama a Retardomovlw .255movwf PORTA ;bits de salida en 0call Retardo ;llama a Retardogoto ciclo ;repita todo de nuevo;------Rutina de Retardo------Retardomovlw .250 ;se cargan los contadores, cnt1,movwf cnt1 ;cnt2 y cnt3 con sus respectivos valoresPaso2 movlw .250movwf cnt2paso3 movlw .80movwf cnt3paso4 decfsz cnt3,1;aqui comienza a decrementargoto paso4 ;cuando cnt3 llegue a 0decfsz cnt2,1 ;se le decrementa 1 a cnt 2goto paso3 ;cuando cnt2 allegue a 0

decfsz cnt1,1 ;se le decrementa 1 a cnt 1goto paso2 ;cuando cnt2 allegue a 0return;regreso al llamado del retardoEND ;se acabo

Ahora las únicas instrucciones nuevas son call y return. call se utiliza paramandar llamar una rutina, en este caso la Rutina de Retardo.

Recordemos que en la declaración de variables los registros 0x20, 0x21 y0x22 fueron nombrados como cnt1, cnt2 y cnt3 respectivamente.

Como podemos ver, decfsz cnt3,1 lo que hace esdecrementar cnt3, si aldecrementarda cero se salta una línea. El 1que sigue a cnt3, indica queguarde el valor de cnt3 decrementado en el mismo cnt3, esto es como....contador=contador-1 solo que visto de distinta forma.

Page 20: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

15

goto, es saltar y goto paso4 es saltar a la etiqueta paso4. En estapequeña vuelta estoy decrementando cnt3 hasta que se haga cero.

Cuando cnt3 llegue a 0, ahora decrementa cnt2 en una unidad, volveré acargar cnt3 y éste se decrementará nuevamente para recién restarle otraunidad a cnt2, y así... hasta que cnt2 se haga cero. Cuando eso ocurraahora se decrementará cnt1 en una unidad, se cargaránuevamente cnt2 ycnt3, para luego decrementarlos de nuevo, todo esto ocurrirá hasta quereg1 se haga igual a cero.

Una vez cargado el programa en el PIC, ensamblamos el sig. Diagrama delcircuito con el programa funcionando.

Page 21: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

16

2.4. Librerías y programa Espejo en Ensamblador

Empezamos con el diseño de las librerías que permitirán la comunicación con losdemás dispositivos, (memoria, puertos I/O, y puerto programable).

Librería DIRC

void DIRC (ADR)

paso1: PORTD=0XE0paso2: PROGB= SALIDA

PORTB= ADRpaso3: PORTD=0x60

DIRCMOVLW 0xE0MOVWF PORTDMOVLW 0x00MOVWF TRISBNOPMOVFF ADR,PORTBMOVLW 0x60MOVWF PORTDRETURN

void PORTOUT (DATO_OUT)

PASO1: ADR=8PASO2: LLAMAR A DIRCPASO3: PORTD=0x21PASO4: PROGB= SALIDAS

PORTB= DATO_OUT

PORTOUTMOVLW 0x08MOVWF ADRCALL DIRCMOVLW 0x21MOVWF PORTDMOVLW 0x00MOVWF TRISBNOPMOVFF DATO_OUT, PORTBRETURN

Page 22: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

17

void PORTOUT (DATO_OUT)

PASO1: ADR=4PASO2: LLAMAR A DIRCPASO3: PORTD=0x41PASO4: PROGB= ENTRADAS

DATO_IN=PORTB

PORTINMOVLW 0x04MOVWF ADRCALL DIRCMOVLW 0x41MOVWF PORTDMOVLW 0xFFMOVWF TRISBNOPMOVFF PORTB, DATO_INRETURN

DATO_IN RDMEM (ADR)

PASO1: LLAMAR A DIRCPASO2: PORTD=0x40PASO3: PROGB= ENTRADASPASO4: DATO_IN=PORTB

RDMEMCALL DIRCMOVLW 0x40MOVWF PORTDMOVLW 0xFFMOVWF TRISBNOPMOVFF PORTB, DATO_INRETURN

Page 23: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

18

PROGRAMA PRINCIPAL: “REFLEJA LO QUE HAY EN LA ENTRADA DELSISTEMA A LA SALIDA”

PASO1: PORTOUT=PORTINPASO2: IR AL PASO1

PASO1CALL PORTINMOVFF DATO_IN, DATO_OUTCALL PORTOUTGOTO PASO1

Page 24: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

19

2.5. Programa cuenta ascendente/descendente

Usando las librerías de la práctica anterior se diseño un programa para contar deforma ascendente/descendente dependiendo del valor a la entrada.

PASO1: CUENTA=0PASO2: DATO_IN= PORTINPASO3: VERIFICAR EL BIT “0” DE DATO_IN

SI ES “1” IR A PASO4SI ES “0” IR A PASO6

PASO4: CUENTA= CUENTA-1PASO5: IR AL PASO7PASO6: CUENTA= CUENTA+1PASO7: PORTOUT (CUENTA)PASO8: LLAMAR A RETARDOPASO9: IR AL PASO2

CLRF CUENTASTEP2 CALL PORTIN

BTFSC DATO_IN, 0x00GOTO STEP4GOTO STEP6

STEP4 DECF CUENTA, 1GOTO STEP7

STEP6 INCF CUENTA, 1STEP7 MOVFF CUENTA, DATO_OUT

CALL PORTOUTCALL RETARDOGOTO STEP2

Page 25: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

20

Se usará el mismo circuito de la practica anterior para implementar el programaanteriormente diseñado.

Page 26: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

21

2.6. Programa codificar/decodificar mensaje

Usando las librerías de la práctica anterior se diseño un programa para codificarun mensaje a la entrada y decodificar el mismo mensaje a la salida.

PASO1: KEY=0x06MSG_1=0x12

PASO2: MSG= PORTINPASO3: MSG_COD=MSG XOR KEY XOR MSG_1PASO4: PORTOUT= MSG_CODPASO5: LLAMAR A RETARDOPASO6: MSG_DECOD=MSG_COD XOR MSG_1 XOR KEYPASO7: MSG_1=MSG_CODPASO8: PORTOUT=MSG_DECODPASO9: LLAMAR A RETARDOPASO10: IR A PASO2

MOVLW 0x06MOVWF KEYMOVLW 0x12MOVWF MSG_1

STEP2 CALL PORTINMOVFF DATO_IN, MSGMOVF KEY, 0XORWF MSG, 0XORWF MSG_1, 0MOVWF MSG_CODMOVFF MSG_COD, DATO_OUTCALL PORTOUTCALL RETARDOMOVF MSG_1,0XORWF MSG_COD,0XORWF KEY,0MOVWF MSG_DECODMOVFF MSG_COD, MSG_1MOVFF MSG_DECOD, DATO_OUTCALL PORTOUTCALL RETARDOGOTO STEP2

Page 27: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

22

Se usará el mismo circuito de la práctica anterior para implementar el programaanteriormente diseñado.

Page 28: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

23

2.7. Acceso a Memoria

Usando las librerías de la práctica anterior y agregando las siguientes libreríaspara usar el puerto programable se diseño un programa para acceder a lamemoria y mostrar su contenido por el puerto de salida.

PASO1:ADR=3PASO2: LLAMAR A DIRPASO3: PORTD=0x21PASO4: PORTB=0x81PASO5: NO OPERACIÓNPASO6: REGRESAR

void PORTCTRL (void)

MOVLW 0x03MOVWF ADRCALL DIRMOVLW 0x21MOVWF PORTDMOVLW 0x81MOVWF PORTBNOPRETURN

PASO1: ADR=0PASO2: LLAMAR A DIRPASO3: PORTD=0x21PASO4: PORTB=DATO_OUTPASO5: REGRESAR

void PUERTOA (DATO_OUT)

CLRF ADRCALL DIRMOVLW 0x21MOVWF PORTDMOVFF DATO_OUT, PORTBRETURN

PASO1: ADR=1PASO2: LLAMAR A DIRPASO3: PORTD=0x21PASO4: PORTB=DATO_OUTPASO5: REGRESAR

void PUERTOB (DATO_OUT)

SETF ADRCALL DIRMOVLW 0x21MOVWF PORTDMOVFF DATO_OUT, PORTBRETURN

Page 29: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

24

PASO1: ADR=0x02PASO2: LLAMAR A DIRPASO3: ¿DIREC=0?

NO IR A PASO 10SI IR A PASO 4

PASO4: PORTD=0x21PASO5: INTERCAMBIAR NIBBLE DATO_OUTPASO6: DATO_OUT =DATO_OUT AND FOPASO7: PORTB= DATO_OUTPASO8: LIMPIAR DATO_INPASO9: IR A PASO 13PASO10: PORTD= 0x41PASO11: DATO_IN=PORTBPASO12: DATO_IN=DATO_IN AND 0FPASO13: REGRESA

DATO_IN PUERTOC (DATO_OUT, DIREC)

MOVLW 0x02MOVWF DIRCALL DIRMOVLW 0x00CPFSEQ DIRECGOTO PASO 4GOTO PASO10

PASO4 MOVLW 0x21MOVWF PORTDSWAPF DATO_OUTMOVLW 0XFOANDLW DATO_OUTMOVWF DATO_OUTMOVFF DATO_OUT, PORTBCLRF DATO_INGOTO STP13

STP10 MOVLW 0x41MOVWF PORTDMOVFF PORTB, DATO_INMOVLW 0x0FANDLW DATO_INMOVWF DATO_IN

STP13 NOPRETURN

Page 30: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

25

(TECLA, DEC_COL) TECLADO (DEC_FILA)

RRNCF DEC_FILACLRF DIRECMOVFF DEC_FILA, DATO_OUTCALL PUERTOCSETF DIRECCALL PUERTOCMOVFF DATO_IN, DEC_COLMOVLW 0x0FCPFSEQ DEC_COLGOTO STP1GOTO STP5

STP1 CLRF TECLASTP2 RRCF DEC_COL

BNC STP3INCF TECLA, 1GOTO STP2

STP3 RLCF DEC_FILABNC STP6MOVLW 0x04ADDWF TECLA, 1GOTO STP3

STP6 SETF DEC_COLSTP5 NOP

RETURN

Page 31: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

26

Diseñar un programa que envié por el puerto de salida (PORTOUT) una cuantaascendente hasta 0x0F para leer el contenido de las localidades de la memoria.

Diseñar un programa que envié por el puerto de salida (PUERTOA) una cuantaascendente hasta 0x0F para leer el contenido de las localidades de la memoria.

PASO1: ADR=0x00PASO2: PORTOUT= RDMEM (ADR)PASO3: LLAMAR A RETARDOPASO4: ADR= ADR + 1PASO5: ¿ADR>F?

NO IR A PASO 1SI IR A PASO 2

PASO1 CLRF ADRPASO2 CALL RDMEM

MOVFF DATO_IN, DATO_OUTCALL PORTOUTCALL RETARDOINCF ADR, 1MOVLW 0x0FCPFSGT ADRGOTO PASO2GOTO PASO1

PASO1: ADR=0x00PASO2: PUERTOA= RDMEM (ADR)PASO3: LLAMAR A RETARDOPASO4: ADR= ADR + 1PASO5: ¿ADR>F?

NO IR A PASO 1SI IR A PASO 2

PASO1 CLRF ADRPASO2 CALL RDMEM

MOVFF DATO_IN, DATO_OUTCALL PUERTOACALL RETARDOINCF ADR, 1MOVLW 0x0FCPFSGT ADRGOTO PASO2GOTO PASO1

Page 32: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

27

Al mismo circuito de la práctica anterior se le conectara el circuito integrado PPI(Interfaz Periférica programable) para implementar el segundo programaanteriormente diseñado.

Page 33: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

28

2.8. Acceso a Memoria ascendente/descendente

Usando las librerías de la práctica anterior se diseño un programa para acceder ala memoria y mostrar su contenido de forma ascendente y ascendente por elpuerto de salida (display).

STEP1 CLRF ADRCLRF ADR1MOVFF ADR, ADR1

STEP2 MOVFF ADR1, ADRCALL RDMEMMOVFF DATO_IN, DATO_OUTCALL PUERTOACALL RETARDOCALL PORTINMOVLW 0x00CPFSEQ DATO_INGOTO STEP8GOTO STEP6

STEP6 INCF ADR1, 1MOVLW 0x0FCPFSGT ADR1GOTO STEP2GOTO STEP1

STEP8 MOVLW 0x00CPFSEQ ADR1GOTO STEP11GOTO STEP9

STEP9 MOVLW 0x0FMOVWF ADR1GOTO STEP2

STEP11 DECF ADR1GOTO STEP2

Page 34: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

29

Implementar el siguiente el circuito.

Page 35: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

30

2.9. Teclado Matricial

Usando las librerías de la práctica anterior se diseño un programa en el cual seobserve un número inicial, y se desplace a la izquierda cuando se presione algúnbotón del teclado matricial, así el nuevo valor observado en el display será elpresionado.

MOVLW 0x00MOVWF DATO_DISPAMOVLW 0x01MOVWF DATO_DISPB

STEP3 MOVFF DATO_DISPA, ADRCALL RDMEMMOVFF DATO_IN, DATO_OUTCALL PUERTOAMOVFF DATO_DISPB, ADRCALL RDMEMMOVFF DATO_IN, DATO_OUTCALL PUERTOB

STEP2 MOVLW 0x77MOVWF DEC_FILACALL TECLADOMOVLW 0x0FCPFSEQ DEC_COLGOTO STEP1GOTO STEP2

STEP1 CALL RETARDO2MOVFF DATO_DISPB, DATO_DISPAMOVFF TECLA, DATO_DISPBNOPGOTO STEP3

Page 36: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

31

Implementar el siguiente el circuito.

Page 37: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

32

3. CONCLUSIONES

3.1. Decodificación de dos memorias

Se diseño un circuito con el cual se pueden observan 8 mensajes diferentes, 4 pormemoria, pudiendo seleccionar que memoria y que mensaje se desea leer.

3.2. Decodificación de cuatro memorias

Se diseño un circuito con el cual se pueden observan 16 mensajes diferentes, 4por memoria, pudiendo seleccionar que memoria y que mensaje se desea leer,aprovechando el mismo bus de datos.

3.3. Encendido y apagado de led´s con subrutina de retardo

Esta rutina de retardo, aunque parezca larga nos permite ver como se enciende yse apaga el LED, de lo contrario no podríamos notar la diferencia, o lo veríamosapagado o encendido, ya que la velocidad es demasiado alta si estamostrabajando con un XT de 4 MHz. Asimismo, aprendimos que utilizar rutinas haceque el código sea más pequeño y entendible.

3.4. Librerías y programa Espejo en Ensamblador

Se diseño un circuito con el cual se puede controlar varios puertos de entrada ysalida, así como la lectura de una memoria.

3.5. Programa cuenta ascendente/descendente

Se diseñó un programa en el cual se implemento el usó del puerto de entrada ysalida para realizar la cuenta ascendente/descendente.

Page 38: COMPENDIO DE PRÁCTICAS

COMPILACIÓN DE PRÁCTICAS Equipo: 1 Martínez Flores Oscar Eduardo.Grupo: 6CM9

33

3.6. Programa codificar/decodificar mensaje

Se diseñó un programa en el cual se implemento el usó del puerto de entrada ysalida, introduciendo un mensaje, este se codifica lo muestra en pantalla y lodecodifica así a la salida obtenemos el mensaje original.

3.7. Acceso a Memoria

Se diseñó un programa en el cual se implemento el usó del puerto de entrada ysalida para acceder a la memoria y visualizar el contenido de la misma.

3.8. Acceso a Memoria ascendente/descendente

Se diseñó un programa en el cual se implemento el usó del puerto de entrada ysalida para acceder a la memoria y visualizar el contenido de la misma de formaascendente y descendente.

3.9. Teclado Matricial

Se diseñó un programa en el cual se implemento el usó del puerto de entrada ysalida del puerto programable y a la entrada del mismo un teclado matricial.