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

Microprocesadores.

Guía 5 1

Facultad: Ingeniería.
Escuela: Electrónica.
Asignatura: Microprocesadores.
Lugar de ejecución: Laboratorio de
Automatización (Edificio 3, 1a planta).

Puertos I/O con interrupciones

Objetivo general
• Desarrollar habilidades para programar los puertos I/O haciendo uso de los servicios
de interrupciones de hardware.

Objetivos específicos

• Programar de forma avanzada los puertos de entrada y salida.


• Comprender el mecanismo de funcionamiento de las interrupciones de hardware.
• Practicar las habilidades para la resolución de problemas.
• Practicar el uso de los juegos de instrucciones.

Materiales y equipo

• Computadora personal con Codewarrior IDE instalado


• 1 Tarjeta DEMO9S12XDT512
• 1 Cable de conexión USB
• 1 Resistencia de 330 ohmios
• 1 Diodo emisor de luz

Procedimiento

PARTE I
DESARROLLO DE CONTADOR DISPARADO POR INTERRUPCCIONES
1. Ejecute el programa Codewarrior instalado en su computadora.
2. Cree un nuevo proyecto tal como se aprendió en la guía 1
3. Edite el archivo fuente main.asm, escriba o copie el código que se le proporciona,
haga su compilación y asegúrese de no tener errores de sintaxis.
;************************************************************
;* USO DE INTERRUPCIONES EN PUERTOS I/O *
;************************************************************

; export symbols
XDEF Entry, _Startup ; export 'Entry' symbol
2 Microprocesadores. Guía 5

ABSENTRY Entry ; for absolute assembly: mark this as application entry point

; Include derivative-specific definitions


INCLUDE 'derivative.inc'
ROMStart EQU $4000 ; absolute address to place my code/constant data
; variable/data section
ORG RAMStart
; Insert here your data definition.
conta: DS.B 1 ;Variable de conteo de veces de presionado del pulsador

; code section
ORG ROMStart
Entry:
_Startup:
LDS #RAMEnd+1 ;Inicialización del puntero de pila

CLI ; Activar la aceptación global de interrupciones

CLR conta ; Limpiar el contador


LDAA #$FC
STAA DDRB ;Configurar parte alta de puerto B como salida
STAA DDRP ;Lineas 0 y 1 del puerto P se configuran como entradas
LDAA #$00
STAA PPSP ;flanco descendente en las lineas dispara la interrupción
LDAA #$03
STAA PIEP ;Activación de mascaras locales que permitan solicitudes de
;interrupciones
leds: LDAB conta ;Cargar el contador
LSLB
LSLB
LSLB
LSLB ;Desplazar 4 veces a la izquierda
COMB ;Aplique el complemento a uno
STAB PORTB ;Enviar el dato al puerto B
BRA leds ;Configuración completa esperar eventos

;*************************************
;* Rutina de servicio *
;*************************************
ORG $4100 ;Inicia el código de la rutina de servicio
SEI ;Desactivar temporalmente la aceptación de interrupciones
LDAB PTP ;Leer el puerto P
ANDB #$03 ;Discriminar bits 0 y 1
CMPB #$00 ;Verificar que no sea un falso
BEQ fin ;Si es así termine la rutina
CMPB #$03 ;Verificar que no sea un falso
BEQ fin ;Si es así termine la rutina
BITB #1 ;¿SW1 activo? Prueba de bit 1 en registro B
BEQ incre ;Salta si está en cero (es activo en cero)
DEC conta ; NO entonces alguien salió: Decremente el contador
BSET PIFP,2 ;Limpiamos la bandera de estado
BRA fin ;Terminar la rutina de servicio
incre: INC conta ;Incremente el contador
BSET PIFP,1 ;Limpiamos la bandera de estado
fin: CLI ;Reactivar la aceptación de interrupciones
RTI ;Terminar la rutina de servicio
Microprocesadores. Guía 5 1

;**************************************************************
;* Interrupt Vectors *
;**************************************************************
ORG $FFFE
DC.W Entry ; Reset Vector
ORG $FF8E
DC.W $4100 ; Vector para interrupciones I/O Puerto P
Listado 1. Programa para manejo de interrupcciones.

4. Analice el código en el simulador, estudiando cuidadosamente sus partes y describa


brevemente su funcionamiento.
_____________________________________________________________________
_____________________________________________________________________
____________________________

5. Cargue el código compilado en el módulo de desarrollo y verifique su funcionamiento,


ejecutándolo paso a paso y de forma completa, (anote sus observaciones), presione
los pulsadores SW1 y SW2 para accionar la interrupción.
_____________________________________________________________________
_____________________________________________________________________
____________________________

6. (Ejercicio) Active un breakpoint en la linea “andb #$03” de la rutina de servicio y


ejecute el programa de forma completa anote sus observaciones.
7. (Ejercicio) Borre el breakpoint del paso anterior y establezca dos nuevos breakpoint en
las lineas “DEC conta” y “INC conta” de la rutina de servicio, ejecute nuevamente el
programa y anote sus observaciones.
_____________________________________________________________________
_____________________________________________________________________
____________________________

PARTE II
DESAFIO CORTO
8. Retire la energía del modulo de desarrollo y ensamble el circuito de la figura 2
4 Microprocesadores. Guía 5

Figura 1. Circuito para desafío corto.

9. Modifique el programa principal para que el sistema active una alarma visualizada por
el LED del circuito de la figura 2 cuando el contador alcance un valor mayor o igual a
16 y que se desactive cuando el contador tenga un valor menor de 16.

10. Muestre el funcionamiento de su circuito a su docente.

11. Retire la energía del modulo de desarrollo y desconecte el cableado para completar su
práctica.

Evaluación

• 40%: Desarrollo completo de la práctica y desempeño.


• 60%: Despliegue del desafío corto.

Bibliografía

• Manual de la tarjeta de Evaluación DEMO9S12XDT512


• Manual de Instrucciones hc12
• Ayuda de programa CodeWarrior IDE

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