Está en la página 1de 3

List P=16f84A

; Assembly source line config statements

#include "p16f84a.inc"

;
CONFIG
; __config 0xFFF1
__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_ON & _CP_OFF

;****DECLARACION DE VARIABLES***

CBLOCK 0x0c
contador
ENDC

;***FIN DE DECLARACION DE VARIBALES**

;
**INICIO DEL PROGRAMA**

ORG 0x00

goto Configurar

ORG 0x05

#define start PORTA,RA0

#define stop PORTA,RA1


#
define pulsos PORTA,RA2
#
define enter PORTA,RA3

Configurar

bsf STATUS,RP0 ;ACCEDEMOS AL BANCO 1

clrf TRISB ;PUERTO B COMO SALIDA

movlw b'00001111'

movwf TRISA ;RA0,RA1,RA2,RA3 SON ENTRADAS

bcf STATUS,RP0 ;ACCEDEMOS AL BANCO 0

clrf PORTB ;LIMPIAMOS EL PUERTO B

clrf contador

goto LeerPuerto

;*lecura del puertos A***


LeerPuerto

btfsc start ;LEE EL PUERTO RA0, SI ES 1 DESARROLLA RUTINA2

call RUTINA2

call RUTINA1 ;SI NO ACCIONAMOS NADA DESARROLLA RUTINA1

goto LeerPuerto ;VUELVE A TESTEAR EL PUERTO A

;***RUTINA A DESARROLLAR****
;*************

;***RUTINA PARA paro*


RUTINA1
btfsc stop ;CONFIRMA SI SE SOLTO EL PULSADOR
goto RUTINA1
movlw b'00001000'
movwf PORTB ;SE ENCIENDE EL CUARTO LED RB3
return
;**FIN RUTINA ****

;**RUTINA PARA marcha***


RUTINA2
btfsc start ;CONFIRMA SI SE SOLTO EL PULSADOR
goto RUTINA2
movlw b'00000100'
movwf PORTB ;SE ENCIENDE EL TERCER LED RB2
call Retardo_100ms
btfsc pulsos ;CONFIRMA SI SE PRESIONO "pulsos"
call RUTINA3 ;LLAMA RUTINA3M
btfsc enter ;CONFIRMA SI SE PRESIONO "enter"
call RUTINA4 ;LLAMA RUTINA4M
btfss stop ;SE MANTIENE EN LA RUTINA HASTA PULSAR "paro"
goto RUTINA2
return
;**FIN RUTINA ****

;***RUTINA PARA pulsos EN MARCHA**


RUTINA3
btfsc pulsos ;CONFIRMA SI SE SOLTO EL PULSADOR
goto RUTINA3
movlw b'00000101'
movwf PORTB ;SE ENCIENDE RB0,RB2
call Retardo_100ms ;SE MANTIENE ENCENDIDO POR 100ms
movlw b'00000100'
movwf PORTB ;SE APAGA SOLO RB0
call Retardo_100ms
incf contador,1 ;AUMENTA EN UNA UNIDAD EL CONTADOR
return
;**FIN RUTINA ****

;**RUTINA PARA enter EN MARCHA***


RUTINA4
btfsc enter ;CONFIRMA SI SE SOLTO EL PULSADOR
goto RUTINA4
movlw b'00000000'
subwf contador,1
btfsc STATUS,Z
return
movlw b'00000110'
movwf PORTB ;SE ENCIENDE RB1,RB2
call Retardo_100ms ;SE MANTIENE ENCENDIDO POR 100ms
movlw b'00000100'
movwf PORTB ;SE APAGA SOLO RB2
call Retardo_100ms
decfsz contador,1 ;DECREMENTA EN UNA UNIDAD EL CONTADOR
goto RUTINA4
return
;**FIN RUTINA ****

#include "RETARDOS.inc"
END

También podría gustarte