Está en la página 1de 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 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 cont1 en la direecion 21h CONT3 ;crea la variable cont1 en la direecion 22h CONT4 ;crea la variable cont1 en la direecion 23h P1 ;crea la variable cont1 en la direecion 24h P2 ;crea la variable cont1 en la direecion 25h ENDC ;fin de declaracion ORG 0 ;direccion de inicio de reset GOTO INICIO ;salto a la primera linea de programa ORG 05 ;primera direccion disponible despues de las reservadas para saltos INICIO CLRF PORTB ;limpia el puerto B BCF STATUS,RP1 ;pone a 0 en bit rp1 BSF STATUS,RP0 ;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'11111111' ;carga ffh en W MOVWF TRISC ;configura el puerto c como entrada BCF STATUS,RP0 ;pone a 0 el regitro rp0 y retorna al banco 0 GUARDA BSF PORTB,6 ;enciende el bit 6 del puerto B ,indica carga P1 CALL RETARDO ;retardo para dar tiempo a que se ingrese MOVF PORTC,W ;muerve el contenido del puerto A a W MOVWF P1 ;guarda el primer dato en P1 BSF PORTB,7 ;enciende el bit 7 del puerto B ,indica carga P2 CALL RETARDO ;llama la rutina retardo para dar tiempo a que se ingrese el segundo dato MOVF PORTC,W ;mueve el contenido del puerto A a W

MOVWF P2 ;guarda el segundo dato en p2 CLRF PORTB ;borra el puerto b ROTACION MOVF P1,W ;inicia la rotacion carga p1 a w ROTA RRF P1,1 ;rota el dato 1 a la derecha BTFSS STATUS,C ;pregunta si el carry es uno GOTO CONTADOR ;si el carry es cero se incrementa el contador GOTO SUMA_ER ;si el carry es uno se verifica si contador es distinto de cero CONTADOR INCF CONT4,1 ;incremento del contador Cont4 GOTO ROTA ;continuo rotando p1 SUMA_ER MOVLW 00H ;comparo cont4 con cero XORWF CONT4 ;para verificar que no sea cero BTFSS STATUS,Z ;pregunto si la bandera cero se activo GOTO SUMA ;cont4 no es cero continuo con la suma GOTO SALIDA ;cont4 es cero salto a salida SUMA MOVF P2,W ;muevo el dato 2 a w SUMA1 ADDWF P2,0 ;sumo W + P2 = W DECFSZ CONT4 ;decremento cont4 hasta que sea cero GOTO SUMA1 ;salto a suma1 para seguir sumando MOVWF P2 ;guardo el resultado de la suma en p2 SALIDA MOVF P2,W ;cargo p2 en W MOVWF PORTB ;muestro el contenido de p2 GOTO SALIDA ; se queda en salida RETARDO MOVLW D'6' ;valor que se carga en cont3 para el numero de repeticiones del tercer lazo MOVWF CONT3 ;cont3=4 LAZO3 MOVLW D'250' ;valor que se carga en cont2 para el numero de repeticiones del segundo lazo MOVWF CONT2 ;cont2=250 LAZO2 MOVLW D'250' ;valor que se carga en cont1 para el numero de repeticiones del primer lazo

MOVWF CONT1 ;cont1=250 LAZO1 NOP ;consume un ciclo maquina --> 4Mhz = 1 DECFSZ CONT1 ;decrementa cont1 miestras no sea cero GOTO LAZO1 ;fin de lazo1 --> 1 mili seg DECFSZ CONT2 ;decrementa cont2 mientras no sea cero GOTO LAZO2 ;fin de lazo2 --> 100 mili seg DECFSZ CONT3 ;decrementa cont3 mientras no sea cero GOTO LAZO3 ;fin de lazo3 --> 800 mili seg RETURN ;fin de rutina END

micro seg si es cero salta una linea

si es cero salta una linea

si es cero salta una linea

También podría gustarte