Autor Tema: PUERTO A SE ME REVELA  (Leído 1949 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado 060780

  • PIC10
  • *
  • Mensajes: 11
PUERTO A SE ME REVELA
« en: 10 de Marzo de 2008, 17:15:33 »
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

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: PUERTO A SE ME REVELA
« Respuesta #1 en: 10 de Marzo de 2008, 17:36:47 »
ese pic tiene conversor A/D y me parece que tambien tiene comparadores , todo esto multiplexado en el puerto A, tienes que descativarlos porque por defecto te viene activado como pines análogos, intenta con eso, configurando todo como entada en los registros de control del AD el ADCON0 y ADCON1 y si tienen comparadores en el CMCOM . saludos.
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado 060780

  • PIC10
  • *
  • Mensajes: 11
¡¡¡¡¡¡¡¡¡¡¡¡¡GRACIAAAAS!!!!!!!!!!!!
« Respuesta #2 en: 10 de Marzo de 2008, 17:59:34 »
Si era el ADCON1 muchas gracias :-/