;***************************************************************************
;*Programa: Counter.asm Revision: 2.0 Junio 5 del 2000 *
;*Descripcion: Manda datos al puerto b como un contador binario, despues *
;*inicia otra secuencia de luces *
;***************************************************************************
;********************************IGUALDADES*********************************
LIST P=16F84 ;Pic a usar
STATUS EQU 3 ;Direccion del registro de estado
PORTB EQU 6 ;Dir.del puerto B
TRISB EQU 6 ;Registro de configuracion E/S
CONTADOR1 EQU 0Ch ;Direccion del contador1 p/retardo
CONTADOR2 EQU 0Dh ;Direccion del contador2 p/retardo
DATO EQU 0Eh ;Datos a mandar por PORTB
CICLO1 EQU 0Fh ;Indica el fin de luces1
CICLO2 EQU 10h ;Indica el fin de luces2
w EQU 0 ;Destino w
f EQU 1 ;Destino el propio registro
;*************************PROGRAMA PRINCIPAL********************************
ORG 00h ;Inicio del ensamblado desde addr 00
GOTO INICIO ;Salto a la primera instruccion
ORG 05h ;Ensamblar desde la localidad 05h
INICIO BSF STATUS,5 ;Selecciona la pagina 1 de datos
CLRF TRISB ;Programa portb como salida
BCF STATUS,5 ;Selecciona la pagina cero de datos
;Inicio de luces1
INICIO2 MOVLW 01 ;Veces que se repite luces1
MOVWF CICLO1 ;carga las veces a ciclo1
CLRF DATO ;El registro dato se pone en ceros
OTRO MOVF DATO,w ;Carga dato en w
MOVWF PORTB ;Manda el contenido de w a PORTB
MOVLW 0B0h ;Carga w con B0 para el retardo
CALL RETARDO ;Llama a un retardo
INCFSZ DATO,f ;Incrementa en uno a dato
GOTO OTRO ;Incrementa al puerto en uno
DECFSZ CICLO1,f ;Recorrio todo el sentido?
GOTO OTRO ;No, continua
;Si, inicio de luces2
MOVLW 05h ;Veces que se repite luces2
MOVWF CICLO2 ;Carga las veces a ciclo2
INI MOVLW 80h ;Pone en uno el bit7 de w
MOVWF PORTB ;Manda el dato al puerto
BCF STATUS,0 ;Borra posible carry
MOVLW 0E0h ;Carga w con E0
;Inicio de luces2 en sentido derecha
MAS CALL RETARDO ;Llama al retardo
RRF PORTB,f ;Recorre el bit a la derecha
BTFSS STATUS,0 ;Verifica el acarreo
GOTO MAS ;Recorre de nuevo el bit a la der
MOVLW 01h ;Pone a uno el bit 0 de w
MOVWF PORTB ;Lo pasa al puerto b
MOVLW 0E0h ;Carga w con E0
;Inicio de luces2 en sentido izquierda
BCF STATUS,0 ;Borra posible carry
MAS1 CALL RETARDO ;Llama al retardo
RLF PORTB,f ;Recorre el bit a la izquierda
BTFSS STATUS,0 ;Verifica el acarreo
GOTO MAS1 ;Recorre de nuevo el bit a la izq
DECFSZ CICLO2,f ;Termino recorrido?
GOTO INI ;No, sigue el recorrido
GOTO INICIO2 ;Si, repite todo
;*******************************RETARDO*************************************
RETARDO MOVWF CONTADOR1 ;Se cargan los contadores con el
LOOP2 MOVWF CONTADOR2 ;valor inicial de w
LOOP1 DECFSZ CONTADOR2,f ;Termino de decrementar?
GOTO LOOP1 ;No, sigue decrementando
DECFSZ CONTADOR1,f ;Termino de decrementar?
GOTO LOOP2 ;Regresa a decrementar contador2
RETURN ;Regresa al programa principal
;***************************************************************************
END ;Fin del programa
;***************************************************************************