Hola agradeceria me ayuden a revisar mi codigo ya que no encuentro logica, mando un dato al puerto A y no ocurre nada en la simulacion de MPLAB uso la version 8 y estoy programando un pic16f876
No se si algo se me esta escapando o es un Bug del simulador
lo interesante esta en el ultimo momento cuando termino de hacer todo el procesamiento y mando mis datos por el puerto c y por el puerto a pero el puerto a no hace nada
list p = 16f876
include <p16f876.inc>
__CONFIG _WDT_OFF
;ESTA SECCION ES LA DE MIS VARIABLES DE TRABAJO
CONTADOR2 EQU 0X26
CONTADOR equ 0x27
retardo equ 0x29
CINCUENTAMS EQU 0X30
PERIODO EQU 0X31
operando1 EQU 0x32
operando2 EQU 0x33
resultado_lsb EQU 0x35
resultado_msb EQU 0x36
DESBORDABLE EQU 0X37
PORVEINTE EQU 0X38
FRECUENCIA EQU 0X39
RESIDUO EQU 0X40
RESPER EQU 0X41
SUELA2 EQU 0X42
NIBLE1 EQU 0X43
NIBLE2 EQU 0X44
;**********************************************
DATOC_L EQU 0X60
DATOC_H EQU 0X61
BCD_2 EQU 0X62
BCD_1 EQU 0X63
BCD_0 EQU 0X64
CONT_BCD EQU 0X65
TEMPO_BCD EQU 0X66
SUELA EQU 0X67
;AQUI ES EL INICIO DEL PROGRAMA
ORG 0X00
GOTO INICIO
ORG 0X04
MOVF CINCUENTAMS,W
MOVWF PERIODO
;********************************************************************************
;ESTA SECCION DE CODIGO TRANSFORMA EL PERIODO MEDIDO EN UNIDADES DE PULSACIONES POR SEGUNDO
;QUE SERA ALMACENADO EN LA VARIABLE FRECUENCIA
MOVLW .240
MOVWF operando1
MOVF PERIODO,W
MOVWF operando2
MOVF operando2,W
bcf STATUS,C ; limpia el acarreo
sumar: subwf operando1,f ; operando1 - w -> w
incf resultado_lsb,f ; w -> resultado_lsb
btfsc STATUS,C ; si hay acarreo hacer resultado_msb + 1 --> resultado_msb
goto sumar ; continua la suma
decf resultado_lsb,f
;**************************************************
movf operando1,w
addwf operando2,w
MOVWF RESIDUO
MOVLW .4 ;
;MULTIPLICANDO POR 10 RECUPERO PARTE DEL RESIDUO
MOVWF PORVEINTE
MOVF RESIDUO,W
RESID ADDWF RESIDUO,W
decfsz PORVEINTE,f
GOTO RESID
MOVWF RESIDUO
CLRF PORVEINTE
;*****************************************************************
MOVWF operando1
MOVF PERIODO,W
MOVWF operando2
MOVF operando2,W
bcf STATUS,C ; limpia el acarreo
divx: subwf operando1,f ; operando1 - w -> w
incf RESPER,f ; w -> resultado_lsb
btfsc STATUS,C ; si hay acarreo hacer resultado_msb + 1 --> resultado_msb
goto divx ; continua la suma
decf RESPER,f
;**************************************************************************
;******************************************************************
INMULTI MOVLW .4 ; termina la suma sucesiva
;MULTIPLICANDO POR 20 OBTENGO FINALMENTE EL NUMERO DE PULSACIONES POR SEGUNDO
MOVWF PORVEINTE
MOVFW resultado_lsb
MULTIPLIC ADDWF resultado_lsb,W
decfsz PORVEINTE,f
GOTO MULTIPLIC
MOVWF FRECUENCIA
;*************************************************************************
;finalmente sumo frecuencia y su residuo
MOVF RESPER,W
ADDWF FRECUENCIA,F
;**********************************************************************
call TRANS_16B_BCD ;aqui llamo la subrutina que me convierte de binario
; a bcd
;***************************************************************************
INICIO CLRF PORTB
CLRF PORTA
BSF STATUS,RP0
CLRF TRISA
CLRF TRISC
MOVLW 0XFF
MOVWF TRISB
BSF STATUS,RP0
BSF OPTION_REG,INTEDG
BCF STATUS,RP0
MOVLW b'10010000'
MOVWF INTCON
movf PORTB,W
CLRF FRECUENCIA
CLRF CINCUENTAMS
;**************************************************
;AQUI BORRO TODAS MIS VARIABLES PARA EVITAR ERRORES
CLRF CONTADOR2
CLRF CONTADOR
CLRF retardo
CLRF CINCUENTAMS
CLRF PERIODO
CLRF operando1
CLRF operando2
CLRF resultado_lsb
CLRF resultado_msb
CLRF DESBORDABLE
CLRF PORVEINTE
CLRF FRECUENCIA
CLRF DATOC_L
CLRF DATOC_H
CLRF BCD_2
CLRF BCD_1
CLRF BCD_0
CLRF CONT_BCD
CLRF TEMPO_BCD
CLRF RESIDUO
CLRF SUELA
CLRF RESPER
CLRF SUELA2
;*************************************************************
;***************************************************************************
;ESTA SECCION CORRESPONDE AL DELAY
I_DELAY MOVLW .32
MOVWF CONTADOR2
RETARDO2 DECFSZ CONTADOR2,f
GOTO RETARDO
GOTO INCREMEN;ATENCION AQUI
RETARDO MOVLW .180
MOVWF CONTADOR
BUCLE2 NOP
DECFSZ CONTADOR,f
GOTO BUCLE2
GOTO RETARDO2
INCREMEN INCF CINCUENTAMS,f
GOTO I_DELAY
CICLOCERRA NOP
GOTO CICLOCERRA
goto INICIO
RUTINA decfsz retardo,F
GOTO INICIO
;************************************************************
;ESTA SECCION TRANSFORMA LA VARIABLE FRECUENCIA EN UN NUMERO DE 3 DIGITOS
TRANS_16B_BCD MOVF FRECUENCIA,W
MOVWF DATOC_L
BITS16_BCD BCF STATUS,C
CLRF CONT_BCD
BSF CONT_BCD,4
CLRF BCD_2
CLRF BCD_1
CLRF BCD_0
LOOP_16 RLF DATOC_L,F
RLF DATOC_H,F
RLF BCD_2,f
RLF BCD_1,f
RLF BCD_0,f
DECFSZ CONT_BCD,f
GOTO AJUSTE
; cambio los bits por el error al alambrar
MOVF BCD_1,W
; andlw b'11110000'
MOVWF SUELA
SWAPF SUELA,F
movf BCD_2,W
MOVWF SUELA2
SWAPF SUELA2,F
MOVLW B'00001111'
ANDWF SUELA2,W
IORWF SUELA,F
MOVLW B'00001111'
ANDWF BCD_2,W
MOVWF SUELA2
BSF STATUS,RP0
CLRF TRISA
CLRF TRISC
BCF STATUS,RP0
MOVF SUELA,W
MOVWF PORTC
MOVF SUELA2,W; AQUI ES DONDE QUIERO AVENTAR LA MAQUINA POR LA COMPUTADORA
MOVWF PORTA;YA QUE LA SIMULACION EN MPLAB NO ME MANDA DATO AL PUERTO A
RETURN ;ESTE SITIO ES DONDE TODO TERMINA
AJUSTE MOVLW BCD_2
MOVWF FSR
CALL AJUSTE_BCD
INCF FSR,F
CALL AJUSTE_BCD
INCF FSR,F
CALL AJUSTE_BCD
GOTO LOOP_16
AJUSTE_BCD MOVF INDF,W
ADDLW 0X03
MOVWF TEMPO_BCD
BTFSC TEMPO_BCD,3
MOVWF INDF
MOVF INDF,W
ADDLW 0X30
MOVWF TEMPO_BCD
BTFSC TEMPO_BCD,7
MOVWF INDF
RETURN
end