Professional Documents
Culture Documents
Objetivo: Desarrollar una rutina de servicio para la interrupción externa INTRB0 en Lenguaje Ensamblador
Introducción:
Con el desarrollo de esta práctica el alumno comprenderá como el programa se interrumpe cuando se provoca
una interrupción por el pin RB0 (un cambio de estado en el pin RB0) y brincará a la localidad 04H de la
memoria de programa para ejecutar la rutina de servicio que atiende dicha interrupción. La rutina de servicio
de interrupción invierte el estado del bit RC0 cada vez que se presione el push botton (dispositivo que
provoca la interrupción), dicho cambio de estado se mostrará por el pin RC0 a través de un Led.
Esta practica se correlaciona con el Tema 2.2 y principalmente con el subtema 2.2.5.4 de la Unidad 2.
Metodología:
1- Utilice el software MPLAB para editar el programa intrb0.asm que se muestra mas adelante.
2- Ensamble, simule y entienda el funcionamiento del programa.
3- Grabe el archivo (.HEX obtenido en el ensamble) en el PIC
4- Arme el circuito de acuerdo al diagrama de conexión.
5- Pruebe el buen funcionamiento del programa.
6- Ahora modifique el programa para que realice una tarea diferente en la rutina de servicio de
interrupción puede ser alguna de las siguientes:
a) Que vaya incrementando un contador cada vez que se presione el push botton y que dicha cuenta
la muestre en binario por el puerto C a través de 8 leds.
b) Que vaya incrementando un contador cada vez que se presione el push botton y que dicha cuenta
la muestre en BCD a través de un display doble de 7 segmentos conectados por el puerto C.
c) Que realice una rotación hacia la izquierda de unos leds conectados por el puerto C cuando se
presione por primera vez el push botton y que cambie el sentido las siguientes veces que se
vuelva a presionar el push boton.
d) Se puede dejar libre al alumno para que utilice su creatividad.
e) Dejar que el maestro ponga una opción diferente a estas.
7- Reporte sus resultados.
NOTA: Para utilizar el programa fuente con el PIC18F4455 sustituya las siguientes directivas:
LIST P=PIC18F4455
#include p18f4455.inc
CONFIG FOSC = XT_XT,PWRT = OFF, WDT = OFF, LVP=OFF
Cambiar la dirección de la rutina de servicio de interrupción : (ORG 04H) por (ORG 08H)
Puesto que el pin RB0 es por default canal análogo AN12 ponga las siguientes instrucciones para hacerlo
digital:
MOVLW 0FH ;Estas 2 instrucciones Solo poner para el
MOVWF ADCON1 ;PIC18F4455 (Pone todos los ANx a Digitales)
43
Programa fuente:
;*******************************************
;* intrb0.asm *
;* Este programa invierte el estado del pin RC0 cada *
;* vez que se modifica el estado del pin RB0 *
;* Para ello se habilita la interrupción INTRB0 *
;* Rev A: By Ing. Jorge Aguirre *
;*******************************************
LIST P=PIC16F874
#include p16f874.inc
__config _XT_OSC & _PWRTE_OFF & _WDT_OFF & _CP_OFF & _LVP_OFF & _WRT_ENABLE_OFF
F EQU 1
w EQU 0
#DEFINE BANCO0 BCF STATUS,5
#DEFINE BANCO1 BSF STATUS,5
ORG 00H
GOTO INICIO ;ponemos este GOTO al principio para poder poner
;el subprograma de las interrupciones a partir de
;la dirección 04h
;Comienza la interrupción:
;=========================
;============================
44
GOTO HECHO ;ya está invertido RC0, brinca a “HECHO”
ESUNO
BCF PORTC,0
;Pone un "0" en RC0 (Porque era "1")
;Ya se ha invertido el estado de RC0
;===================================
;======================
INICIO
BANCO1
MOVLW 00H ;Todos los bits del acumulador a "0"
MOVWF TRISC ;Configuramos todo el puerto C como salidas
;====================================
;ya están configuradas las interrupciones, a
;partir de ahora cuando haya un cambio en RB0
;saltará a la dirección 04h del programa
45
Diagrama de conexión:
+5vdc +5vdc
R1
10k
11,32
S1
1
13 MCLR
OSC1
VDD
sw1 14 40
OSC2 RB7 39
2 RB6 38
C1 22pf 3 RA0/AN0 RB5 37
4 RA1/AN1 RB4 36
5 RA2/AN2 RB3 35 +5vdc
Y1 6 RA3/AN3 RB2 34 S1
7 RA4 RB1 33
4MHZ 8 RA5/AN4 RB0/INT
9 RE0/AN5 sw1
C2 22pf 10 RE1/AN6 1Mohms R3
R2 RE2/AN7
+5vdc 15 30
16 RC0 RD7 29
220 D? 17 RC1 RD6 28
18 RC2 RD5 27
23 RC3 RD4 22
24 RC4 RD3 21
25 RC5 RD2 20
26 RC6 RD1 19
RC7 RD0
VSS
U?
PIC16F874
12,31
Sugerencias Didácticas:
1.- Se le sugiere al maestro de ensamblar y correr el programa de prueba junto con el alumno en la sala de
computo. Aproveche para seguir enseñando al alumno mas opciones del simulador (MPLABSIM). Correr
el programa paso a paso y ver como se genera la interrupción al cambiar el estado del pin RB0, como
brinca a la dirección 04H de la memoria de programa y enfatizar que lo primero que hay que hacer es borrar
la bandera que indica que hubo en cambio en RB0 (bit 1 del registro INTCON). Indicar la importancia de
guardar el acumulador(W) y el registro de estado en memoria RAM antes de hacer algo en la rutina de
interrupción y después antes de regresarse de la interrupción recuperar nuevamente lo que tenia el
acumulador(W) y el registro de estado antes de la interrupción.
2.- Formar equipos de trabajo.
3.- Estimular al alumno al desarrollo de su pensamiento lógico y creativo.
4.- Propiciar la investigación.
5.- Estimular la participación en las prácticas.
Reporte:
1.- El diagrama de flujo.
2.- El diagrama de conexión.
3.- El programa fuente obtenido.
4.- Conclusiones del Equipo.
Bibliografía Preliminar:
46
[4] E. Martín Cuenca. Microcontroladores PIC. Diseño práctico de aplicaciones Ed. Mc. Graw Hill
[5] Apuntes del Maestro.
[6] http://www.microchip.com
47