Está en la página 1de 18

PRACTICA

Nº2
LABORATORIO DE SISTEMAS
DIGITALES II

Realizado por:
Victorino Villamizar Delgado C.I.23.541.989
Grupo Nº10
PRE-LABORATORIO
1)Tipos de interrupciones externas que maneja el PIC 18F4550.
a) Fuentes de interrupción Externas (Enmascarables).
 
 Interrupciones externas en terminales (PORTB 0, 1 y 2).
 Cambios en niveles lógicos de terminales (PORTB 4, 5, 6 y 7)
 Escritura/Lectura del puerto paralelo (Modo Esclavo).
 Recepción en la USART.
 Transmisión en la USART.
 Transmisión/Recepción del puerto serial síncrono (Modo Maestro).
 Captura o Comparación de los módulos CCP (1 y 2).
 
b) Fuentes de interrupción Externas (No Enmascarables).
 
 Botón de RESET.
2)Priorización de interrupciones en el PIC 18F4550.
Podemos definir dos modos de interrupciones:
1. Modo de compatibilidad, la rutina de servicio de interrupciones (ISR) debe colocarse en la
posición 0x0008 de la memoria.
2. Modo de niveles de prioridad, las interrupciones de alta prioridad siguen saltando a la posición
0x0008, mientras que las de baja van a la 0x0018.
La elección de un modo u otro depende del valor del bit IPEN (Interrupt Priority Enable) del
registro RCON.
#define enable_priority_levels    RCONbits.IPEN=1
#define disable_priority_levels   RCONbits.IPEN=0
Interrupciones primarias: Cinco fuentes de interrupción tienen sus bits de habilitación
localizados en los registros INTCON. Estas fuentes de interrupción son referidas como
“interrupciones primarias”. Para habilitar estas interrupciones solo es necesario poner a ‘1’ el bit
GIE/GIEH del registro INTCON.
Interrupciones de periféricos: El PIC 18F4550 es capaz de generar solicitudes de interrupción para
cada una de sus banderas de interrupción localizadas en los registros PIE. Para habilitar una interrupción
por periférico además de habilitar el GIE/GIEH se debe poner a ‘1’ también el bit PEIE/GIEL ambos en
el registro INTCON.

En el modo de compatibilidad los bits INTCON.GIE e INTCON.PEIE  que habilitaban/deshabilitaban de


forma global las interrupciones pasan a denominarse GIEH (Global Int Enable High) y GIEL (Global Int
Enable Low)  y gobiernan la activación en bloque de las interrupciones de alta y baja prioridad
respectivamente:
Global flags (with priority levels)
#define enable_high_ints  INTCONbits.GIEH=1
#define enable_low_ints   INTCONbits.GIEL=1
#define disable_high_ints INTCONbits.GIEH=0
#define disable_low_ints  INTCONbits.GIEL=0
3)Directivas del compilador para interrupciones del pic 18F4550.
Para realizar la configuración, inspección y control de las interrupciones el 18F4550 utiliza un total de 10
registros:

 GIE/GIEH – Habilitación global de interrupciones / Habilitación global de interrupciones de alta


prioridad.
 PEIE/GIEL – Habilitación de interrupción de periféricos / Habilitación global de interrupciones de
baja prioridad.
 TMR0IE – Habitación de interrupción por desborde del TIMER (Temporizador) 0.
 INT0IE – Habilitación de interrupción externa 0.
 RBIE – Habilitación de la interrupción por cambios en el Puerto B.
 TMRIF – Bandera de interrupción por desborde del TIMER 0 (Debe ser limpiada mediante software).
 INT0IF – Bandera de interrupción externa 0 (Debe ser limpiada mediante software).
 RBIF – Bandera de interrupción cambios en el Puerto B (Debe ser limpiada mediante software).
 RBPU – Habilitación de Pull-Up en el Puerto B.
 INTEDG0 – Selección de flanco de la interrupción externa 0.
 INTEDG1 – Selección de flanco de la interrupción externa 1.
 INTEDG2 – Selección de flanco de la interrupción externa 2.
 TMR0IP – Nivel de prioridad de la interrupción por desborde del TIMER 0.
 RBIP - Nivel de prioridad de la interrupción por cambios en el Puerto B.

 INT2IP – Nivel de prioridad de la interrupción externa 2.


 INT1IP – Nivel de prioridad de la interrupción externa 1.
 INT2IE – Habilitación de interrupción externa 2.
 INT1IE – Habilitación de interrupción externa 1.
 INT2IF – Bandera de interrupción externa 2 (Debe ser limpiada mediante software).
 INT1IF – Bandera de interrupción externa 1 (Debe ser limpiada mediante software)
 PSPIE – Habilitación de interrupción por escritura/lectura de puerto paralelo esclavo.
 ADIE – Habilitación de interrupción por el convertidor analógico – digital (ADC).
 RCIE – Habilitación de interrupción por recepción en USART.
 TXIE – Habilitación de interrupción por transmisión en USART.
 SSPIE – Habilitación de interrupción por el puerto serial síncrono maestro (MSSP).
 CCP1IE – Habilitación de interrupción por el módulo CCP1.
 TMR2IE – Habilitación de interrupción por comparación del TIMER 2 con el registro PR2.
 TMR1IE – Habilitación de interrupción por desbordamiento del TIMER 1.

 OSCFIE – Habilitación de interrupción por falla en el oscilador.


 CMIE – Habilitación de interrupción por el comparador.
 EEIE – Habitación de interrupción por operación de escritura de datos en memoria
EEPROM/Flash.
 BCLIE – Habilitación de interrupción por colisión en BUS del MSSP.
 HLVDIE – Habilitación de interrupción por detección de voltaje alto/bajo.
 TMR3IE – Habilitación de interrupción por desbordamiento del TIMER 3.
 CCP2IE – Habilitación de interrupción por el módulo CCP2.
 PSPIF – Bandera de interrupción por escritura/lectura de puerto paralelo esclavo (Debe ser limpiada
mediante software).
 ADIF – Bandera de interrupción por el convertidor analógico – digital (ADC) (Debe ser limpiada
mediante software).
 RCIF – Bandera de interrupción por recepción en USART (Debe ser limpiada mediante software).
 TXIF – Bandera de interrupción por transmisión en USART (Debe ser limpiada mediante software).
 SSPIF – Bandera de interrupción por el puerto serial síncrono maestro (MSSP) (Debe ser limpiada
mediante software).
 CCP1IF – Bandera de interrupción por el módulo CCP1 (Debe ser limpiada mediante software).
 TMR2IF – Bandera de interrupción por comparación del TIMER 2 con el registro PR2 (Debe ser
limpiada mediante software).
 TMR1IF – Bandera de interrupción por desbordamiento del TIMER 1 (Debe ser limpiada mediante
software).
 OSCIF – Bandera de interrupción por falla en el oscilador (Debe ser limpiada mediante software).
 CMIF – Bandera de interrupción por el comparador (Debe ser limpiada mediante software).
 EEIF – Bandera de interrupción por operación de escritura de datos en memoria EEPROM/Flash
(Debe ser limpiada mediante software).
 BCLIF – Bandera de interrupción por colisión en BUS del MSSP (Debe ser limpiada mediante
software).
 HLVDIF – Bandera de interrupción por detección de voltaje alto/bajo (Debe ser limpiada mediante
software).
 TMR3IF – Bandera de interrupción por desbordamiento del TIMER 3 (Debe ser limpiada mediante
software).
 CCP2IF – Bandera de interrupción por el módulo CCP2 (Debe ser limpiada mediante software).
4)Funciones en C que se utilizan para interrupciones externas del pic 18F4550.
Existen diferentes tipos de interrupción en el micro controlador, algunas de ellas se mencionan a
continuación:

• #INT_EXT              Interrupción externa


• #INT_RTCC            Desbordamiento del TIMER0 (RTCC)
• #INT_RB                  Cambio en uno de los pines B4,B5,B6,B7
• #INT_EEPROM  Escritura en la EEPROM completada
• #INT_TIMER1      Desbordamiento TIMER1
• #INT_TIMER2     Desbordamiento TIMER2
• #INT_ADOF Conversión AD fuera de rango de tiempo.
• #INT_AD Conversión AD completa
• #INT_BUSCOL Colisión de bus.
• #INT_BUTTO Por botón (14000)
• #INT_CANERR Error en el modulo CAN.
• #INT_CANIRX Mensaje invalido en el BUS CAN
• #INT_CANRXO Bus CAN recibe un nuevo mensaje en buffer 0
• #INT_CANRXI Bus CAN recibe un nuevo mensaje en buffer 1.
• #INT_CANTXO Bus CAN transmisión completa en bufjer O.
• #INT_CANTX1 Bus CAN transmisión completa en buffer 1
• #INT_CANTX2 _ Bus CAN transmisión completa en bufjer 2.
• #INT_CANWAKE Bus CAN evento de activación o wake-up.
• #INT_CCP1 Unidad 1 de captura, comparación y PWM.
• #INT_CCP2 Unidad 2 de captura, comparación y PWM.
• #INT_CCP3 Unidad 3 de captura, comparación y PWM,
• #INT_CCP4 Unidad 4 de captura, comparación y PWM.
• #INT_CCP5 Unidad 5 de captura, comparación y PWM.
• #INT_COMP Comparador,
• #INT_COMPI Comparador1.
En nuestro caso que usaremos interrupciones externas Los pasos que se deben seguir para atender una
interrupción, son los siguientes:
• Habilitar el modo de prioridad de interrupciones #device high_ints=TRUE
• Digitar la función correspondiente a la interrupción. La función debe comenzar con # y
la interrupción correspondiente, por ejemplo para la función de interrupción por RB0 se
digita #int_EXT
• En el programa principal, habilitar las interrupciones en forma global, con la
instrucción: enable_interrupts(GLOBAL);
• En el programa principal, habilitar la interrupción correspondiente, como ejemplo se muestra como
habilitar la interrupción externa por RB0: enable_interrupts(INT_EXT);
LABORATORIO
• Configuración de los puertos

- Se configurara el puerto A como salida. En los pines A0,A1,A2 yA3 conectaremos los led, uno para
cada banda empacadora de fruta.
A0 A1 A2 A3
Led-Fresa (Rojo) Led- Led-Pera(Verde) Led-Manzana(Azul)
Mango(Amarillo)
- Se configurara el puerto B cono entrada. En este puerto se conectaran los generadores de pulso y los
pulsadores encargados de reactivar las bandas y reiniciar los contadores.

B0 B1 B2 B4 B5 B6 B7
GP-1 GP-2 GP-3 Pulsador(Fresa Pulsador Pulsador (Pera) Pulsador
) (Mango) (Manzana)
- Se configurara el puerto C como salida. En este puerto se conectaran los pines de control de la LCD
grafica.
C0 C1 C2 C3 C4 C5
CS2 CS1 RS R/W E RST
- El puerto D se configuro como salida y en el se conectaran los pines de transferencia de datos de
la LCD grafica.
D0 D1 D2 D3 D4 D5 D6 D7
DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7

• Diagrama esquemático en proteus.


• Diagrama de flujo.
interrupciones(
Inicio inicio_LCD()
)

Llama Inicializa la
Habilita las interrupciones
inicio_LCD(); LCD

Declara puertos Limpia la pantalla Se activan por


A,C,D como salida de la LCD prioridad y
y puerto B como
por flanco de
entrada
subida
Imprime membrete del
contador de Frutas
Apaga led’s
Se activa Se activa Se activa
Vuelve a int_EXT int_EXT1 int_EXT2
Llama función
interrupciones(); principal
int_EXT

Llama la
función
fresa()

SI Borre numero Aumente en 1


Si Encienda led
anterior de contador y
Contador 100ms y
conteo en la muestre en la
<10 luego apague
LCD LCD

NO

Reinicia
Borra número de Si SI contador=0
conteo y muestra input(pin_B4)== Borra
“FULL” en la LCD 0 “FULL” en la
LCD
NO
Llama la función Aumento en 1
int_EXT1
mango_y_pera() contaa1

Borre numero Aumente en 1


Si SI Encienda led2
anterior de contador1 y
Contador1< 100ms y luego
conteo en la muestro en la
15 apague
LCD LCD
NO
Borra número
Si SI de conteo y SI
Si Reinicia Borra “FULL”
Contador1> muestra
input(pin_B6)==0 contador1=0 de la LCD
14 “FULL” en la
LCD
NO NO

Si
Borre numero Aumente en 1
Contador2< SI Encienda led2
anterior de contador2 y Variable
20 && 100ms y luego
conteo en la muestro en la contaa2=contaa2+2
contaa2- apague
LCD LCD
contaa1=0

NO
Borra número Reinicia
Si SI de conteo y SI variables
Si Borra “FULL”
Contador2> muestra contador2=0
input(pin_B5)==0 en la LCD
19 “FULL” en la contaa2=2
NO LCD contaa1=0
NO
Sale de int_EXT1
int_EXT2

Llama la
función
manzana()

SI Borre numero Aumenteen 1


Encienda led3
Si anterior de contador3 y
100ms y
Contador3<5 conteo en la muestre en la
luego apague
LCD LCD

NO

Reinicia
Borra número de Si SI contador3=0
conteo y muestra input(pin_B7)== Borra
“FULL” en la LCD 0 “FULL” en la
LCD
NO

También podría gustarte