Está en la página 1de 15

LABORATORIO 2

CONSIDERACIONES Y SIMULACIÓN EN PROTEUS

Frangelys Abraham, Orlando Delepiani | Microprocesadores I | 02-2020


Método para la configuración de puertos e interrupciones
En este laboratorio se estudiará el uso de puertos e interrupciones, definición, características,
configuración y aplicaciones mediante MPLAB Y PROTEUS. Solo se tomaran en cuenta las
interrupciones por cambio de nivel IOCIE y la interrupción externa INTE.

Configuración de los puertos


Los puertos de un microcontrolador nos permiten leer y mostrar datos, es decir relacionarlo con el
exterior mediante periféricos. Contamos con los siguientes:

Diagrama general de los puertos E/S


Registros necesarios para configurar los puertos
REGISTROS FUNCIÓN
TRISx Permite configurar los puertos como entradas o salidas
PORTx Permite leer o escribir el puerto
LATx Permite leer o escribir latch del puerto
ANSELx Permite configurar el puerto como entrada/salida digital o entrada analógica
OPTION_REG Habilitador general de las resistencias Pull-Up mediante el bit 7
WPUx Permite habilitar las resistencias Pull-Up individualmente de cada puerto

Configuración de la Interrupciones
Las interrupciones, como su nombre lo indica, interrumpen el flujo normal de las operaciones en un
programa, primero se deben configurar. Cuando ocurre una interrupción, el valor de PC se guarda
en una pila y se detiene el funcionamiento (se guardan los valores de determinados registros en sus
registros sombra), enseguida, el programa se carga con la dirección 04h, que es el vector de
interrupción, una vez allí el programador puede definir una rutina que dependerá de la prioridad
que tenga cada interrupción, una vez finalizada, se deben limpiar las banderas de interrupción y salir
de la misma; cuando esto ocurre, el PC se carga nuevamente con el valor guardado y se reestablecen
los registros determinados.

Diagrama de funcionamiento de una interrupción


PILA Programa principal ISR
Dir_SUMA Dir_001 BSF 0x03, 5 0x04 -
Dir_002 BCF 0x03, 6 -
Dir_003 MOVF 0x03F, 0 -
Dir_004 CALL SUMA -
Dir_005 GOTO 0X00 -
Dir_SUMA BCF 0x03, 5 -
Dir_007 BSF 0x03, 6 -
Dir_008 ADDWF 0x05A, 1 -
Dir_009 RETURN RETFIE

Registros necesarios para configurar las interrupciones


REGISTROS FUNCIÓN
INTCON Permite habilitar INT GIE, INTE e IOCIE, contiene las banderas de INTE e IOCIE
OPTION_REG Permite definir el tipo de flanco de INTE (bit 6)
IOCxP Permite activar detección de IOCIE individual por flanco de subida
IOCxN Permite activar detección de IOCIE individual por flanco de bajada
IOCxF Banderas individuales de IOCIE
Montaje N° 1
Para el siguiente circuito elabore un programa que funcione de la siguiente manera: Si se presiona
el pulsador P1 encender en el display el número 0 (cero) y mantenerlo hasta tanto se libere el
pulsador. De igual manera ocurre para el pulsador P2 mostrar el número 4, P3 mostrar 5 y así
sucesivamente. Mientras no se presiona ningún botón el display estará mostrando la letra P.
Atender los pulsadores utilizando interrupciones. INT para RB0 e IOC para los demás pines

La rutina de interrupciones debe estar a partir de la dirección 10AAh en la memoria de programa.

Listado de materiales para el diseño


 Protoboard
 Fuente de alimentación de 5V
 5 pulsadores
 1 Microcontrolador PIC16F1787
 1 Red de resistencias de 8 vías (8*300Ω)
 1 Display 7 segmentos cátodo común

Diagrama de flujo de explicación del ejercicio


Configuración de puertos e interrupciones

INICIO

Habilitar interrupción INT externa (IOCIE) (RB0)

Configurar oscilador interno a 4MHz

Habilitar interrupción por cambio de nivel (IOCIE)


Configurar PORTB como digital

Configurar INTE por flanco de subida


Configurar PORTB como entrada y PORTC como salida

Configurar bits de IOCIE por flanco de


subida y bajada
Habilitar resistencias PULL-UP <6:7> del PORTB

Habilitar las interrupciones globales Ciclo infinito


(Mostrar “ ”)
Rutina de interrupciones

Inicio de interrupciones

Cambiar a página 2

SI SI PORTC=“ ”
INT Externa RB0? RB0=1?

NO NO

NO
Por cambio de nivel?

SI

SI PORTC=“ ”
IOCIE RB4? RB4=1?
SI

NO
NO

SI PORTC=“ ”
IOCIE RB5? RB5=1?
SI

NO NO

SI PORTC=“ ”
IOCIE RB6? RB6=0?
SI

NO NO

SI PORTC=“ ”
IOCIE RB7? RB7=0?
SI

NO NO
NOTA: dentro de la ISR se trabaja
con la página 2. Cuando se retorna
Limpiar banderas Salir con “RETFIE” el PCLATH se
de INTF e IOCIF (RETFIE) carga nuevamente con la página 0
Simulación en PROTEUS
Inicialmente se muestra “P”

U1
2 15 1 16
P1 INTE

- Frangelys
RA0 RC0

- Orlando- Frangelys
3 16 2 15
RA1 RC1
4 17 3 14
RA2 RC2
5 18 4 13
RA3 RC3
6 23 5 12
RA4 RC4
7 24 6 11
P2 IOCIE 10k RA5 RC5

Laboratorio22- Orlando
14 25 7 10
RA6 RC6
13 26 8 9
RA7 RC7
33 19
RB0 RD0
10k 34 20
RB1 RD1

Laboratorio
35 21
RB2 RD2
36 22
RB3 RD3
37 27
P3 IOCIE
38
RB4 RD4
28
RB5 RD5
39 29
RB6/ICSPCLK RD6
40 30
RB7/ICSPDAT RD7

10k 8
RE0
9
P4 IOCIE RE1
10
RE2
1
RE3/MCLR/Vpp
PIC16F1787
P5 IOCIE

Si existe la interrupción en P1 muestra “0”

U1
2 15 1 16
P1 INTE

Frangelys
RA0 RC0

Orlando- -Frangelys
3 16 2 15
RA1 RC1
4 17 3 14
RA2 RC2
5 18 4 13
RA3 RC3
6 23 5 12
RA4 RC4
7 24 6 11
P2 IOCIE 10k
14
RA5 Laboratorio22- -Orlando RC5
25 7 10
RA6 RC6
13 26 8 9
RA7 RC7
33 19
RB0 RD0
10k 34 20
RB1 RD1
Laboratorio

35 21
RB2 RD2
36 22
RB3 RD3
37 27
P3 IOCIE
38
RB4 RD4
28
RB5 RD5
39 29
RB6/ICSPCLK RD6
40 30
RB7/ICSPDAT RD7

10k 8
RE0
9
P4 IOCIE RE1
10
RE2
1
RE3/MCLR/Vpp
PIC16F1787
P5 IOCIE

Con P4 muestra “4”

U1
2 15 1 16
P1 INTE RA0 RC0
Frangelys
Orlando- -Frangelys

3 16 2 15
RA1 RC1
4 17 3 14
RA2 RC2
5 18 4 13
RA3 RC3
6 23 5 12
RA4 RC4
7 24 6 11
P2 IOCIE 10k RA5 RC5
Laboratorio22- -Orlando

14 25 7 10
RA6 RC6
13 26 8 9
RA7 RC7
33 19
RB0 RD0
10k 34 20
RB1 RD1
Laboratorio

35 21
RB2 RD2
36 22
RB3 RD3
37 27
P3 IOCIE
38
RB4 RD4
28
RB5 RD5
39 29
RB6/ICSPCLK RD6
40 30
RB7/ICSPDAT RD7

10k 8
RE0
9
P4 IOCIE RE1
10
RE2
1
RE3/MCLR/Vpp
PIC16F1787
P5 IOCIE

Con P5 muestra “5”


U1
2 15 1 16
P1 INTE

- Frangelys
RA0 RC0

- Orlando- Frangelys
3 16 2 15
RA1 RC1
4 17 3 14
RA2 RC2
5 18 4 13
RA3 RC3
6 23 5 12
RA4 RC4
7 24 6 11
P2 IOCIE 10k RA5 RC5

Laboratorio22- Orlando
14 25 7 10
RA6 RC6
13 26 8 9
RA7 RC7
33 19
RB0 RD0
10k 34 20
RB1 RD1

Laboratorio
35 21
RB2 RD2
36 22
RB3 RD3
37 27
P3 IOCIE
38
RB4 RD4
28
RB5 RD5
39 29
RB6/ICSPCLK RD6
40 30
RB7/ICSPDAT RD7

10k 8
RE0
9
P4 IOCIE RE1
10
RE2
1
RE3/MCLR/Vpp
PIC16F1787
P5 IOCIE

Con P6 muestra “6”

U1
2 15 1 16
P1 INTE RA0 RC0

Frangelys
Orlando- -Frangelys
3 16 2 15
RA1 RC1
4 17 3 14
RA2 RC2
5 18 4 13
RA3 RC3
6 23 5 12
RA4 RC4
7 24 6 11
P2 IOCIE 10k RA5 RC5

Laboratorio22- -Orlando
14 25 7 10
RA6 RC6
13 26 8 9
RA7 RC7
33 19
RB0 RD0
10k 34 20
RB1 RD1

Laboratorio
35 21
RB2 RD2
36 22
RB3 RD3
37 27
P3 IOCIE
38
RB4 RD4
28
RB5 RD5
39 29
RB6/ICSPCLK RD6
40 30
RB7/ICSPDAT RD7

10k 8
RE0
9
P4 IOCIE RE1
10
RE2
1
RE3/MCLR/Vpp
PIC16F1787
P5 IOCIE

Con P7 muestra “7”

U1
2 15 1 16
P1 INTE
- Frangelys

RA0 RC0
- Orlando- Frangelys

3 16 2 15
RA1 RC1
4 17 3 14
RA2 RC2
5 18 4 13
RA3 RC3
6 23 5 12
RA4 RC4
7 24 6 11
P2 IOCIE 10k RA5 RC5
Laboratorio22- Orlando

14 25 7 10
RA6 RC6
13 26 8 9
RA7 RC7
33 19
RB0 RD0
10k 34 20
RB1 RD1
Laboratorio

35 21
RB2 RD2
36 22
RB3 RD3
37 27
P3 IOCIE
38
RB4 RD4
28
RB5 RD5
39 29
RB6/ICSPCLK RD6
40 30
RB7/ICSPDAT RD7

10k 8
RE0
9
P4 IOCIE RE1
10
RE2
1
RE3/MCLR/Vpp
PIC16F1787
P5 IOCIE

Para este mismo caso, si se presiona otro pulsador, la bandera correspondiente se activa, pero no
ocurre interrupción puesto que GIE está deshabilitado.
U1
2 15 1 16
P1 INTE

Frangelys
RA0 RC0

Orlando- -Frangelys
3 16 2 15
RA1 RC1
4 17 3 14
RA2 RC2
5 18 4 13
RA3 RC3
6 23 5 12
RA4 RC4
7 24 6 11
P2 IOCIE 10k RA5 RC5

Laboratorio22- -Orlando
14 25 7 10
RA6 RC6
13 26 8 9
RA7 RC7
33 19
RB0 RD0
10k 34 20
RB1 RD1

Laboratorio
35 21
RB2 RD2
36 22
RB3 RD3
37 27
P3 IOCIE
38
RB4 RD4
28
RB5 RD5
39 29
RB6/ICSPCLK RD6
40 30
RB7/ICSPDAT RD7

10k 8
RE0
9
P4 IOCIE RE1
10
RE2
1
RE3/MCLR/Vpp
PIC16F1787
P5 IOCIE

Algoritmo
list p=16f1787
include<p16f1787.inc>

;CONFIG1 & CONFIG2


__CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_ON &
_CP_OFF & _CPD_OFF & _BOREN_ON & _CLKOUTEN_OFF & _IESO_ON & _FCMEN_ON
__CONFIG _CONFIG2, _WRT_OFF & _VCAPEN_OFF & _PLLEN_ON & _STVREN_ON &
_BORV_LO & _LPBOR_OFF & _LVP_ON

ORG 0X00
GOTO INICIO ;salvamos el vector de interrupción
ORG 0X04

BSF PCLATH, 4 ;preparamos el pc para cargar la página 2


BCF PCLATH, 3
CALL PAG_2
ORG 0X10AA ;la rutina ISR estará a partir de 0x10AA
PAG_2 ;en la memoria de programa

VERIF_INTF
BANKSEL INTCON
BTFSS INTCON,INTF ;hubo interrupción en INTF?
GOTO VERIF_IOCIF ;verificamos las siguientes INT
CICLO_RB0 ;mostramos "0"
BANKSEL PORTB
BTFSS PORTB, 0 ;se soltó el pulsador? verificamos sig INT
GOTO VERIF_IOCIF
MOVLW 0X3F
MOVWF PORTC
GOTO CICLO_RB0

VERIF_IOCIF
BANKSEL INTCON
BTFSS INTCON,IOCIF ;hubo interrupción por cambio de nivel (IOCIE)?
GOTO SALIR ;salimos

VERIF_RB4
BANKSEL IOCBF
BTFSS IOCBF, 4 ;interrupción por RB4?
GOTO VERIF_RB5 ;verificamos sig IOCIE
CICLO_RB4 ;mostramos "4"
BANKSEL PORTB
BTFSS PORTB, 4 ;se soltó el pulsador?
GOTO VERIF_RB5 ;verificamos sig IOCIE
MOVLW 0X66
MOVWF PORTC
GOTO CICLO_RB4

VERIF_RB5
BANKSEL IOCBF
BTFSS IOCBF, 5 ;interrupción por RB5?
GOTO VERIF_RB6 ;verificamos sig IOCIE
CICLO_RB5 ;mostramos "5"
BANKSEL PORTB
BTFSS PORTB, 5 ;se soltó el pulsador?
GOTO VERIF_RB6 ;verificamos sig IOCIE
MOVLW 0X6D
MOVWF PORTC
GOTO CICLO_RB5

VERIF_RB6
BANKSEL IOCBF
BTFSS IOCBF, 6 ;interrupción por RB6?
GOTO VERIF_RB7 ;verificamos sig IOCIE
CICLO_RB6 ;mostramos "6"
BANKSEL PORTB
BTFSC PORTB, 6 ;se soltó el pulsador?
GOTO VERIF_RB7 ;verificamos sig IOCIE
MOVLW 0X7D
MOVWF PORTC
GOTO CICLO_RB6

VERIF_RB7
BANKSEL IOCBF
BTFSS IOCBF, 7 ;interrupción por RB7?
GOTO SALIR ;salimos
CICLO_RB7 ;mostramos "6"
BANKSEL PORTB
BTFSC PORTB, 7 ;se soltó el pulsador?
GOTO SALIR ;salimos
MOVLW 0X07
MOVWF PORTC
GOTO CICLO_RB7

SALIR
BANKSEL INTCON
BCF INTCON, INTF ;limpiamos bandera de interrupcion por INTE
BCF INTCON, IOCIF ;limpiamos bandera de interrupcion por IOCIE
BANKSEL IOCBF
CLRF IOCBF ;limpiamos banderas individuales de IOCIE

RETFIE ;salimos de la ISR

ORG 0X07
INICIO

BANKSEL OSCCON ;configuramos el reloj interno a 4MHz


MOVLW 0X6F
MOVWF OSCCON

BANKSEL ANSELB ;puerto B como digital


CLRF ANSELB

BANKSEL TRISB ;puertos B como entrada y C como salida


MOVLW 0XFF
MOVWF TRISB
CLRF TRISC

BANKSEL OPTION_REG ;configuramos INTE por flanco de subida (INTDG=1)


MOVLW B'01000000'
MOVWF OPTION_REG

BANKSEL WPUB ;habilitamos las resitencias Pull-Up puerto B <6:7>


MOVLW B'11000000'
MOVWF WPUB

BANKSEL INTCON ;habilitamos las interrupciones globales (GIE, bit7),


MOVLW B'10011000' ;interrupcion externa INT (INTE, bit4) y las
MOVWF INTCON ;interrupciones por cambio de nivel (IOCIE, bit3)

BANKSEL IOCBP ;configuramos los bits <4:5> por flanco de subida


BSF IOCBP, 4
BSF IOCBP, 5
BSF IOCBN, 6 ;configuramos los bits <6:7> por flanco de bajada
BSF IOCBN, 7

MOSTRAR_P ;fuera de cualquier interrupcion mostramos "P"


BANKSEL PORTC
MOVLW B'01110011'
MOVWF PORTC
GOTO MOSTRAR_P

END

Montaje N° 2
Para el siguiente hardware realice un programa que lea el dip-switch conectado al puerto C. El valor
se ingresa en binario (0- 15) muestre el valor leído en el display (cátodo común) y utilice un diodo
red en el pin RB7 para indicar las decenas (10- 15). Utilice resistencias Pull-Up. Utilice interrupciones
para el puerto C.

Listado de materiales para el diseño


 Protoboard
 Fuente de alimentación de 5V
 4 pulsadores
 1 Microcontrolador PIC16F1787
 1 Red de resistencias de 8 vías (8*300Ω)
 1 Display 7 segmentos cátodo común
 1 diodo led
Diagrama de flujo de explicación del ejercicio
Configuración de puertos e interrupciones

INICIO

Configurar oscilador interno a 4MHz

Configurar PORTC como entrada y PORTB como salida

Habilitar resistencias PULL-UP del PORTC

Habilitar las interrupciones globales

Habilitar interrupción por cambio de nivel (IOCIE)

Configurar bits de IOCIE por flanco de subida y bajada

Ciclo infinito

Rutina de interrupciones

Inicio de interrupciones

Leer valor de PORTC

NO Convertir
Es BCD? a 7seg

SI

Mover valor a PORTB

Limpiar banderas de IOCIF

Salir
(RETFIE)
Simulación en PROTEUS
Inicialmente, muestra el cero sin importar el estado de las entradas

U1
15 2
RC0 16
RC0 RA0
3

Laboratorio 2 - Orlando - Frangelys


RC1 RA1
17 4
RC1 18
RC2 RA2
5
RC3 RA3
23 6
RC2 24
RC4 RA4
7
RC5 RA5
RC3 25
26
RC6
RC7
RA6
RA7
14
13 BCD
Bin 19
20
21
RD0
RD1
RB0
RB1
33
34
35
1
2
3
16
15
14
RD2 RB2
22 36 4 13
RD3 RB3
27 37 5 12
RD4 RB4
28 38 6 11
RD5 RB5
29 39 7 10
RD6 RB6/ICSPCLK
30 40 8 9
RD7 RB7/ICSPDAT
8
RE0
9
10
RE1 DEC
RE2
1
RE3/MCLR/Vpp
PIC16F1787

Para cualquier interrupción por cambio de nivel, sea por flanco de subida o de bajada, muestra el
valor existente en las entradas

U1
15 2
RC0 16
RC0 RA0
3
Laboratorio 2 - Orlando - Frangelys

RC1 RA1
17 4
RC1 18
RC2 RA2
5
RC3 RA3
23 6
RC2 24
RC4 RA4
7
RC5 RA5
RC3 25
26
RC6
RC7
RA6
RA7
14
13 BCD
Bin 19
20
21
RD0
RD1
RB0
RB1
33
34
35
1
2
3
16
15
14
RD2 RB2
22 36 4 13
RD3 RB3
27 37 5 12
RD4 RB4
28 38 6 11
RD5 RB5
29 39 7 10
RD6 RB6/ICSPCLK
30 40 8 9
RD7 RB7/ICSPDAT
8
RE0
9
10
RE1 DEC
RE2
1
RE3/MCLR/Vpp
PIC16F1787

U1
15 2
RC0 16
RC0 RA0
3
Laboratorio 2 - Orlando - Frangelys

RC1 RA1
17 4
RC1 18
RC2 RA2
5
RC3 RA3
23 6
RC2 24
RC4 RA4
7
RC5 RA5
RC3 25
26
RC6
RC7
RA6
RA7
14
13 BCD
Bin 19
20
21
RD0
RD1
RB0
RB1
33
34
35
1
2
3
16
15
14
RD2 RB2
22 36 4 13
RD3 RB3
27 37 5 12
RD4 RB4
28 38 6 11
RD5 RB5
29 39 7 10
RD6 RB6/ICSPCLK
30 40 8 9
RD7 RB7/ICSPDAT
8
RE0
9
10
RE1 DEC
RE2
1
RE3/MCLR/Vpp
PIC16F1787
U1
15 2
RC0 16
RC0 RA0
3

Laboratorio 2 - Orlando - Frangelys


RC1 RA1
17 4
RC1 18
RC2 RA2
5
RC3 RA3
23 6
RC2 24
RC4 RA4
7
RC5 RA5
RC3 25
26
RC6
RC7
RA6
RA7
14
13 BCD
Bin 19
20
21
RD0
RD1
RB0
RB1
33
34
35
1
2
3
16
15
14
RD2 RB2
22 36 4 13
RD3 RB3
27 37 5 12
RD4 RB4
28 38 6 11
RD5 RB5
29 39 7 10
RD6 RB6/ICSPCLK
30 40 8 9
RD7 RB7/ICSPDAT
8
RE0
9
10
RE1 DEC
RE2
1
RE3/MCLR/Vpp
PIC16F1787

Si el número en la entrada no es BCD, muestra el valor de la unidad, y representa la decena con un


diodo led

U1
15 2
RC0 16
RC0 RA0
3
Laboratorio 2 - Orlando - Frangelys

RC1 RA1
17 4
RC1 18
RC2 RA2
5
RC3 RA3
23 6
RC2 24
RC4 RA4
7
RC5 RA5
RC3 25
26
RC6
RC7
RA6
RA7
14
13 BCD
Bin 19
20
21
RD0
RD1
RB0
RB1
33
34
35
1
2
3
16
15
14
RD2 RB2
22 36 4 13
RD3 RB3
27 37 5 12
RD4 RB4
28 38 6 11
RD5 RB5
29 39 7 10
RD6 RB6/ICSPCLK
30 40 8 9
RD7 RB7/ICSPDAT
8
RE0
9
10
RE1 DEC
RE2
1
RE3/MCLR/Vpp
PIC16F1787

Algoritmo
list p=16f1787
include <P16F1787.inc>

;CONFIG1 & CONFIG2


__CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_ON &
_CP_OFF & _CPD_OFF & _BOREN_ON & _CLKOUTEN_OFF & _IESO_ON & _FCMEN_ON
__CONFIG _CONFIG2, _WRT_OFF & _VCAPEN_OFF & _PLLEN_ON & _STVREN_ON &
_BORV_LO & _LPBOR_OFF & _LVP_ON

ORG 0X00
GOTO INICIO ;salvamos el vector de interrupción
ORG 0X04

MOVLW 0X0F ;leemos el nible bajo de PORTC


ANDWF PORTC, W
MOVWF 0X070
MOVLW .10
SUBWF 0X070, W
BTFSC STATUS, C ;es BCD?
GOTO NO_BCD ;convertimos el numero a BCD

BCD
MOVF 0X070, W
CALL CONV_NUMERO ;convertimos a 7seg
MOVWF 0X070
MOVWF PORTB ;mostramos el numero actual de PORTC, <0:3> en 7seg

SALIR
BANKSEL IOCCF
MOVLW 0XFF
XORWF IOCCF,W ;limpiamos las banderas individuales de IOCIE
ANDWF IOCCF,F
BANKSEL INTCON
BCF INTCON,IOCIF ;limpiamos la bandera de IOCIE
RETFIE ;salimos de la ISR

NO_BCD
CALL CONV_NUMERO ;convertimos a 7seg
MOVWF 0X070
BSF 0X070, 7
MOVF 0X070, W
MOVWF PORTB ;mostramos el valor convertido a bcd y luego a 7seg
GOTO SALIR

CONV_NUMERO
BRW
RETLW 0X3F ;cero
RETLW 0X06 ;uno
RETLW 0X5B ;dos
RETLW 0X4F ;tres
RETLW 0X66 ;cuatro
RETLW 0X6D ;cinco
RETLW 0X7D ;seis
RETLW 0X07 ;siete
RETLW 0X7F ;ocho
RETLW 0X6F ;nueve
RETURN

INICIO
BANKSEL OSCCON ;configuramos el reloj interno a 4MHz
MOVLW 0X6F
MOVWF OSCCON
BANKSEL TRISB ;puerto B como salida y C como entrada
CLRF TRISB
MOVLW 0XFF
MOVWF TRISC

BANKSEL INTCON ;habilitamos las interrupciones globales (GIE, bit7),


MOVLW b'10001000' ;e interrupciones por cambio de nivel (IOCIE, bit3)
MOVWF INTCON

BANKSEL OPTION_REG
MOVLW 0X00
MOVWF OPTION_REG

BANKSEL WPUC ;habilitamos las resitencias Pull-Up del puerto B


MOVLW 0XFF
MOVWF WPUC

BANKSEL IOCCP ;configuramos los bits <0:3> por flanco de subida


MOVLW B'00001111'
MOVWF IOCCP

BANKSEL IOCCN ;configuramos los bits <0:3> por flanco de bajada


MOVLW B'00001111'
MOVWF IOCCN

BANKSEL PORTA
MOVLW B'00111111'
MOVWF PORTB

GOTO $ ;fuera de las interrupciones mostramos el ultimo


;guardado en PORTB

END

También podría gustarte