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
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
15
14
13
11
12
10 0
INTO
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
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
LAZO_1:
LDI R16, Ob11110000
OUT PORTA, R16
MOV AUX, TECLA
CALL MOSTRAR_VALOR
RJMP LAZO_1
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:
14
15
16
17
;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