You are on page 1of 38

INSTITUTO POLITECNICO NACIONAL

MICROPROCESADORES Prof. Jess Jaime Moreno Escobar

Alumno: Oscar Eduardo Martnez Flores Grupo: 6CM9

[COMPENDIO DE PRCTICAS]

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

INDICE

o OBJETIVOS o GENERAL o PARTICULARES

iii iii

1. INTRODUCCIONES
1.1. 1.1.1. 1.1.2. 1.1.3. Decodificacin de dos memorias Memoria ROM Contador de dcadas 74LS190 Compuerta inversora con Schmitt Trigger 1

1.2. Decodificacin de cuatro memorias 1.2.1 Decodificadores 1.3. Encendido y apagado de leds con subrutina de retardo 1.3.1. PIC18F4550 1.4. Libreras y programa Espejo en Ensamblador 1.4.1. Microprocesador (PIC 18F4550) 1.5. Programa cuenta ascendente/descendente

6 7

1.6. Programa codificar/decodificar mensaje 1.6.1. Codificar y decodificar mensaje 1.7. Acceso a Memoria 1.7.1. Puerto Programable 82C55 1.8. 1.9. Acceso a Memoria ascendente/descendente Teclado Matricial

8 8

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

2. DESARROLLOS
2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7. 2.8. 2.9. Decodificacin de dos memorias Decodificacin de cuatro memorias Encendido y apagado de leds con subrutina de retardo Libreras y programa Espejo en Ensamblador Programa cuenta ascendente/descendente Programa codificar/decodificar mensaje Acceso a Memoria Acceso a Memoria ascendente/descendente Teclado Matricial 9 11 13 16 19 21 23 28 30

3.

CONCLUSIONES

3.1. 3.2. 3.3. 3.4. 3.5. 3.6. 3.7. 3.8. 3.9.

Decodificacin de dos memorias Decodificacin de cuatro memorias Encendido y apagado de leds con subrutina de retardo Libreras y programa Espejo en Ensamblador Programa cuenta ascendente/descendente Programa codificar/decodificar mensaje Acceso a Memoria Acceso a Memoria ascendente/descendente Teclado Matricial

32 32 32 32 32 33 33 33 33

ii

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

OBJETIVO GENERAL El alumno disear y construir una microcomputadora basada en un microprocesador moderno, para aplicaciones de cmputo, control industrial, telecomunicaciones e instrumentacin digital.

OBJETIVOS PARTICULARES

Decodificacin de dos memorias o Disear un decodificador que maneje dos memorias ROM 2816

Decodificacin de cuatro memorias o Disear un decodificador que maneje cuatro memorias ROM 2816

Encendido y apagado de leds con subrutina de retardo o Conocer y familiarizarse con el microcontrolador Pic18F4550. o Familiarizarse con el software requerido para crear programas, y as, programarlo. o Asimismo, realizar programas bsicos de reconocimiento del dispositivo y sus funciones esenciales para el dominio del mismo.

Libreras y programa Espejo en Ensamblador o Disear un programa que refleje lo que hay en la entrada del sistema mnimo, a la salida del mismo.

Programa cuenta ascendente/descendente o Disear un programa que cuente de forma ascendente si a la entrada hay un nmero par, y descendente si es impar.

Programa codificar/decodificar mensaje o Disear un programa que codifique un mensaje a la entrada con una llave y con el mensaje codificado anterior, lo muestre a la salida y despus decodifique el mensaje con la misma llave y con el mismo mensaje codificado anterior.

iii

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

Acceso a Memoria o Disear un programa que acceda a la memoria y muestre el contenido de cada localidad en un display de 7 segmentos y en 8 leds Acceso a Memoria ascendente/descendente o Disear un programa que acceda a la memoria y muestre el contenido de cada localidad de forma ascendente y descendente en un display de 7 segmentos.

Teclado Matricial o Disear un programa que muestre en los displays el numero de equipo y se recorran los nmeros a la izquierda, el nuevo digito ser el oprimido en el teclado matricial.

iv

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

1. INTRODUCCIONES

1.1. Decodificacin de dos memorias 1.1.1. Memoria ROM La memoria ROM, (read-only memory) o memoria de slo lectura, es la memoria que se utiliza para almacenar los programas que ponen en marcha el ordenador y realizan los diagnsticos.

Las memorias tienen un tamao de palabra de 8 bits.

Tabla 1.1.1. Tamaos de memorias.

16 32 64 128 256 512 010

2k*8 4k*8 8k*8 16k*8 32k*8 64k*8 128k*8

A0-A10 A0-A11 A0-A12 A0-A13 A0-A14 A0-A15 A0-A16

Q0-Q7 Q0-Q7 Q0-Q7 Q0-Q7 Q0-Q7 Q0-Q7 Q0-Q7

Figura 1.1.1. Diagrama de una memoria.

Para determinar el tamao de una memoria se tiene que dividir el numero de la memoria entre 8 bits, es decir, para una memoria XX16 dividimos 16/8=2 entonces esta memoria tiene 2KB de direcciones y un rango de memoria de 0 7FF para esta memoria tenemos un bus de direcciones de A 0-A10. La memoria que sigue es una XX32 se hace el mimo procedimiento y observamos que esta memoria tiene 4KB de direcciones, su bus de direcciones aumenta en una direccin ms que la anterior, por efecto su rango de memoria aumenta (0 FFF). (Ver tabla 1.1.2).

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

Tabla 1.1.2. Rangos de memorias.

Memoria XX16 XX32 XX64 XX128 XX256 XX512 XX010

Bus de Datos (bits) 8 8 8 8 8 8 8

Bus de Direcciones A0-A10 A0-A11 A0-A12 A0-A13 A0-A14 A0-A15 A0-A16

Tamao Dir 2KB 4KB 8KB 16KB 32KB 64KB 128KB

Rango memoria 07FF 0FFF 01FFF 03FFF 07FFF 0FFFF 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

0 0

0 0

0 0

0 0

0 0

0 1

0 1

0 1

0 1

0 1

0 1

0 1

0 1

0 1

0 1

0 1

Mapa (H) 0000 07FF

1.1.2. Contador de dcadas 74LS190 El contador MOD 10 se conoce tambin como contador de dcadas. De echo un contador de dcadas es cualquier contador que tenga 10 estados diferentes independientemente de la secuencia. Estos tambin se denominan contadores BCD para reiterar lo dicho cualquier contador MOD 10 es un contador de dcadas y cualquier contador de dcadas que cuenta en binario de 0000 a 1001 es un contador BCD.(Ver Figura 2).

Figura 1.1.2. Distribucin de pines del 74Ls190

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

1.1.3. Compuerta inversora con Schmitt Trigger El schmitt trigger es un comparador con histresis, que se encarga de producir un pulso de disparo cuando el valor de voltaje en su entrada esta dentro de un rango especifico, determinado por su ventana de histresis.(Ver Figura 3).

Figura 1.1.3. Smbolo del 74LS14

1.2.

Decodificacin de cuatro memorias

1.2.1. Decodificadores Es un circuito combinacional, tal que cada lnea de salida ser activada para una sola de las combinaciones posibles de entrada. Estos circuitos, normalmente, se suelen encontrar como decodificador / demultiplexor. Esto es debido a que un demultiplexor puede comportarse como un decodificador. (Ver Tabla 1.1.2.1)

Entradas Salidas A B D3 D2 D1 D0 0 0 0 0 0 1 0 1 0 0 1 0 1 0 0 1 0 0 1 1 1 0 0 0
Tabla 4.1.2.1. Tabla de Verdad de un decodificador

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

1.3.

Encendido y apagado de leds con subrutina de retardo

1.3.1. PIC18F4550 Los PIC son una familia de microcontroladores tipo RISCreducedinstruction set computer fabricados por Microchip. Al tener este tipo de arquitectura es caracterizada por: Codificacin uniforme de instrucciones (ejemplo: el cdigo de operacin se encuentra siempre en la misma posicin en cada instruccin, la cual es siempre una palabra), lo que permite una decodificacin ms rpida. Un conjunto de registros homogneo, permitiendo que cualquier registro sea utilizado en cualquier contexto y as simplificar el diseo del compilador (aunque existen muchas formas de separar los ficheros de registro de entero y coma flotante). Modos de direccionamiento simple con modos ms complejos reemplazados por secuencias de instrucciones aritmticas simples.

GAMAS DE PIC'S Los PIC'S se clasifican por distintas gamas, cada una con sus propias caractersticas: 1. Microcontroladores de arquitectura cerrada Cada modelo se construye con un determinado CPU, cierta capacidad de memoria de datos, cierto tipo y capacidad de memoria de instrucciones, un nmero de E/S y un conjunto de recursos auxiliares muy concreto. El modelo no admite variaciones ni ampliaciones. La aplicacin a la que se destina debe encontrar en su estructura todo lo que precisa y, en caso contrario, hay que desecharlo. 2. Microcontroladores de arquitectura abierta Estos microcontroladores se caracterizan porque, adems de disponer de una estructura interna determinada, pueden emplear sus lneas de E/S para sacar al exterior los buses de datos, direcciones y control, con lo que se posibilita la ampliacin de la memoria y las E/S con circuitos .integrados externos. Microchip dispone de modelos PIC con arquitectura abierta, sin embargo, esta alternativa se escapa de la idea de un microcontrolador incrustado y se asemeja a la. solucin que emplean los clsicos microprocesadores.

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

La mayora de los sistemas de control incrustados requieren CPU, memoria de datos, memoria de instrucciones, lneas de E/S, y diversas funciones auxiliares como temporizadores, comunicacin serie y otras. La capacidad y el tipo de las memorias, el nmero de lneas de E/S y el de temporizadores, as como circuitos auxiliares, son parmetros que dependen exclusivamente de la aplicacin y varan mucho de unas situaciones a otras. Con las tres gamas de PIC se dispone de gran diversidad de modelos y encapsulados, pudiendo seleccionar el que mejor se acople a las necesidades de acuerdo con el tipo y capacidad de las memorias, el nmero de lneas de E/S y las funciones auxiliares precisas. Sin embargo, todas las versiones estn construidas alrededor de una arquitectura comn, un repertorio mnimo de instrucciones y un conjunto de opciones muy apreciadas, como el bajo consumo y el amplio margen del voltaje de alimentacin. CARACTERISTICAS DEL PIC18F4550 Frecuencia de operacin 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 lneas se comportan como puertos de entrada o salida 1 temporizador 1 modulo de comparacin Canales de comunicacin serie MSSP,EUSART 1 Canal usb 1 punto paralelo de transmisin de datos 13 canales de conversin A/D de 10 bits 2 Comparadores lgicos 75 Instrucciones en su set Encapsulado PDIP 40 pines Forma del chip OFN 40 pines

El PIC18f4550 posee 5 puertos con la siguiente configuracin: Puerto A -> A0 A5 Puerto B -> 8 bits Puerto C -> 7bits Puerto D -> 4 bits Puerto E -> 3bits (pero no se utiliza)

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

Tambin posee acumuladores y banderas para auxiliarse sobre las operaciones que realiza la ALU (Unidad Lgica Aritmtica), que es la encargada de realizar todas las operaciones lgicas-aritmticas que demanda el programa del PIC. NEMONICOS Un nemnico es un dato simblico que identifica a un comando generalmente numrico (binario, octal, hexadecimal) de una forma ms sencilla que su numeracin original, lo cul facilita radicalmente la memorizacin de este comando para el programador. Al igual que en C++ los nemnicos son palabras reservadas para el programa, la lista de estos nemnicos se componen de 63 palabras usadas nicamente por el programa que hacen referencia a las distintas funciones y operaciones que puede realizar propiamente el PIC.

1.4.

Libreras y programa Espejo en Ensamblador

1.4.1. Microprocesador (PIC 18F4550) Es el encargado de ejecutar los programas; desde el sistema operativo hasta las aplicaciones de usuario; slo ejecuta instrucciones programadas en lenguaje de bajo nivel, realizando operaciones aritmticas y lgicas simples, tales como sumar, restar, multiplicar, dividir, las lgicas binarias y accesos a memoria. Esta unidad central de procesamiento est constituida, esencialmente, por registros, una unidad de control, una unidad aritmtica lgica (ALU). En esta ocasin usaremos un microcontrolador como microprocesador. Un microcontrolador es un circuito integrado o chip que incluye en su interior las tres 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 ms informacin sobre el microcontrolador ver archivo pdf pic18F4550

1.5.

Programa cuenta ascendente/descendente

Uso de la misma teora de la prctica anterior.

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

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 transmitir con una llave (contrasea) y se obtiene un mensaje codificado, para poder recuperar el mensaje transmitido se vuelve a aplicar una XOR pero ahora al mensaje codificado con la misma llave y se obtiene el mensaje original.

1011 llave 1001mensaje 0010 mensaje codificado 1011 llave 1001mensaje

1.7.

Acceso a Memoria 1.7.1. Puerto Programable 82C55

Dispone de un total de 24 lneas de E7S. Los canales se queden agrupar en puertas, segn tres modos diferentes de programacin. Sus caractersticas bsicas son: 24 lneas de E/S programables. Compatible con niveles TTL. Control Set/Reset sobre cualquier lnea. Alimentacin simple de 5V. Encapsulado DIL 40. Potencia de disipacin 1W.

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

1.8.

Acceso a Memoria ascendente/descendente

Uso de la misma teora de la prctica anterior.

1.9.

Teclado Matricial

Los teclados matriciales son ensamblados en forma de matriz de 4x4, (para este caso) 16 teclas configuradas en 4 columnas y 4 filas. Cuando no se ha oprimido ninguna tecla, (teclas abiertas) no hay conexin entre renglones y columnas. Cuando se oprime una tecla se hace una conexin entre la columna y la fila de la tecla.

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

2.1.

Decodificacin de dos memorias

Disear un decodificador para un microprocesador 20/8 que maneje dos memorias 2816. Permitiendo foldback. (Ver Tabla 2.1.2.1.) Una vez colocados los datos de las memorias que se usarn (ver tabla 2.1.2.1.), se observa que se tienen 2 memorias XX16 ya que se tiene el mismo bus de direcciones y por ende el mismo rango de memoria, pero como el micro no es inteligente 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 suma uno, 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 la misma 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. Asignacin de direcciones para cada memoria A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0

Memoria

0 0 0 0

0 0 0 0

0 0 0 0

0 0 0 0

0 0 1 1

0 1 0 1

0 1 0 1

0 1 0 1

0 1 0 1

0 1 0 1

0 1 0 1

0 1 0 1

0 1 0 1

0 1 0 1

0 1 0 1

0 1 0 1

A B

Mapa (H) 0000 07FF 0000 07FF

Micro(H) 0000 07FF 0800 0FFF

Foldback Decodificador

Memoria 2816

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

Cdigo para programar las memorias 2816: (Ver Tabla 2.1.2.2.).


Tabla 2.1.2.2.a. Cdigo para memoria A Tabla 2.1.2.2.b. Cdigo para memoria B

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

a 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 0 0 0 0 0 1 0 1 1 0 1 0 0 1

b 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 0 0 1 0 0 1 1 0 1 0 1 1 0 1 0 1 0 0 0 1 0 0 1 0 1

c 0 1 1 1 1 1 1 1 1 1 0 0 1 1 0 1 0 1 0 0 1 1 0 1 0 1 1 0 1 0 1 0 0 0 1 0 0 1 0 1

d 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 1 1 0 1 0 0 0 1 1 0 1 0 1 1 1 1 1

e 1 1 1 1 0 1 1 0 1 0 1 1 1 0 1 0 0 1 1 0 1 1 1 1 1 1 1 0 0 0 1 1 0 1 1 1 1 1 1 1

f 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 1 1 1 1 1 1 0 0 1 0 0 1 0 1 1 1 1 1 1 1

g 1 0 0 1 1 0 0 1 1 1 0 0 1 1 1 1 0 1 1 0 1 0 1 0 0 1 1 0 1 0 1 1 0 0 1 0 0 0 0 0

Carac. 2 0 0 8 3 0 0 5 6 5 C L A S E S D E A U T O C A D Y D E C A L C U L O

Hex. 6D 7E 7E 7F 79 7E 7E 5B 1F 5B 4E 0E 77 5B 4F 5B 00 3D 4F 00 77 3E 0F 7E 4E 77 3D 00 33 00 3D 4F 00 4E 77 0E 4E 3E 0E 7E

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

a 0 0 0 1 0 0 1 0 1 0 1 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 1 1 0 1 0 0 1 1 0

b 1 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 0 0 1 0 1 0 1 0

c 1 1 0 1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 1 1 1 1 1 0 1 0 1 0 1 1

d 0 1 1 0 0 1 1 1 0 0 0 1 1 0 0 0 0 1 0 1 0 1 0 0 0 0 0 1 0 1 0 0 1 1 0 1 1 1 1 1

e 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 0 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1

f 1 0 1 1 0 1 1 1 1 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0

g 1 1 0 1 0 1 1 1 1 0 1 1 0 0 0 0 0 0 0 1 1 1 1 1 0 1 0 0 1 0 1 1 1 1 1 0 0 1 1 1

Carac. H O L A B E B A P O L I I C E N E N A F I C H U H A S T A L U E G O

Hex. 37 1D 0E 77 00 1F 4F 1F 77 00 67 1D 0E 06 00 06 00 4E 00 4F 15 4F 15 77 00 47 06 4E 37 3E 37 77 5B 0F 77 0E 3E 4F 7B 1D

10

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

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

2.2.

Decodificacin de cuatro memorias

Disear un decodificador para un microprocesador 20/8 que maneje dos memorias 2816. Permitiendo foldback. (Ver Tabla 2.1.2.1.)
Tabla 2.1.2.1. Asignacin de direcciones para cada memoria A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0

Memoria

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 1 1 1 1

0 0 1 1 0 0 1 1

0 1 0 1 0 1 0 1

0 1 0 1 0 1 0 1

0 1 0 1 0 1 0 1

0 1 0 1 0 1 0 1

0 1 0 1 0 1 0 1

0 1 0 1 0 1 0 1

0 1 0 1 0 1 0 1

0 1 0 1 0 1 0 1

0 1 0 1 0 1 0 1

0 1 0 1 0 1 0 1

0 1 0 1 0 1 0 1

A B C D

Mapa (H) 0000 07FF 0000 07FF 0000 07FF 0000 07FF

Micro(H) 0000 07FF 0800 0FFF 1000 17FF 1800 1FFF

Foldback Decodificador

Memoria 2816

11

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

Cdigo 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 las memorias.

12

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

2.3.

Encendido y apagado de leds con subrutina de retardo

Comenzamos a crear el programa en el software MAPLAB. Como lo vimos en clase,cada instruccin ocupa 1 ciclo de reloj para ejecutarse. Por lo que, utilizamos el reloj interno del PIC 18F4550, en el cual, cada instruccin se ejecuta en (1/4MHZ)*4 o lo que es lo mismo 1uS. El programa ejecuta 5 instrucciones mientras los leds estn encendidos y otras 5 mientras estn apagados, as que encienden 5uS y apagan otros 5uS. Al ver el funcionamiento en el proto veremos que los leds nunca se apagan, cmo hacemos para que esto se alcance a ver? La respuesta la tenemos al utilizar un retardo al encender los leds y otro al apagarlos. El principio del retardo es contar descendentemente desde un nmero dado y al momento de que la cuenta llega a cero dejar de contar. El cero indica el fin del retardo y una vez concluido puede continuar la ejecucin del programa y as sucesivamente. Lo primero es definir nuestras constantes que usaremos como contador, en este casocnt1, cnt2, cnt3. Cabe mencionarque al momento de definir la constante con la directiva equ lo que hacemos es declarar la direccin del registro que usaremos como cnt1,... Esto es, que si declaramos cnt1equ 0x20 no significa que cuenta vaya a valer 0x20, sino que en esa direccin estar ese registro. Habiendo declarado lasconstantes y despus de cargar ese registro con un valor podemos realizar la rutina de retardo. Para eso decrementamoscnt3 por 1 hasta que el valor llegue a 0. De esto se encarga la instruccin decfsz. Su sintaxis esdecfszf,d donde f es el registro que queremos decrementar y d es el destino en el que guardamos el resultado, si d=0 el resultado se guarda en el registro W, si d=1 el resultado se guarda en el mismo registro f. decfsz cnt3,1decrementa el valor de cnt3 en 1 y guarda el resultado en el mismo registro cnt3. Para asegurarnos de que decfsz se ejecute hasta que el registro llegue a 0 utilizamos la instruccin goto para estar volviendo hasta que la cuenta termine su proceso.

13

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

Entonces el nuevo cdigo 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 0x06 cnt1equ 0x20 cnt2equ 0x21 cnt3 equ 0x22 ;------Configuracion de puertos----RESET_VECTOR ORG 0 ;vector de reset goto _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 principal Main call Retardo ;llama a Retardo ;------Enciende y apaga el led----ciclo movlw .0 movwf PORTA ;Bits de salida en 1 call Retardo ;llama a Retardo movlw .255 movwf PORTA ;bits de salida en 0 call Retardo ;llama a Retardo goto ciclo ;repita todo de nuevo ;------Rutina de Retardo-----Retardo movlw .250 ;se cargan los contadores, cnt1, movwf cnt1 ;cnt2 y cnt3 con sus respectivos valores Paso2 movlw .250 movwf cnt2 paso3 movlw .80 movwf cnt3 paso4 decfsz cnt3,1;aqui comienza a decrementar goto paso4 ;cuando cnt3 llegue a 0 decfsz cnt2,1 ;se le decrementa 1 a cnt 2 goto paso3 ;cuando cnt2 allegue a 0 decfsz cnt1,1 ;se le decrementa 1 a cnt 1 goto paso2 ;cuando cnt2 allegue a 0 return;regreso al llamado del retardo END ;se acabo

Ahora las nicas instrucciones nuevas son call y return. call se utiliza para mandar llamar una rutina, en este caso la Rutina de Retardo. Recordemos que en la declaracin de variables los registros 0x20, 0x21 y 0x22 fueron nombrados como cnt1, cnt2 y cnt3 respectivamente. Como podemos ver, decfsz cnt3,1 lo que hace esdecrementar cnt3, si al decrementarda cero se salta una lnea. El 1que sigue a cnt3, indica que guarde el valor de cnt3 decrementado en el mismo cnt3, esto es como.... contador=contador-1 solo que visto de distinta forma.

14

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

goto, es saltar y goto paso4 es saltar a la etiqueta paso4. En esta pequea vuelta estoy decrementando cnt3 hasta que se haga cero. Cuando cnt3 llegue a 0, ahora decrementa cnt2 en una unidad, volver a cargar cnt3 y ste se decrementar nuevamente para recin restarle otra unidad a cnt2, y as... hasta que cnt2 se haga cero. Cuando eso ocurra ahora se decrementar cnt1 en una unidad, se cargarnuevamente cnt2 y cnt3, para luego decrementarlos de nuevo, todo esto ocurrir hasta que reg1 se haga igual a cero. Una vez cargado el programa en el PIC, ensamblamos el sig. Diagrama del circuito con el programa funcionando.

15

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

2.4.

Libreras y programa Espejo en Ensamblador

Empezamos con el diseo de las libreras que permitirn la comunicacin con los dems dispositivos, (memoria, puertos I/O, y puerto programable). Librera DIRC

void DIRC (ADR) paso1: PORTD=0XE0 paso2: PROGB= SALIDA PORTB= ADR paso3: PORTD=0x60

DIRC

MOVLW 0xE0 MOVWF PORTD MOVLW 0x00 MOVWF TRISB NOP MOVFF ADR,PORTB MOVLW 0x60 MOVWF PORTD RETURN

void PORTOUT (DATO_OUT) PASO1: ADR=8 PASO2: LLAMAR A DIRC PASO3: PORTD=0x21 PASO4: PROGB= SALIDAS PORTB= DATO_OUT

PORTOUT MOVLW 0x08 MOVWF ADR CALL DIRC MOVLW 0x21 MOVWF PORTD MOVLW 0x00 MOVWF TRISB NOP MOVFF DATO_OUT, PORTB RETURN

16

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

void PORTOUT (DATO_OUT) PASO1: ADR=4 PASO2: LLAMAR A DIRC PASO3: PORTD=0x41 PASO4: PROGB= ENTRADAS DATO_IN=PORTB

PORTIN

MOVLW 0x04 MOVWF ADR CALL DIRC MOVLW 0x41 MOVWF PORTD MOVLW 0xFF MOVWF TRISB NOP MOVFF PORTB, DATO_IN RETURN

DATO_IN RDMEM (ADR) PASO1: LLAMAR A DIRC PASO2: PORTD=0x40 PASO3: PROGB= ENTRADAS PASO4: DATO_IN=PORTB

RDMEM CALL DIRC MOVLW 0x40 MOVWF PORTD MOVLW 0xFF MOVWF TRISB NOP MOVFF PORTB, DATO_IN RETURN

17

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

PROGRAMA PRINCIPAL: REFLEJA LO QUE HAY EN LA ENTRADA DEL SISTEMA A LA SALIDA


PASO1 PASO1: PORTOUT=PORTIN PASO2: IR AL PASO1

CALL PORTIN MOVFF DATO_IN, DATO_OUT CALL PORTOUT GOTO PASO1

18

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

2.5.

Programa cuenta ascendente/descendente

Usando las libreras de la prctica anterior se diseo un programa para contar de forma ascendente/descendente dependiendo del valor a la entrada.

PASO1: CUENTA=0 PASO2: DATO_IN= PORTIN PASO3: VERIFICAR EL BIT 0 DE DATO_IN SI ES 1 IR A PASO4 SI ES 0 IR A PASO6 PASO4: CUENTA= CUENTA-1 PASO5: IR AL PASO7 PASO6: CUENTA= CUENTA+1 PASO7: PORTOUT (CUENTA) PASO8: LLAMAR A RETARDO PASO9: IR AL PASO2

STEP2

STEP4 STEP6 STEP7

CLRF CUENTA CALL PORTIN BTFSC DATO_IN, 0x00 GOTO STEP4 GOTO STEP6 DECF CUENTA, 1 GOTO STEP7 INCF CUENTA, 1 MOVFF CUENTA, DATO_OUT CALL PORTOUT CALL RETARDO GOTO STEP2

19

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

Se usar el mismo circuito de la practica anterior para implementar el programa anteriormente diseado.

20

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

2.6.

Programa codificar/decodificar mensaje

Usando las libreras de la prctica anterior se diseo un programa para codificar un mensaje a la entrada y decodificar el mismo mensaje a la salida.

PASO1: KEY=0x06 MSG_1=0x12 PASO2: MSG= PORTIN PASO3: MSG_COD=MSG XOR KEY XOR MSG_1 PASO4: PORTOUT= MSG_COD PASO5: LLAMAR A RETARDO PASO6: MSG_DECOD=MSG_COD XOR MSG_1 XOR KEY PASO7: MSG_1=MSG_COD PASO8: PORTOUT=MSG_DECOD PASO9: LLAMAR A RETARDO PASO10: IR A PASO2 MOVLW 0x06 MOVWF KEY MOVLW 0x12 MOVWF MSG_1 STEP2 CALL PORTIN MOVFF DATO_IN, MSG MOVF KEY, 0 XORWF MSG, 0 XORWF MSG_1, 0 MOVWF MSG_COD MOVFF MSG_COD, DATO_OUT CALL PORTOUT CALL RETARDO MOVF MSG_1,0 XORWF MSG_COD,0 XORWF KEY,0 MOVWF MSG_DECOD MOVFF MSG_COD, MSG_1 MOVFF MSG_DECOD, DATO_OUT CALL PORTOUT CALL RETARDO GOTO STEP2

21

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

Se usar el mismo circuito de la prctica anterior para implementar el programa anteriormente diseado.

22

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

2.7.

Acceso a Memoria

Usando las libreras de la prctica anterior y agregando las siguientes libreras para usar el puerto programable se diseo un programa para acceder a la memoria y mostrar su contenido por el puerto de salida.

void PORTCTRL (void) PASO1:ADR=3 PASO2: LLAMAR A DIR PASO3: PORTD=0x21 PASO4: PORTB=0x81 PASO5: NO OPERACIN PASO6: REGRESAR MOVLW 0x03 MOVWF ADR CALL DIR MOVLW 0x21 MOVWF PORTD MOVLW 0x81 MOVWF PORTB NOP RETURN

void PUERTOA (DATO_OUT) PASO1: ADR=0 PASO2: LLAMAR A DIR PASO3: PORTD=0x21 PASO4: PORTB=DATO_OUT PASO5: REGRESAR CLRF ADR CALL DIR MOVLW 0x21 MOVWF PORTD MOVFF DATO_OUT, PORTB RETURN

void PUERTOB (DATO_OUT) PASO1: ADR=1 PASO2: LLAMAR A DIR PASO3: PORTD=0x21 PASO4: PORTB=DATO_OUT PASO5: REGRESAR SETF ADR CALL DIR MOVLW 0x21 MOVWF PORTD MOVFF DATO_OUT, PORTB RETURN

23

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

PASO1: ADR=0x02 PASO2: LLAMAR A DIR PASO3: DIREC=0? NO IR A PASO 10 SI IR A PASO 4 PASO4: PORTD=0x21 PASO5: INTERCAMBIAR NIBBLE DATO_OUT PASO6: DATO_OUT =DATO_OUT AND FO PASO7: PORTB= DATO_OUT PASO8: LIMPIAR DATO_IN PASO9: IR A PASO 13 PASO10: PORTD= 0x41 PASO11: DATO_IN=PORTB PASO12: DATO_IN=DATO_IN AND 0F PASO13: REGRESA DATO_IN PUERTOC (DATO_OUT, DIREC) MOVLW 0x02 MOVWF DIR CALL DIR MOVLW 0x00 CPFSEQ DIREC GOTO PASO 4 GOTO PASO10 PASO4 MOVLW 0x21 MOVWF PORTD SWAPF DATO_OUT MOVLW 0XFO ANDLW DATO_OUT MOVWF DATO_OUT MOVFF DATO_OUT, PORTB CLRF DATO_IN GOTO STP13 STP10 MOVLW 0x41 MOVWF PORTD MOVFF PORTB, DATO_IN MOVLW 0x0F ANDLW DATO_IN MOVWF DATO_IN STP13 NOP RETURN

24

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

(TECLA, DEC_COL) TECLADO (DEC_FILA) RRNCF DEC_FILA CLRF DIREC MOVFF DEC_FILA, DATO_OUT CALL PUERTOC SETF DIREC CALL PUERTOC MOVFF DATO_IN, DEC_COL MOVLW 0x0F CPFSEQ DEC_COL GOTO STP1 GOTO STP5 CLRF TECLA RRCF DEC_COL BNC STP3 INCF TECLA, 1 GOTO STP2 RLCF DEC_FILA BNC STP6 MOVLW 0x04 ADDWF TECLA, 1 GOTO STP3 SETF DEC_COL NOP RETURN

STP1 STP2

STP3

STP6 STP5

25

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

Disear un programa que envi por el puerto de salida (PORTOUT) una cuanta ascendente hasta 0x0F para leer el contenido de las localidades de la memoria.

PASO1: ADR=0x00 PASO2: PORTOUT= RDMEM (ADR) PASO3: LLAMAR A RETARDO PASO4: ADR= ADR + 1 PASO5: ADR>F? NO IR A PASO 1 SI IR A PASO 2 PASO1 CLRF ADR PASO2 CALL RDMEM MOVFF DATO_IN, DATO_OUT CALL PORTOUT CALL RETARDO INCF ADR, 1 MOVLW 0x0F CPFSGT ADR GOTO PASO2 GOTO PASO1

Disear un programa que envi por el puerto de salida (PUERTOA) una cuanta ascendente hasta 0x0F para leer el contenido de las localidades de la memoria.

PASO1: ADR=0x00 PASO2: PUERTOA= RDMEM (ADR) PASO3: LLAMAR A RETARDO PASO4: ADR= ADR + 1 PASO5: ADR>F? NO IR A PASO 1 SI IR A PASO 2 PASO1 CLRF ADR PASO2 CALL RDMEM MOVFF DATO_IN, DATO_OUT CALL PUERTOA CALL RETARDO INCF ADR, 1 MOVLW 0x0F CPFSGT ADR GOTO PASO2 GOTO PASO1

26

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

Al mismo circuito de la prctica anterior se le conectara el circuito integrado PPI (Interfaz Perifrica programable) para implementar el segundo programa anteriormente diseado.

27

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

2.8. Acceso

a Memoria ascendente/descendente

Usando las libreras de la prctica anterior se diseo un programa para acceder a la memoria y mostrar su contenido de forma ascendente y ascendente por el puerto de salida (display).

STEP1 CLRF ADR CLRF ADR1 MOVFF ADR, ADR1 STEP2 MOVFF ADR1, ADR CALL RDMEM MOVFF DATO_IN, DATO_OUT CALL PUERTOA CALL RETARDO CALL PORTIN MOVLW 0x00 CPFSEQ DATO_IN GOTO STEP8 GOTO STEP6 STEP6 INCF ADR1, 1 MOVLW 0x0F CPFSGT ADR1 GOTO STEP2 GOTO STEP1 STEP8 MOVLW 0x00 CPFSEQ ADR1 GOTO STEP11 GOTO STEP9 STEP9 MOVLW 0x0F MOVWF ADR1 GOTO STEP2 STEP11 DECF ADR1 GOTO STEP2

28

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

Implementar el siguiente el circuito.

29

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

2.9 .

Teclado Matricial

Usando las libreras de la prctica anterior se diseo un programa en el cual se observe un nmero inicial, y se desplace a la izquierda cuando se presione algn botn del teclado matricial, as el nuevo valor observado en el display ser el presionado.

MOVLW 0x00 MOVWF DATO_DISPA MOVLW 0x01 MOVWF DATO_DISPB STEP3 MOVFF DATO_DISPA, ADR CALL RDMEM MOVFF DATO_IN, DATO_OUT CALL PUERTOA MOVFF DATO_DISPB, ADR CALL RDMEM MOVFF DATO_IN, DATO_OUT CALL PUERTOB STEP2 MOVLW 0x77 MOVWF DEC_FILA CALL TECLADO MOVLW 0x0F CPFSEQ DEC_COL GOTO STEP1 GOTO STEP2 STEP1 CALL RETARDO2 MOVFF DATO_DISPB, DATO_DISPA MOVFF TECLA, DATO_DISPB NOP GOTO STEP3

30

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

Implementar el siguiente el circuito.

31

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

3. CONCLUSIONES

3.1.

Decodificacin de dos memorias

Se diseo un circuito con el cual se pueden observan 8 mensajes diferentes, 4 por memoria, pudiendo seleccionar que memoria y que mensaje se desea leer.

3.2.

Decodificacin de cuatro memorias

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

3.3.

Encendido y apagado de leds con subrutina de retardo

Esta rutina de retardo, aunque parezca larga nos permite ver como se enciende y se apaga el LED, de lo contrario no podramos notar la diferencia, o lo veramos apagado o encendido, ya que la velocidad es demasiado alta si estamos trabajando con un XT de 4 MHz. Asimismo, aprendimos que utilizar rutinas hace que el cdigo sea ms pequeo y entendible.

3.4.

Libreras y programa Espejo en Ensamblador

Se diseo un circuito con el cual se puede controlar varios puertos de entrada y salida, 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 y salida para realizar la cuenta ascendente/descendente.

32

COMPILACIN DE PRCTICAS

Equipo: 1 Grupo: 6CM9

Martnez Flores Oscar Eduardo.

3.6.

Programa codificar/decodificar mensaje

Se dise un programa en el cual se implemento el us del puerto de entrada y salida, introduciendo un mensaje, este se codifica lo muestra en pantalla y lo decodifica 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 y salida 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 y salida para acceder a la memoria y visualizar el contenido de la misma de forma ascendente y descendente.

3.9.

Teclado Matricial

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

33

You might also like