Está en la página 1de 2

;****************

; PRACTICA 26 *
;****************
LIST P=16F84A
#include <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _XT_OSC

CBLOCK 0X0C ; Variables


PDel0,PDel1,PDel2,CONTADOR,
ENDC

ORG 0X00
BSF STATUS,RP0
CLRF TRISB
CLRF TRISA
BCF STATUS,RP0

INICIO MOVLW B'11111111'


MOVWF PORTB
CLRF CONTADOR
CALL CONTAR
CLRF CONTADOR
BSF PORTA,1
CALL CONTAR
GOTO INICIO

;-----------------------------------------------------------

CONTAR MOVF CONTADOR,W ;Valor de contador a w


SUBLW D'10' ;w-10=w
BTFSC STATUS,Z ;el resultado fue 0?
CLRF CONTADOR ;limpia contador

MOVF CONTADOR,W ;valor de contador a w


CALL TABLA ;llamamos tabla
MOVWF PORTB ;sacamos x el display

INCF CONTADOR,F ;incrementamos contador


CALL RETARDO
GOTO CONTAR

TABLA ADDWF PCL,F


RETLW B'10001000';0
RETLW B'11011011';1
RETLW B'10100010';2
RETLW B'10010010';3
RETLW B'11010001';4
RETLW B'10010100';5
RETLW B'10000100';6
RETLW B'11011010';7
RETLW B'10000000';8
RETLW B'11010000';9
RETURN
;-------------------------------------------------------------
RETARDO movlw .239 ; 1 set numero de repeticion (B)
movwf PDel0 ; 1 |
PLoop1 movlw .232 ; 1 set numero de repeticion (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 goto PDelL3 ; 2 ciclos delay
PDelL3 clrwdt ; 1 ciclo delay
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
PDelL4 goto PDelL5 ; 2 ciclos delay
PDelL5 goto PDelL6 ; 2 ciclos delay
PDelL6 goto PDelL7 ; 2 ciclos delay
PDelL7 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
END

También podría gustarte