ESCUELA POLITECNICA NACIONAL SISTEMAS MICROPROCESADOS NOMBRES: Wilmer Villegas FECHA: 2 0 – 0 4 – 2012 Realizar un programa para visualizar en un display la tecla presionada de un teclado matricial para este caso vamos a usar el mé todo de barrido de teclado con interrupciones. PROGRAMA EN AVR: .include"m164pdef.inc" ;declaro las variables que voy a usar .def tempo=r17 .def tecla=r18 .def aux=r19 .def conta1=r20 .def conta2=r21 .def conta3=r22 ;pongo los vectores de interrupciones .org 0x00 j mp m a i n .org 0x02 j mp t e c l a d o
main: ;configuro como salidas ser tempo out ddrb,tempo ;configuro como entradas y salidas para poder usar mi teclado ldi tempo,0b00001111 out ddra,tempo ;configuro pull-up y salidas normalmente en 1L ldi tempo,0b11111111 out porta,tempo ;configuro como entradas las interrupciones clr tempo out ddrd,tempo
ldi tempo,0b00000100 out portd,tempo ;garantizo pull-up in tempo,mcucr andi tempo,0b11101111 out mcucr,tempo ;inicializo el SP ldi r16,high(ramend) out sph,r16 ldi r16,low(ramend) out spl,r16 ;habilitacion individual de interrupciones ldi tempo,0b00000001 out eimsk,tempo ;pongo como quiero que desencadene mi interrupcion ldi tempo,0b00000010 sts eicra,tempo
las
se
;habilitación global de interrupciones sei clr aux ldi tecla,16 lazo: ldi tempo,0b11110000 out porta,tempo mov aux,tecla call visualizar rjmp lazo
ldi tecla,5 sbis pina,6 ldi tecla,6 sbis pina,7 ldi tecla,14
visualizar:
off:
cpi tecla,16 breq off ldi zh,high(TABLA<<1) ldi zl,low(TABLA<<1) add zl,aux clr aux adc zh,aux lpm aux,z out portb,aux call retardo ldi tecla,16 ldi tempo,0b11111111 out portb,tempo ret
ldi tempo,0b11111011 out porta,tempo sbis pina,4 ldi tecla,1 sbis pina,5 ldi tecla,2 sbis pina,6 ldi tecla,3 sbis pina,7 ldi tecla,13
teclado: ;interrupcion para saber que tecla tengo presionada y salvo el estado push tempo in tempo,sreg push tempo ;compara cada fila y cada columna para saber que tecla tengo presionada ldi tempo,0b11111110 out porta,tempo sbis pina,4 ldi tecla,7 sbis pina,5 ldi tecla,8 sbis pina,6 ldi tecla,9 sbis pina,7 ldi tecla,15 ldi tempo,0b11111101 out porta,tempo sbis pina,4 ldi tecla,4 sbis pina,5
ldi tempo,0b11110111 out porta,tempo sbis pina,4 ldi tecla,10 sbis pina,5 ldi tecla,0 sbis pina,6 ldi tecla,11 sbis pina,7 ldi tecla,12 ;regreso a mi estado anterior pop tempo out sreg,tempo pop tempo reti retardo: salto3: salto2: salto1:
ldi conta3,100 ldi conta2,100 ldi conta1,100 dec conta1 brne salto1 dec conta2
brne salto2 dec conta3 brne salto3 ret
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
SIMULACION EN PROTEUS:
DIAGRAMA DE FUJO: