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

INSTITUTO POLITECNICO NACIONAL

ESCUELA SUPERIOR DE INGENIERIA MECANICA y ELECTRICA

Ingeniería en Comunicaciones y Electrónica

Asignatura:
Microprocesadores

Práctica No.4

Profesor:
Jose Luis Bravo León.

Alumno:
Gutiérrez Cruz Jesus Alejandro

Grupo:
6CM4
Objetivo: Uso de subrutinas en la configuración y manejo de puertos de entrada y salida.

Objetivos Particulares: Saber programar subrutinas, para así desplegarla su información


en el circuito requerido

Marco Teórico.
Puertos de Entrada y salida.
Aunque el uso de microcontroladores ahorra considerablemente la cantidad de chips
empleados en un proyecto específico, existen aplicaciones muy complejas en las que
resulta prácticamente imposible incluir en un solo circuito integrado todas las funciones que
se requieren para cubrir cierto requerimiento; lo que obliga a colocar dos o más integrados
trabajando en estrecha cooperación, intercambiando datos, repartiendo instrucciones,
enviando y recibiendo información, etc.
Tradicionalmente, la forma en la que se realiza este intercambio de datos digitales es
utilizando varias líneas de comunicación entre chips, y esta cantidad de líneas es
equivalente a la cantidad de bits que maneja el dispositivo en cuestión; esto significa que
un microprocesador de 8 bits usa 8 líneas de comunicación, uno de 16 bits usaría 16 líneas,
y así sucesivamente (aunque esto no siempre se cumple).
El bus de direcciones (address bus) varía de tamaño según el procesador de la familia que
se emplee (puede ser de 20, 24 ´o 32 bits), pero para la entrada/salida es siempre de 16
bits.
Esto permite al microprocesador direccionar hasta 65536 diferentes localizaciones
especiales de entrada/salida, lo que es más que suficiente para la mayoría de los
dispositivos, aunque muchas veces un dispositivo requiera más de una dirección de
entrada/salida. Hay 2 espacios de direcciones, pero un solo bus de direcciones y son las
líneas de control las que deciden a que espacio estamos accediendo en cada momento. De
esta manera, el direccionamiento de entrada/salida (I/O addressing) se comporta
exactamente igual que el direccionamiento de memoria (memory addressing). La memoria
y los dispositivos I/O comparten el bus de datos y los 16 primeros bits del bus de
direcciones.
Un puerto I/O tiene una apariencia de celda de memoria para el computador, pero tiene
conexiones con el mundo exterior. Los puertos de entrada/salida se clasifican
habitualmente en tres tipos diferentes:

 Puertos de solo lectura (read–only o input port)


 Puertos de solo escritura (write–only o output port)
 Puertos de lectura–escritura (read–write o input–output)
Existen básicamente tres formas de realizar la gestión de entrada/salida en un dispositivo,
es decir, tres formas en que estos circuitos de interfaz pueden operar:
1. Entrada/salida por encuesta (también llamada por consulta o programada, en ingles
polling”).
2. Entrada/salida por interrupciones.
3. Entrada/salida por acceso directo a memoria.

En el caso de la entrada/salida por interrupciones, es el dispositivo quien establece el


momento en que se realiza la transferencia de los datos, avisando a la CPU de que ha
ocurrido un evento (por ejemplo, que el usuario haya presionado una tecla).

Existe una diferencia entre las interrupciones hardware y las demás: cuando se entra en
una ISR de una interrupción hardware, el procesador 80x86 deshabilita posteriores
interrupciones hardware poniendo a 0 el flag de interrupción. Esto no ocurre con las traps
ni con las excepciones. Por tanto, si queremos inhabilitar las interrupciones en medio de
una ISR de trap o excepción, hay que hacerlo explícitamente, con la instrucción “cli” en
ensamblador o con los medios que proporcione el sistema operativo

Tanto los subsistemas de entrada/salida mapeada en memoria como los que usan puertos
de entrada/salida necesitan que sea la CPU la que realice la transferencia de los datos
entre el dispositivo y la memoria. Para algunos dispositivos de alta velocidad, esta forma de
procesar los datos puede resultar demasiado lenta
Desarrollo.

Para la realización de esta práctica se necesitó hacer un programa que permitiera


determinar que si el dato leído fuera mayor a 12 se ignorara, en caso contrario, la
información leída debía mostrarse en el circuito correspondiente. En este caso, el circuito
incluye el pic 18F4550 (el cual se utilizaba en las prácticas pasadas de simulación). El
diagrama de este circuito es el siguiente:

Para la realización de este programa, se necesitó aplicar subrutinas, la cual me permitía el


manejo de los puertos y de la lectura. El diagrama de flujo del programa principal y de sus
subrutinas que se debían seguir para que la programación fuera más sencilla de entender
y realizar, fueron los siguientes:
Diagrama de flujo del Programa Principal:
Diagrama de flujo de subrutina Cpuertos:

Diagrama de flujo de subrutina Leer:


Abrí Mplab IDE, siguiendo los primeros pasos de las tres practicas anteriores.
Siguiendo los pasos del diagrama de flujo así como sus subrutinas, la programación quedo
de la manera siguiente:

Una vez guardado y compilado el programa sin problema alguno, continué con el paso
siguiente, el cual fue abrir la ventana de HARDWARE STACK, el cual me permitía desplegar
los registros de memoria de ahí.

Observe los valores que tomó el registro STKPTR, así como los valores que se fueron
almacenando en el área de STACK al momento que realice la ejecución de las subrutinas.
Los datos desplegados se muestran en la siguiente tabla.
INSTRUCCIÓN STKPTR DIRECCIÓN DE
RETORNO

CALL C_puertos 0 x 00 001004

RETURN 0 x 01 001004

CALL Leer 0 x 01 001008

RETURN 0 x 01 001008

Como para este programa se necesitaba que si un número mayor a doce se leyera, ese
dato seria ignorado.
Del programa de MPLAB IDE, seleccione la herramienta Stimuls, la cual me sirvió para
asignar un valor de entrada a PORTB que fuera menor a 0 X 0C (12 decimal). El valor que
yo elegí fue cero, de esta manera llené la tabla correspondiente.

DIRECCIÓN INSTRUCCIÓN REGISTROS SFR BANDERA

WREG PCL PORTB PORTD N

00101E swapf PORTB,0 0X12 0X1E 0X00 0X00 novzdcc

001020 andlw 0, 0F 0X00 0X20 0X00 0X00 novzdcc

001022 daw 0X00 0X22 0X00 0X00 novzdcc

001024 movwf 0 x 50 0X00 0X24 0X00 0X00 novzdcc

001026 sublw 0 x 12 0X00 0X26 0X00 0X00 novzdcc

001028 BN LEER 0X12 0X28 0X00 0X00 novzdcc

00102A movwf 0 x 50, 0 0X12 0X2A 0X00 0X00 novzdcc

00102C Return 0X12 0X2C 0X00 0X00 novzdcc


Del proceso anterior, solo procedí a poner un número a PORTB mayor a 0x0C, en mi caso
puse el número 14. La tabla quedo completada de la manera siguiente:

DIRECCIÓN INSTRUCCIÓN REGISTROS SFR BANDERA

WREG PCL PORTB PORTD N

00101E swapf PORTB,0 0X00 0X1E 0XE0 0X00 novzdcc

001020 andlw 0, 0F 0X0E 0X20 0XE0 0X00 novzdcc

001022 daw 0X0E 0X22 0XE0 0X00 novzdcc

001024 movwf 0 x 50 0X14 0X24 0XE0 0X00 novzdcc

001026 sublw 0 x 12 0X014 0X26 0XE0 0X00 novzdcc

001028 BN LEER 0XFE 0X28 0XE0 0X00 Novzdcc

00102A movwf 0 x 50, 0 - - - - -

00102C Return - - - - -

En las últimas dos partes de la tabla no hay nada ya que como el numero ingresado es
mayor a 12, se estará repitiendo hasta que la condición se cumpla.
Como el programa estaba correcto; abrí de la carpeta el archivo con extensión .HEX y pase
a conectar el PIC18F4550 a la computadora para que de esta manera se transfiriera el
código creado y así visualizar su funcionamiento.
CONCLUSION.

Para esta práctica fue necesario el conocimiento sobre los puertos de entrada y salida del
PIC18F4550, así como sus comandos para su programación. De esta manera pude realizar
la programación del PIC y poder observar su funcionamiento.

BIBLIOGRAFIA.

 Microprocesadores
Leopoldo Parra Reynada
Red Tercer Milenio
Pág. 123; 151

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