Vous êtes sur la page 1sur 3

LIST P=16F877 INCLUDE<P16F877.

INC> ;librerias del pic a emplear __CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC ;configuracion de los parametros del pic ORG 0 ;direccion de inicio de reset GOTO INICIO ;salto a la primera linea de programa CBLOCK 20H ;inicio de declaracion de variables a partir de la direccion CONT1 ;crea la variable cont1 en la direecion 20h CONT2 ;crea la variable cont2 en la direecion 21h CONT3 ;crea la variable cont3 en la direecion 22h ENDC ;fin de declaracion ORG 05 ;primera direccion disponible despues de las reservadas para saltos INICIO BCF STATUS,RP1 BSF STATUS,RP0 ;indica el inicio del programa,pone a 1 en bit rp0 y selecciona el banco 1 CLRF TRISB ;borra todos los bits de el regitro TRISB, se configura el puerto como salida MOVLW b'00011111' ;carga el numero 1Fh en el registro de trabajo W MOVWF TRISA ;carga el regitro TRISA con el valor de W,configura el puerto como entrada MOVLW B'00000110' ;carga el numero 06h en el regitro W MOVWF ADCON1 ;carga en regitro ADCON1 con el valor de W, configura el puerto A y E como digit ales MOVLW b'00011111' MOVWF TRISC BCF STATUS,RP0 ;pone a 0 el regitro rp0 y retorna al banco 0 TESTBIT BTFSS PORTA,0 ;pregunta si el bit RA0 esta en uno GOTO SUMA ;sino es uno salta a suma BTFSS PORTA,4 ;pregunta si el bit RA4 esta en uno GOTO SUMA ;sino es uno salta a suma BTFSS PORTC,0 ;pregunta si el bit RC0 esta en uno GOTO SUMA ;sino es uno salta a suma BTFSS PORTC,4 ;pregunta si el bit RC4 esta en uno GOTO SUMA ;sino es uno salta a suma GOTO DERECHA ;si los 4 bit sin uno salta a rotar al derecha

SUMA MOVF PORTA,W ;mueve el contenido del puerto A a W ADDWF PORTC ;suma W con el puerto C SUBWF PORTA ;comparamos el resultado con el puerto A restando al resultado con el Puerto BTFSC STATUS,C ;pregunta si el bit carry del registro estatus es cero es decir si el relsultado es negativo GOTO FIJO ;sino es cero el carry el resultado es positivo he indica que el resultado de l a suma es mayor que el puerto a GOTO INTERM ;si es cero el carry el resultado es negativo he indica que el resultado de la s uma es menor que el pueto a FIJO MOVLW B'11111111' ;mueve el dato ffh a W MOVWF PORTB ;pone todas las salidas del puerto B a uno GOTO FIJO ;retorna a fijo INTERM MOVLW B'11111111' ;mueve el literal ffh a W MOVWF PORTB ;pone todas las salidas del puerto B a uno REPI CALL RETARDO ;realiza el llamado arutina retardo COMF PORTB ;saca el complento a1 al puerto B GOTO REPI ;retorna a repi DERECHA CLRF PORTB ;borra el puerto B BCF STATUS,C ;pone en cero elbit carry BSF PORTB,0 ;pone en uno el bit cero del puerto B ROTA RLF PORTB,1 CALL RETAR ;rota el contenido del puerto B y lo guarda en el puerto B GOTO ROTA ;retorna a rota RETARDO MOVLW D'8' ;valor que se carga en cont3 para el numero de repeticiones del tercer lazo MOVWF CONT3 LAZO3 MOVLW D'100' ;valor que se carga en cont2 para el numero de repeticiones del segundo lazo MOVWF CONT2 LAZO2 MOVLW D'250' ;volor que se carga en cont1 para el numero de repeticiones del primer lazo MOVWF CONT1 LAZO1 NOP DECFSZ CONT1 GOTO LAZO1 DECFSZ CONT2

GOTO LAZO2 DECFSZ CONT3 GOTO LAZO3 RETURN RETAR MOVLW D'35' ;valor que se carga en cont2 para el numero de repeticiones del segundo lazo MOVWF CONT2 LAZ2 MOVLW D'250' ;volor que se carga en cont1 para el numero de repeticiones del primer lazo MOVWF CONT1 LAZ1 NOP DECFSZ CONT1 GOTO LAZ1 DECFSZ CONT2 GOTO LAZ2 RETURN END