

; **************************  Variables de control ******************

pcl		equ		02h
porta		equ		05h
portb		equ		06h
portc		equ		07h
portd		equ		08h
porte		equ		09h
trisb		equ		86h
trisc		equ		87h
trisd		equ		88h
trise		equ		89h
trisa		equ		85h
status		equ		03h

;***************** variables originales *************


tecla1		equ		30h
tecla2		equ		31h
tecla3		equ		32h
tecla4		equ		33h
loops		equ		35h
loops2		equ		36h
loops3		equ		37h
loops4		equ		38h
contador	equ		40h
tiempo		equ		41h
tiempo2		equ		42h
tiempo3		equ		43h
ciclop		equ		45h
loops7		equ		46h

list p = 16f877

; ***************************** empieza el programa ******************

		org 00
		goto inicio

;********************************** rutina en milisegundOs para multiplexar ****************************

retardo		movwf		loops3		;retardo de milisegundos cargado desde afuera
otro2		movlw		d'110'
		movwf		loops4
otro		nop
		nop
		nop
		nop
		nop
		nop
		decfsz		loops4,1
		goto		otro
		decfsz		loops3,1
		goto		otro2
		return

;****************************** Rutina principal **********************


inicio 		clrf 	status		; limpio al registro status
		bsf	status,5	; me paso al banco 1
		movlw	b'00000000'
		movwf	trisa
		movlw	b'00000000'	; configuro el puerto b
		movwf	trisb
		movlw	b'11110001'
		movwf	trisc
		movlw	b'00000000'
		movwf	trisd
		movlw	b'11111111'
		movwf	trise
		bcf	status,5
		bcf	status,6	; banco 0

		clrf	portb		; limpio puerto c y puerto b
		clrf	portd
		clrf	porte
		clrf	portc
		clrf	porta
		clrf	tecla2
		clrf	tecla1
		clrf	tecla3

		repite		
		bsf	portb,7
		bsf	portb,6
		bsf	portb,5
		bcf	portb,4

		movlw	d'1'
		call	retardo
		
		btfss	portc,4		; pregunto por el puerto si esta voy a uno 
		goto	unos
		btfss	portc,5		; pregunto por el boton del 2
		goto	dos		; voy a numero dos
		btfss	portc,6		; pregunto por el tres
		goto	tres
		
		bsf	portb,7
		bsf	portb,6
		bcf	portb,5
		bsf	portb,4


		movlw	d'1'
		call	retardo

		btfss	portc,4		; pregunto por el cuatro
		goto	cuatro
		btfss	portc,5		; pregunto por el cinco		
		goto 	cinco
		btfss	portc,6		; pregunto por el seis  
		goto	seis

		bsf	portb,7
		bcf	portb,6
		bsf	portb,5
		bsf	portb,4


		movlw	d'1'
		call	retardo

		btfss	portc,4		; pregunto por el siete
		goto	siete
		btfss	portc,5		; pregunto por el ocho		
		goto 	ocho
		btfss	portc,6		; pregunto por el nueve  
		goto	nueve

		bcf	portb,7		; multiplexada
		bsf	portb,6
		bsf	portb,5
		bsf	portb,4


		movlw	d'1'
		call	retardo

		btfss	portc,5		; pregunto por el cero		
		goto 	cero		

		goto	repite		; vuelve a preguntar si no se presiono una tecla
					; la mutiplexacin

;************************** UNO **************************************

unos	   				; si se presiono la tecla uno 
		movlw	b'00000001'	; carga el puerto b con 1
		movwf	tecla1		; cargo la bariable local
		movwf	portb
		clrw
		btfss	portc,4
		goto	unos
		goto	repite

;************************** DOS ****************************************

dos					; si se presiono el dos lo cargo
		movlw	b'00000010'	; cargo con dos
		movwf	tecla1
		movwf	portb
		clrw
		btfss	portc,5		; anti rebote
		goto	dos
		goto	repite

;*************************** TRES **************************************

tres					; cargo el tres
		movlw	b'00000011'	; cargo con tres al puerto b
		movwf	tecla1
		movwf	portb
		clrw 
		btfss	portc,6		; antirebote
		goto	tres
		goto	repite

;*************************** CUATRO ************************************		

cuatro					; cargo el numero cuatro		
		movlw	b'00000100'	; cargo con cuatro	
		movwf	tecla1
		movwf	portb
		btfss	portc,4		; antirebote
		goto	cuatro
		goto	repite

;**************************** CINCO *************************************

cinco		
		movlw	b'00000101'	; cargo con cinco el puerto b
		movwf	tecla1
		movwf	portb
		btfss	portc,5
		goto	cinco		; antirebote
		goto	repite

;**************************** SEIS ***************************************

seis		
		movlw	b'00000110'	; cargo con el seis el puerto b
		movwf	tecla1
		movwf	portb
		btfss	portc,6		; antirebote
		goto	seis
		goto	repite

;**************************** siete ***************************************

siete		
		movlw	b'00000111'	; cargo con el siete el puerto b
		movwf	tecla1
		movwf	portb
		btfss	portc,4
		goto	siete		; antirebote
		goto	repite

;**************************** ocho ***************************************

ocho		movlw	b'00001000'	; cargo con el ocho el puerto b
		movwf	tecla1
		movwf	portb
		clrw
		btfss	portc,5		; antirrebote
		goto	ocho
		goto	repite

;*************************** NUeve ****************************************

nueve		movlw	b'00001001'	; cargo con el nueve el puerto b
		movwf	tecla1
		movwf	portb
		btfss	portc,6
		goto	nueve		; antirrebote
		goto	repite

;************************** CERO ******************************************

cero		movlw	b'00000000'	; cargo con el cero el puerto b
		movwf	tecla1
		movwf	portb
		btfss	portc,5
		goto	cero
		goto	repite
		end