Sei sulla pagina 1di 2

;

List p=16F877 ;Tipo de procesador


include "P16F877.INC" ;Incluye el fichero P16F877.INC que contiene la
definici�n con los nombres
;de los registros internos

CONTADOR1 equ 0x20 ; Primer contador para los bucles de retardo.


CONTADOR2 equ 0x21 ; Segundo contador para los bucles de retardo.
REPET1 equ 0x22
REPET2 equ 0x23

org 0x00 ;Direcci�n donde inicial el microcontrolador


goto Inicio ;Se dirige a la etiqueta Inicio.

org 0x05

Inicio bsf STATUS,5 ; Va al banco 1


;****Configura los pines del puerto D como salidas****
movlw 0xFF
movwf TRISB
movlw 0x00
movwf TRISC
movwf TRISD

bcf STATUS,5 ; Vuelve al Banco 0.


;Inicializa los puertos C y D en 0. Igualmente los registros REPET1 y
REPET2 se inician en 0,
CLRF PORTC
CLRF PORTD
CLRF REPET1
CLRF REPET2

;****Verifica cual de los botones se ha presionado o si ninguno se ha


presionado ****
VerificaBTRB2 BTFSS PORTB,2
GOTO PRESIONO_RB2
VerificaBTRB3 BTFSS PORTB,3
GOTO PRESIONO_RB3
GOTO VerificaBTRB2

PRESIONO_RB2 MOVLW 0x05 ; El n�mero con el se carga a W es el


n�mero de repeticiones que se quieren al presionar RB2
SUBWF REPET1,0 ; Resta el valor que tenga REPET1 con W, el
resultado va a W
BTFSC STATUS,0 ; Si la resta di� 0, el bit 2 de STATUS se pone
en 1, si no di� 0 (la resta) el bit 2 se pone en 0.
GOTO REINICIA1 ; Ir�a a esta l�nea si la resta di� 0, es decir si
REPET1=5
INCF REPET1 ; Ir�a a esta l�nea si la resta NO di� 0, es decir si
REPET1 es diferente de 5
call Leds_puertoc
goto PRESIONO_RB2 ; Vuelve a hacer otro ciclo porque REPET1 no ha
llegado a 5
REINICIA1 CLRF REPET1 ; Vuelve a colocar REPET1 en 0, cuando ya lleg� a 5
goto VerificaBTRB2 ; Vuelve a verificar BOTONES.
PRESIONO_RB3 MOVLW 0x03 ; El n�mero con el se carga a W es el
n�mero de repeticiones que se quieren al presionar RB3
SUBWF REPET2,0 ; Resta el valor que tenga REPET2 con W, el
resultado va a W
BTFSC STATUS,2 ; Si la resta di� 0, el bit 2 de STATUS se pone
en 1, si no di� 0 (la resta) el bit 2 se pone en 0.
GOTO REINICIA2 ; Ir�a a esta l�nea si la resta di� 0, es decir si
REPET2=3
INCF REPET2 ; Ir�a a esta l�nea si la resta NO di� 0, es decir si
REPET2 es diferente de 3
call Leds_puertod
goto PRESIONO_RB3 ; Vuelve a hacer otro ciclo porque REPET1 no ha
llegado a 3
REINICIA2 CLRF REPET2 ; Vuelve a colocar REPET1 en 0, cuando ya lleg� a 3
goto VerificaBTRB2 ; Vuelve a verificar BOTONES.

Retardo decfsz CONTADOR1,1


goto Retardo
decfsz CONTADOR2,1
goto Retardo
return ; Con este comando regresa al lugar desde donde
fue llamada la subrutina

Leds_puertoc MOVLW b'01100000'


MOVWF PORTC
call Retardo
MOVLW 0x00
MOVWF PORTC
call Retardo
return

Leds_puertod MOVLW b'00011000'


MOVWF PORTD
call Retardo
call Retardo
MOVLW 0x00
MOVWF PORTD
call Retardo
call Retardo
return

end ; Finaliza el programa

Potrebbero piacerti anche