Documentos de Académico
Documentos de Profesional
Documentos de Cultura
#include "p16f887.inc"
FIXDIV MACRO A1,A2
LOCAL MULTDIV
MOVF A2,0
ADDWF A1,1
MOVLW D'9'
MOVWF CONTDIV
MOVF A1,0
MULTDIV
ADDWF A1,1
BTFSC STATUS,0
INCF CONTDIV2,1
DECF CONTDIV,1
BTFSS STATUS,2
GOTO MULTDIV
ENDM
INICIO
BCF STATUS,RP0
BCF STATUS,RP1
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTE; PUERTOS REINICIADOS
BSF STATUS,RP0
BCF STATUS,RP1
MOVLW B'11111111'
MOVWF TRISA
MOVWF TRISB
MOVWF TRISE
CLRF TRISC
CLRF TRISD; PUERTOS CONFIGURADOS
BSF STATUS,RP0
BSF STATUS,RP1
CLRF ANSEL
CLRF ANSELH; DIGITAL
BCF STATUS,RP0
BCF STATUS,RP1 ;BANCO 0
;
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAA
MIPROGRAMA ;MI PROGRAMA
MOVFW PORTA
MOVWF DATO1
MOVFW PORTB
MOVWF DATO2
CLRF ACUMULADOR
CLRF CONTDIV
CLRF CONTDIV2
CLRF DEC6
CLRF DEC5
CLRF DEC4
CLRF DEC3
CLRF DEC2
CLRF DEC1
CLRF ENTERO
GOTO ESCERO
BCF STATUS,2
GOTO OPERACIONES
OPERACIONES
;SELECCION DE OPERACIONES
;SUMA
MOVFW PORTE ;SUMA
XORLW B'00000000'
MOVWF PRUEBA
MOVF PRUEBA,F
BTFSS STATUS,2
GOTO RESTA_TEST
GOTO SUMA
RESTA_TEST
MOVF PORTE,0 ;RESTA
XORLW B'00000001'
MOVWF PRUEBA
MOVF PRUEBA,F
BTFSS STATUS,2
GOTO MULT_TEST
GOTO RESTA
MULT_TEST
MOVF PORTE,0 ;MULTIPLICACION
XORLW B'00000010'
MOVWF PRUEBA
MOVF PRUEBA,F
BTFSS STATUS,2
GOTO DIV_TEST
GOTO PRUEBA_CERO
DIV_TEST
MOVF PORTE,0 ;DIVISION
XORLW B'00000011'
MOVWF PRUEBA
MOVF PRUEBA,F
BTFSS STATUS,2
GOTO PORCENTAJE_TEST
GOTO ESCERO
PORCENTAJE_TEST
MOVF PORTE,0 ;DIVISION
XORLW B'00000100'
MOVWF PRUEBA
MOVF PRUEBA,F
BTFSS STATUS,2
GOTO EXPONENTE_TEST
GOTO PORCENTAJE
EXPONENTE_TEST
MOVF PORTE,0 ;DIVISION
XORLW B'00000101'
MOVWF PRUEBA
MOVF PRUEBA,F
BTFSS STATUS,2
GOTO RAIZ_TEST
GOTO EXPONENTE
RAIZ_TEST
MOVF PORTE,0 ;DIVISION
XORLW B'00000110'
MOVWF PRUEBA
MOVF PRUEBA,F
BTFSS STATUS,2
GOTO INICIO
GOTO RAIZ
PRUEBA_CERO
MOVFW DATO1
XORLW 00H ; checkear si hay un cero en en puerto para multiplicacion
BTFSS STATUS,2
GOTO MULT
GOTO CERO
;
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA
SUMA
MOVF DATO1,W
ADDWF DATO2,W
MOVWF RESULTADO
MOVF RESULTADO,F
BTFSS STATUS,C
GOTO MUESTRA_SUMA
GOTO CARRY_SUMA
CARRY_SUMA
MOVLW D'1'
MOVWF PORTD
MOVF RESULTADO,W
MOVWF PORTC
GOTO MIPROGRAMA
MUESTRA_SUMA
CLRF PORTD
MOVF RESULTADO,W
MOVWF PORTC
GOTO MIPROGRAMA
GOTO MIPROGRAMA
RESTA
MOVFW PORTA
SUBWF DATO2,W
MOVWF RESULTADO
BTFSS STATUS,0
GOTO AJUSTE_RESTA
MOVWF PORTC ; LA RESTA DIO POSITIVA
GOTO MIPROGRAMA
AJUSTE_RESTA
COMF RESULTADO,W;COMPLEMENTO A UNO
ADDLW B'00000001' ; SUMO 1 PARA COMPLEMENTO A DOS
MOVWF PORTC
GOTO MIPROGRAMA
MULT
MOVF PORTA,W
MOVWF DATO1
MOVF PORTB,W
MOVWF DATO2
CLRW
CLRF PRODUCTO1
CLRF PRODUCTO2
GOTO BUCLE
BUCLE
MOVFW DATO2
ADDWF PRODUCTO2,F
BTFSC STATUS,0
INCF PRODUCTO1,F
DECFSZ DATO1
GOTO BUCLE
MOVFW PRODUCTO2
MOVWF PORTC
MOVFW PRODUCTO1
MOVWF PORTD
GOTO MIPROGRAMA
ESCERO
MOVF DATO1,0
XORLW D'0'
BTFSS STATUS,2
GOTO DIV
MOVF DATO2,0
XORLW D'0'
BTFSS STATUS,2
GOTO DIV
MOVLW D'0'
MOVWF PORTC
MOVWF PORTD
GOTO MIPROGRAMA
DIV
MOVF DATO2,0
SUBWF DATO1,1
BTFSS STATUS,0
GOTO FIX1
INCF ENTERO,1
MOVF DATO1,1
BTFSS STATUS,2
GOTO DIV
GOTO IMPRIMIR
FIX1
FIXDIV DATO1,DATO2
MOVF CONTDIV2,0
XORLW B'00000000'
BTFSS STATUS,2
GOTO DIVCARRY1
MOVF DATO2,0
GOTO DIV1
DIV1
SUBWF DATO1,1
BTFSS STATUS,0
GOTO FIX2
INCF DEC1,1
MOVF DATO1,1
BTFSS STATUS,2
GOTO DIV1
GOTO IMPRIMIR
DIVCARRY1
MOVF DATO2,0
SUBWF DATO1,1
BTFSS STATUS,0
DECF CONTDIV2,1
INCF DEC1,1
MOVF CONTDIV2,1
BTFSS STATUS,2
GOTO DIVCARRY1
DIVFINAL1
SUBWF DATO1,1
BTFSS STATUS,0
GOTO FIX2
INCF DEC1
GOTO DIVFINAL1
FIX2
FIXDIV DATO1,DATO2
MOVF CONTDIV2,0
XORLW b'00000000'
BTFSS STATUS,2
GOTO DIVCARRY2
MOVF DATO2,0
GOTO DIV2
DIV2
SUBWF DATO1,1
BTFSS STATUS,0
GOTO FIX3
INCF DEC2,1
MOVF DATO1,1
BTFSS STATUS,2
GOTO DIV2
GOTO IMPRIMIR
DIVCARRY2
MOVF DATO2,0
SUBWF DATO1,1
BTFSS STATUS,0
DECF CONTDIV2,1
INCF DEC2,1
MOVF CONTDIV2,1
BTFSS STATUS,2
GOTO DIVCARRY2
DIVFINAL2
SUBWF DATO1,1
BTFSS STATUS,0
GOTO FIX3
INCF DEC2
GOTO DIVFINAL2
FIX3
FIXDIV DATO1,DATO2
MOVF CONTDIV2,0
XORLW b'00000000'
BTFSS STATUS,2
GOTO DIVCARRY3
MOVF DATO2,0
GOTO DIV3
DIV3
SUBWF DATO1,1
BTFSS STATUS,0
GOTO FIX4
INCF DEC3,1
MOVF DATO1,1
BTFSS STATUS,2
GOTO DIV3
GOTO IMPRIMIR
DIVCARRY3
MOVF DATO2,0
SUBWF DATO1,1
BTFSS STATUS,0
DECF CONTDIV2,1
INCF DEC3,1
MOVF CONTDIV2,1
BTFSS STATUS,2
GOTO DIVCARRY3
DIVFINAL3
SUBWF DATO1,1
BTFSS STATUS,0
GOTO FIX4
INCF DEC3
GOTO DIVFINAL3
FIX4
FIXDIV DATO1,DATO2
MOVF CONTDIV2,0
XORLW b'00000000'
BTFSS STATUS,2
GOTO DIVCARRY4
MOVF DATO2,0
GOTO DIV4
DIV4
SUBWF DATO1,1
BTFSS STATUS,0
GOTO FIX5
INCF DEC4,1
MOVF DATO1,1
BTFSS STATUS,2
GOTO DIV4
GOTO IMPRIMIR
DIVCARRY4
MOVF DATO2,0
SUBWF DATO1,1
BTFSS STATUS,0
DECF CONTDIV2,1
INCF DEC4,1
MOVF CONTDIV2,1
BTFSS STATUS,2
GOTO DIVCARRY4
DIVFINAL4
SUBWF DATO1,1
BTFSS STATUS,0
GOTO FIX5
INCF DEC4
GOTO DIVFINAL4
FIX5
FIXDIV DATO1,DATO2
MOVF CONTDIV2,0
XORLW b'00000000'
BTFSS STATUS,2
GOTO DIVCARRY5
MOVF DATO2,0
GOTO DIV5
DIV5
SUBWF DATO1,1
BTFSS STATUS,0
GOTO FIX6
INCF DEC5,1
MOVF DATO1,1
BTFSS STATUS,2
GOTO DIV5
GOTO IMPRIMIR
DIVCARRY5
MOVF DATO2,0
SUBWF DATO1,1
BTFSS STATUS,0
DECF CONTDIV2,1
INCF DEC5,1
MOVF CONTDIV2,1
BTFSS STATUS,2
GOTO DIVCARRY5
DIVFINAL5
SUBWF DATO1,1
BTFSS STATUS,0
GOTO FIX6
INCF DEC5
GOTO DIVFINAL5
FIX6
FIXDIV DATO1,DATO2
MOVF CONTDIV2,0
XORLW b'00000000'
BTFSS STATUS,2
GOTO DIVCARRY6
MOVF DATO2,0
GOTO DIV6
DIV6
SUBWF DATO1,1
BTFSS STATUS,0
GOTO IMPRIMIR
INCF DEC6,1
MOVF DATO1,1
BTFSS STATUS,2
GOTO DIV6
GOTO IMPRIMIR
DIVCARRY6
MOVF DATO2,0
SUBWF DATO1,1
BTFSS STATUS,0
DECF CONTDIV2,1
INCF DEC6,1
MOVF CONTDIV2,1
BTFSS STATUS,2
GOTO DIVCARRY6
DIVFINAL6
SUBWF DATO1,1
BTFSS STATUS,0
GOTO IMPRIMIR
INCF DEC6
GOTO DIVFINAL6
IMPRIMIR
SWAPF DEC1,0
ADDWF DEC2,1
MOVF DEC2,0
MOVWF PORTC
MOVF ENTERO,0
MOVWF PORTD
GOTO MIPROGRAMA
PORCENTAJE
MOVF PORTA,W
MOVWF DATO1
MOVF PORTB,W
MOVWF DATO2
CLRW
CLRF PRODUCTO1
CLRF PRODUCTO2
GOTO LOOP
LOOP
MOVFW DATO2
ADDWF PRODUCTO2,F
BTFSC STATUS,0
INCF PRODUCTO1,F
DECFSZ DATO1
GOTO LOOP
MOVFW PRODUCTO2
MOVWF DDLO
MOVFW PRODUCTO1
MOVWF DDHI
;Subroutine to divide by 10 by repeated subtraction of 10.
;Argument: 16-bit dividend in DDHI,DDLO.
;Returns: 16-bit quotient in QHI,QLO, remainder in DDLO.
METHOD2 CLRW
CLRF QHI ; Clear quotient registers
CLRF QLO ;
MOVLW 64 ; W = divisor
STEP SUBWF DDLO,F ; Subtract 10 from dividend LSB
BTFSC STATUS,C ; Carry?
GOTO BUMP ; No. Jump
MOVF DDHI,F ; Yes. Is dividend MSB 0?
BTFSC STATUS,Z ;
GOTO SALIDA ; Yes. Done
DECF DDHI,F ; No. Decrement dividend MSB
BUMP INCF QLO,F ; Bump quotient LSB
BTFSC STATUS,Z ; Is it 0?
INCF QHI,F ; Yes. Increment quotient MSB
GOTO STEP
SALIDA
MOVFW QHI
MOVWF PORTD
MOVFW QLO
MOVWF PORTC
GOTO MIPROGRAMA
EXPONENTE
MOVF PORTA,0
XORLW D'0'
BTFSC STATUS,2
GOTO BASE0
MOVF PORTB,0
XORLW D'0'
BTFSC STATUS,2
GOTO ELEVADOACERO
MOVLW D'1'
MOVWF DEC1
POTENCIA1
MOVF ENTERO,0
ADDWF CARRY,1
BTFSC STATUS,0
GOTO OVERFLOW
MOVF DEC1,0
DECF DATO1,1
ADDWF RESULTADO,1
BTFSC STATUS,0
INCF CARRY,1
MOVF DATO1,1
BTFSS STATUS,2
GOTO POTENCIA1
DECF DATO2,1
BTFSS STATUS,2
GOTO FIXPOTENCIA
MOVF RESULTADO,0
MOVWF PORTC
MOVF CARRY,0
MOVWF PORTD
GOTO MIPROGRAMA
FIXPOTENCIA
MOVF PORTA,0
MOVWF DATO1
MOVF CARRY,0
MOVWF ENTERO
CLRF CARRY
MOVF RESULTADO,0
MOVWF DEC1
CLRF RESULTADO
GOTO POTENCIA1
ELEVADOACERO
MOVLW D'1'
MOVWF PORTC
GOTO MIPROGRAMA
BASE0
MOVLW D'0'
MOVWF PORTC
MOVWF PORTD
GOTO MIPROGRAMA
OVERFLOW
MOVLW D'255'
MOVWF PORTC
MOVWF PORTD
CALL DELAY
CLRF PORTC
CLRF PORTD
GOTO MIPROGRAMA
DELAY
MOVLW D'8'
MOVWF TMR0
BCF INTCON,T0IF
DELAY_BUCLE
BTFSS INTCON,T0IF
GOTO DELAY_BUCLE
RETURN
RAIZ
MOVLW 0XFC
MOVWF PORTC
MOVWF PORTD
GOTO MIPROGRAMA
CERO
CLRF PORTC
CLRF PORTD
GOTO MIPROGRAMA
VAINARANDOM
MOVWF DATO2
INCF DATO2,F
MOVFW DATO1
ADDWF DATO2,W
MOVWF PORTD
GOTO MIPROGRAMA
END