Está en la página 1de 6

SUBRUTINA DE BARRIDO DE TECLADO 4x3 INTERRUPCIONES Circuito

Inicializar el prtico de la siguiente manera


ldi r16,0b00000111 out ddra,r16 ;I/O keypad

Crear espacios de memoria con los siguientes nombres dig1:.byte 1 dig2:.byte 1 dig3:.byte 1 dig4:.byte 1 contador:.byte 1 digito:.byte 1 Configuro interrupciones ;;;;;;;;;;;;;;;,configuro interrupciones ldi tempo,0b00000001 sts pcicr,tempo ldi tempo,0b11111000 sts pcmsk0,tempo sei

Se debe utilizar interrupciones para llamar a TESTEAR

;=====================================SUBRUTINA BARRIDO DE TECLADO, con interrupciones ; Tener en cuenta que se debe creear en la sram los siguientes espacios dig1, dig2, dig3, dig4, contador, digito

barrido_teclado: push push push push push push push r22 r18 r16 r17 r21 r23 r19

lds r22,contador cpi r22,1 ;R22=contador; me indica cuantas teclas e ingresado breq barrido1 cpi r22,2 ;;R22=contador; me indica cuantas teclas e ingresado breq barrido2 cpi r22,3 ;R22=contador; me indica cuantas teclas e ingresado breq barrido3 cpi r22,4 ;R22=contador; me indica cuantas teclas e ingresado breq barrido4 ldi r18,0b10000000 out porta,r18 ;R18=valida una tecla

mantener: ;subrutina que espera que deje de aplastar una tecla in r18,pina andi r18,0b11111000 cpi r18,0b11111000 brne mantener rcall retardo rjmp restauro

barrido1: lds r16,digito sts dig1,r16 dig1 lds r17,dig1 carga de dig1 ldi r21,0b00000001 rcall barrido rcall retardo rjmp restauro barrido2: lds sts lds ldi

;R16=registro que me indica que tecla presione; Almaceno en ;R17=registro que almacena el numero a mostrar en el display; ;R21=registro que controla, que display se debe encender

r16,digito dig2,r16 r17,dig1 r21,0b00000010

rcall barrido lds r17,dig2 ldi r21,0b00000001 rcall barrido rjmp restauro barrido3: lds r16,digito sts dig3,r16 lds r17,dig1 ldi r21,0b00000100 rcall barrido rcall retardo lds r17,dig2 ldi r21,0b00000010 rcall barrido rcall retardo lds r17,dig3 ldi r21,0b00000001 rcall barrido rcall retardo rjmp restauro barrido4: lds r16,digito sts dig4,r16 lds r17,dig1 ldi r21,0b00001000 rcall barrido lds r17,dig2 ldi r21,0b00000100 rcall barrido lds r17,dig3 ldi r21,0b00000010 rcall barrido lds r17,dig4 ldi r21,0b00000001 rcall barrido rjmp restauro

restauro: pop pop pop pop pop pop pop ret

r19 r23 r21 r17 r16 r18 r22

barrido: ldi zl,low(tabla<<1) ldi zh,high(tabla<<1) add zl, r17 que busco

;cargo la direccion de la ubicacion de los datos ;R17=numero a mostrar, me posiciona en el dato

ldi adc lpm out out

r18,0 zh,r18 r18,z portd,r21 portb,r18

;R18=auxiliar por si se genera carry ; ;R18=salida; codificacion del numero a mostrar

rcall retardo ldi r23,0b00000000 out portd,r23 ret

;R23=registro que indica que no hay nada presionado ;espero la siguiente tecla

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;retardo retardo: ldi r19,255 repetir: dec r19 brne repetir ret

;************************************************************************* ;barrido de teclado ;************************************************************************* testear: push r23 in r23,sreg ;salvo el sreg push r23 push r18 push r16 push r22 sbis pina,6 rcall buscar sbis pina,5 rcall buscar sbis pina,4 rcall buscar sbis pina,3 rcall buscar pop pop pop pop out pop reti r22 r16 r18 r23 sreg,r23 ;devuelvo el valor al sreg r23

buscar: ;;;revisar la tercera columna ldi r18,0b00000011 ;R18=aux, que indica realiza el barrido de columna out porta,r18

sbis pina,6 ldi r16,14 sbis pina,5 ldi r16,3 sbis pina,4 ldi r16,6 sbis pina,3 ldi r16,9 ;revisa segunda columna ldi r18,0b00000101 ;R18=aux, que indica realiza el barrido de columna out porta,r18 sbis pina,6 ldi r16,0 sbis pina,5 ldi r16,2 sbis pina,4 ldi r16,5 sbis pina,3 ldi r16,8 ;;; revisa primera columna ldi r18, 0b00000110 out porta,r18 sbis pina,6 ldi r16,15 sbis pina,5 ldi r16,1 sbis pina,4 ldi r16,4 sbis pina,3 ldi r16,7 ;;R18=aux, que indica realiza el barrido de columna

ldi r23,0b00000000 out porta,r23 sts lds inc sts ret digito,r16 r22,contador r22 contador,r22

;fin de proceso

;R22=contador, cargo el valor de contador ;incremento contador ;guardo otra ves contador

;==============================FIN Barrido

tabla: .db 0x40,0xf9,0x24,0x30,0x19,0x12,0x02,0xf8,0x00,0x18,0x08,0x03,0x46,0x21,0x06,0x0e,0xff,0x00

También podría gustarte