Está en la página 1de 6

ESCUELA POLITECNICA NACIO NAL SISTEMAS MICROPROCESADOS NOMBRES: Wil mer Villegas FECHA: 20 04 2012 Realizar un program a para

ra visualizar en un display la tecla presionada de un teclado matricial para este caso vamos a usar el mtodo 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 main .org 0x02 j mp teclado

main: ;configuro como salidas ser tempo out ddrb,tempo ;configuro como entr adas y salidas para poder usar mi teclado ldi tempo,0b00001111 out ddra,tempo ;configuro pull -up y salidas nor mal mente en 1L ldi tempo,0b11111111 out porta,tempo ;configuro como entradas las interrupciones clr tempo out ddrd,tempo

ldi tempo,0b00000100 out portd,tempo ;garanti zo pull -up in tempo,mcucr andi tempo,0b11101111 out mcucr,tempo ;inicializo el SP ldi r16,hi gh(ramend) out sph,r16 ldi r16,low(ramend) out spl,r16 ;habilitacion indivi dual de interrupciones ldi tempo,0b00000001 out ei msk,tempo ;pongo como qui ero que desencadene mi interrupcion ldi tempo,0b00000010 sts eicra,tempo

las

se

;habilitacin global de interrupciones sei clr aux ldi tecla,16 lazo: ldi tempo,0b11110000 out porta,tempo mov aux,tecla call visuali zar rj mp lazo

visuali zar: cpi tecla,16 breq off ldi zh,hi gh(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 tecla,5 sbis pina,6 ldi tecla,6 sbis pina,7 ldi tecla,14 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 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

off:

teclado: ;interrupcion para saber que tecla tengo presionada y sal vo 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

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: