Está en la página 1de 3

;Integrantes: JHON LEON, JUAN MARTINEZ, DANIEL AYALA

;Proyecto 1

;Requerimientos: Led 1 conmuta cada 0.7 S, Led 2 conmuta con cada pulsada

;* CUERPO DEL PROGRAMA *

#include <P16f877.INC>

__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _LVP_OFF

D1 EQU RD2

D2 EQU RD5

PUL EQU RD4

CONT EQU 0x20

CONT1 EQU 0X21

CONT2 EQU 0X22

FLAG EQU 0X23

BAND EQU .2

STATUS EQU 0X03

ORG 00H ; Vector de reset

BSF STATUS, RP0

MOVLW B'00010000'

MOVWF TRISD

BCF STATUS, RP0

BSF PORTD, D1

BSF PORTD, D2

MOVLW .0

MOVWF CONT
BCF FLAG, BAND

INICIO:

INCF CONT,F

MOVF CONT, W

SUBLW .70

BTFSS STATUS,Z

GOTO NOCONT

MOVLW B'00000100'

XORWF PORTD, F

CLRF CONT

NOCONT:

BTFSC PORTD,PUL

GOTO NOPUL

BTFSS FLAG,BAND

GOTO NOPUL

MOVLW B'00100000'

XORWF PORTD,F

CLRF FLAG

NOPUL:

BTFSS PORTD,PUL

GOTO NOPUL1

BSF FLAG,BAND

NOPUL1:

CALL DELAY_700MS

GOTO INICIO
;**

; Rutina de retardo de 700 ms a 4 MHz

;**

DELAY_700MS:

MOVLW D'28' ; Nuevo valor inicial del contador (2,800,000 / 100,000 = 28)

MOVWF CONT1

DELAY_LOOP:

MOVLW D'98' ; Valor intermedio del contador (2,800,000 / 28,000 = 98)

MOVWF CONT2

DELAY_LOOP_2:

DECFSZ CONT2, F ; Decrementa el contador intermedio

GOTO DELAY_LOOP_2 ; Salta si el contador intermedio no es cero

DECFSZ CONT1, F ; Decrementa el contador principal

GOTO DELAY_LOOP ; Salta si el contador principal no es cero

RETURN

;**

; Fin del programa

;**

END

También podría gustarte