Anda di halaman 1dari 19

EJERCICIOS CON INTERRUPCIONES

Detalles importantes
Garantizar el pull up: Para garantizar el PULL-UP se debe considerar el bit
PUD ubicado en el registro MCUCR. Este bit activa las resistencias de PULLUP en estado 0 lgico.
Registro MCUCR
Cdigo

IN R20, MCUCR

; Almaceno el estado de MCUCR, el valor de inters es


la quinta posicin R20=XXX1XXXX
ANDI R20, Ob11101111 ; Si PUD se desactivo, es decir PUD=1 mediante ANDI pasa
nuevamente a ser 0 se tiene PUD=0
OUT MCUCR, R20
; Cargo PUD=0 en el registro MCUCR
2

Detalles importantes
Garantizar el pull up:
Tabla resumen
DDXN

PORTXN

PUD

E/S

PULL-UP

NO

SI

NO

EJERCICIOS
Desarrollar un programa para visualizar en el display la tecla presionada de un
teclado matricial, empleando la interrupcin externa int0.

INTO

EJERCICIOS
CONSIDERACIONES
PUERTO A / TECLADO

INTO

PIN

E/S

INTERRUPCION

PA0

INT0

PA1

INTO

PA2

INTO

PA3

INTO

PA4

------

PA5

------

PA6

------

PA7

------

EJERCICIOS
CONSIDERACIONES
PUERTO B / DISPLAY

INTO

PIN

E/S

SEGMENTOS

PB0

PB1

PB2

PB3

PB4

PB5

PB6

PB7

---

---

EJERCICIOS
CONSIDERACIONES

EQUIVALENCIA DE LAS 16 TECLAS DEL


TECLADO
7

15

14

13

11

12

10 0
INTO

El mximo valor de tecla es 15


Puedo emplear el valor 16 para realizar el
apagado del display

EJERCICIOS
.INCLUDE M164PDEF.INC
.DEF TECLA = R18
; EN ESTE VARIABLE SE ALMACENA EL VALOR DE LA TECLA QUE FUE
PRESIONADA PARA MOSTRAR EN EL DISPLAY
.DEF AUX = R19
; VARIABLE PARA OPERACIONES
.DEF TECLA_PRESIONADA = R20 ; EN ESTA VARIABLE SE ALMACENA LA TECLA PRESIONADA POR
EL USUARIO
;DEFINICION DE VECTORES DE INTERRUPCIONES

; Localizacion del reset


.ORG 0X00
JMP MAIN
; Localizacin de INT0
.ORG 0X02
JMP INTERRUPCION_TECLADO

; INTERRUPCION_TECLADO nombre de la funcin con


la cual va a operar INT0
8

EJERCICIOS
;DEFINICION DE MAIN
MAIN:
; DEFINICIN DE PUERTOS E/S
; PORTA E/S
LDI R16, ObOOOO1111
OUT DDRA, R16
LDI R16, Ob11111111
OUT PORTA,R16
; ACTIVO PULL UP
; PORTB SALIDA, CONECTADO AL DISPLAY
LDI R16,OXFF
OUT DDRB,R16

EJERCICIOS
;DEFINICION DE MAIN
; CONFIGURACION DE INTERRUPCIONES
; PORTD ENTRADA, YA QUE INT0 SE ENCUENTRA EN PD2
LDI R16, 0X00
OUT DDRD, R16
LDI R16, 0b00000100
; ACTIVO PULL UP PARA EL PIN 2 DEL PORTD
OUT PORTD,R16
; HABILITO EL BIT INT0 EN EL REGISTRO EIMSK
LDI R16,Ob00000001
OUT EIMSK,R16
; HABILITO MODO DE OPERACIN, EVENTO QUE HAR PETICN DE INTERRUPCIN
LDI R16, 0b00000010
;SI LAS FILAS DEL TECLADO (ENTRADAS) PASAN DE 1 A 0
STS EICRA, R16
; HABILITACION GLOBAL DE INTERRUPCIONES BIT I=1 DEL SREG
SEI
10

EJERCICIOS
;DEFINICION DE MAIN

; GARANTIZO EL PULL-UP
IN R20, MCUCR
; ALMACENO EL ESTADO DE MCUCR
ANDI R20, Ob11101111 ; CONFIGURO PUD=0
OUT MCUCR, R20
; CARGO PUD=0 En El Registro MCUCR
; INICIALIZO EL SP
LDI R16, LOW(RAMEND)
OUT SPL, R16
LDI R16, HIGH(RAMEND)
OUT SPH, R16

11

EJERCICIOS
;DEFINICION DE MAIN

; PRENDER EL DISPLAY
LDI AUX, 0X00
LDI TECLA, 16

; BORRO EL CONTENIDO DE LA VARIABLE AUX


; TECLA=16, SER UTILIZADA PARA EL CASO QUE NO SE
ACCIONE NINGUNA TECLA, EL DISPLAY DEBERA ESTAR APAGADO

LAZO_1:
LDI R16, Ob11110000
OUT PORTA, R16
MOV AUX, TECLA

CALL MOSTRAR_VALOR
RJMP LAZO_1

; LAS FILAS DEL TECLADO SE ACTIVAN EN 0


; CARGO A AUX EL VALOR DE TECLA QUE FUE PRESIONADA
POR EL USUARIO, ESTA SERA MOSTRADA EN EL DISPLAY
; LLAMO A LA SUBRUTINA QUE INDICAR EL VALOR EN EL
DISPLAY
; ESTA OPERACIN SE HAR EN FORMA INDEFINIDA

12

;DEFINICION DE MAIN
; PRENDER EL DISPLAY
; SUBRUTINA MOTRAR_VALOR
MOSTRAR_VALOR:
CPI TECLA,16 ; COMPARA TECLA CON 16, 16 SER UTILIZADO PARA EL
CASO QUE NO SE PRESIONE NINGUNA TECLA
BREQ APAGADO ; SI ES IGUAL LA COMPARACION SALTA A APAGADO
; SI TECLA NO ES IGUAL A 16, BUSCO EQUIVALENCIA EN TABLA
LDI ZH,HIGH(TABLA<<1) ; DEFINO AL PUNTERO
LDI ZL,LOW(TABLA<<1)
ADD ZL, AUX
; OPERACIONES PARA LOCALIZAR POSICION
CLR AUX
ADC ZH, AUX
LPM AUX,Z
; AUX= SEGMENTOS A PRENDER
OUT PORTB, AUX
CALL RETARDO
LDI TECLA, 16
; DESPUES DE MOTRAR VALOR APAGO DISPLAY

APAGADO:

LDI R16, Ob11111111


OUT PORTB, R16
RET

; APAGA LOS SEGMENTOS DEL DISPLAY


13

;DEFINICION DEL FUNCIONAMIENTO DE LA INTERRUPCION INTO


INTERRUPCION_TECLADO:
; GARANTIZO EL RETORNO DESPUS DE LA INTERRUPCIN
PUSH R22
; ALMACENO R22 EN EL STACK
IN R22,SREG
; ALMACENO EL ESTADO DE SREG (I=1) EN R22
PUSH R22
; ALMACENO EL ESTADO DE SREG (I=1) EN EL STACK
;ESCANEO DE LA PRIMERA FILA CON LAS COLUMNAS PARA DESCRIFRAR TECLA_PRESIONADA
IN TECLA_PRESIONADA,PINA ; LEER DATOS PRESENTES EN PUERTO A
LDI R16, 0B11111110
; ACTIVO EL ESCANEO DE LA 1ERA FILA
OUT PORTA, R16
SBIS TECLA_PRESIONADA ,4 ; SI EL PIN4=1 DE TECLA_PRESIONADA, SALTA A LA
SIGUIENTE INSTRUCCION
LDI TECLA,7
; SI EL PIN4=0 DE TECLA_PRESIONADA, EL USUARIO
PRESION 7
SBIS TECLA_PRESIONADA ,5
LDI TECLA,8
SBIS TECLA_PRESIONADA ,6
LDI TECLA,9
SBIS TECLA_PRESIONADA ,7
LDI TECLA,15

14

;DEFINICION DEL FUNCIONAMIENTO DE INTO LLAMADA INTERRUPCION_TECLADO


;INTERRUPCION_TECLADO:

;ESCANEO DE LA SEGUNDA FILA CON LAS COLUMNAS PARA DESCRIFRAR TECLA_PRESIONADA

IN TECLA_PRESIONADA,PINA ; LEER DATOS PRESENTES EN PUERTO A


LDI R16, 0B11111101
OUT PORTA, R16
SBIS TECLA_PRESIONADA
LDI TECLA,4
SBIS TECLA_PRESIONADA
LDI TECLA,5
SBIS TECLA_PRESIONADA
LDI TECLA,6
SBIS TECLA_PRESIONADA
LDI TECLA,14

; ACTIVO EL ESCANEO DE LA 2DA FILA


,4
,5
,6
,7

15

;DEFINICION DEL FUNCIONAMIENTO DE INT0 LLAMADA INTERRUPCION_TECLADO


;INTERRUPCION_TECLADO:

;ESCANEO DE LA TERCERA FILA CON LAS COLUMNAS PARA DESCRIFRAR TECLA_PRESIONADA

IN TECLA_PRESIONADA,PINA ; LEER DATOS PRESENTES EN PUERTO A


LDI R16, 0B11111011
OUT PORTA, R16
SBIS TECLA_PRESIONADA
LDI TECLA,1
SBIS TECLA_PRESIONADA
LDI TECLA,2
SBIS TECLA_PRESIONADA
LDI TECLA,3
SBIS TECLA_PRESIONADA
LDI TECLA,13

; ACTIVO EL ESCANEO DE LA 3ERA FILA


,4
,5
,6
,7

16

;DEFINICION DEL FUNCIONAMIENTO DE INTO LLAMADA INTERRUPCION_TECLADO


;INTERRUPCION_TECLADO:

;ESCANEO DE LA CUARTA FILA CON LAS COLUMNAS PARA DESCRIFRAR TECLA_PRESIONADA

IN TECLA_PRESIONADA,PINA ; LEER DATOS PRESENTES EN PUERTO A


LDI R16, 0B11110111
OUT PORTA, R16
SBIS TECLA_PRESIONADA
LDI TECLA,10
SBIS TECLA_PRESIONADA
LDI TECLA,0
SBIS TECLA_PRESIONADA
LDI TECLA,11
SBIS TECLA_PRESIONADA
LDI TECLA,12

; ACTIVO EL ESCANEO DE LA 4TA FILA


,4
,5
,6
,7

17

;DEFINICION DEL FUNCIONAMIENTO DE INTO LLAMADA INTERRUPCION_TECLADO


;INTERRUPCION_TECLADO:
; FINALIZADA LA EJECUCIN DE LA INTERRUPCION LA BANDERA I=0, POR ELLO ACTIVO
CON EL ESTADO ALMACENADO EN EL STACK PARA QUE LA INT0 CONTINE OPERATIVA
POP R22
; RECUPERO DEL STACK R22
OUT SREG, R22 ; CARGO A SREG EL ESTADO RECUPERADO (I=1)
POP R22
;FINALIZO LA INTERRUPCIN INT0
RETI

;DEFINICIN DE LA SUBRUTINA RETARDO


RETARDO:
LDI R16, 255
REPETIR:
NOP ; DE ACUERDO AL NUMERO DE NOPs AUMENTA O DISMINUYE EL
RETARDO
NOP
DEC R16
BRNE REPETIR
18
RET

;DEFINICION DE LA TABLA
TABLA:

.db
.db
.db
.db
.db
.db
.db
.db

0b1000000,0b1111001
0b0100100,0b0110000
0b0011001,0b0010010
0b0000010,0b1111000
0b0000000,0b0010000
0b0001000,0b0110000
0b1000110,0b1110000
0b0000110,0b0001110

;0,1
;2,3
;4,5
;6,7
;8,9
;A,B
;C,D
;E,F

Nota: En este caso las subrutinas no tienen asignada una direccin en memoria por esta razn, para
reutilizarlas en otros programas deberan ser copiadas nuevamente, si se hubiera asignada una localidad
de memoria para almacenar la subrutina bastara con llamarla.
19

Anda mungkin juga menyukai