TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: bigwill45 en 19 de Febrero de 2008, 14:07:31

Título: mejor opcion POLLING o INTerrupcion
Publicado por: bigwill45 en 19 de Febrero de 2008, 14:07:31
hola lista ,necesito sus recomendaciones
tengo lo siguiente
pic 16f84a , comunicacion serie con max232
en el puerto a ra3 y ra4 conectado el max232
en el puerto b rb6 y rb7 un relay ssr en cada uno
la idea es que cdo se tx un 1 activar rb6 y al tx un 2 activar rb7( los caracteres a tx ,  cualquiera, puse 1 y 2 por citar un ejemplo)
de momento, tengo un call que apunta a un btfs para saber si entro el bit de start  y ahi hacer el analisis de que fue lo que llego
que seria mejor emplear esta tecnica de polling o mejor utilizar interrupcion por rb0, si  utilizo esta ultima, tendria que conectar la entrada de datos provenientes del max232 a rb0?
su orientacion por favor
salu2
willy
Título: Re: mejor opcion POLLING o INTerrupcion
Publicado por: BrunoF en 19 de Febrero de 2008, 14:30:35
Hola.

Podría ser. Todo depende de si necesitas que el PIC haga otras cosas. Sino, puedes dejarlo polleando que no molestaría.

Saludos


Título: Re: mejor opcion POLLING o INTerrupcion
Publicado por: bigwill45 en 19 de Febrero de 2008, 14:41:12
muchas gracias lo que sucede es que con lo que tengo hecho me da un error de que el stack esta lleno
y pense que quiza seria ese el problema,


         LIST     p=16F84A                     ;Tipo de procesador.
    INCLUDE  <P16F84A.INC>                          ;Definiciones de registros internos.
   
;                     ************ Zona de datos******************************

      CBLOCK 0X0C
      GuardaDato
           rs232_ContadorBits
           rs232_Dato
           R_ContaA
      rs232_inicializa
      rs232_LeeDato
      activaRB7
           ENDC

      #DEFINE rs232_in   PORTA,4         ; donde se reciben los datos
      #DEFINE rs232_out       PORTA,3           ; donde se envian  los datos

   
;   ********ZONA DE CODIGOS******************
      ORG         0
inicio
      call         rs232_inicializa

Principal   
      call         rs232_LeeDato
      movwf         GuardaDato

      END

      


;    ********Rutina Inicilizar el RS232************


rs232_inicializa
      bsf         rs232_out       ; Salida en alto para reposo
      bsf         STATUS,RP0
      bsf           rs232_in        ; Se configura esta linea como entrada
      bcf         rs232_out       ; Se configura esta linea como salida
      bcf         STATUS,RP0
return   


;   ****** Rutina Leer Datos RS232***************

rs232_LeeDato
      movlw         d'8'            ; cantidad de bits a recibir
      movwf         rs232_ContadorBits
rs232_EsperaBitStart
      btfsc         rs232_in         ; lee la entrada y espera que sea 0
      goto         rs232_EsperaBitStart
      call          retardo_100micros
      call         retardo_50micros
rs232_leeBit
      bcf         STATUS,C         ; lee el Pin, en principio debe ser cero
      btfsc         rs232_in    ; comprueba si realmente es cero
      bsf         STATUS,C    ; cambia a 1
      rrf         rs232_dato,F    ; introduce el bit en el registro de lectura
      call         retardo_100micros ; lee los siguientes bits en un periodo mas tarde
      decfsz         rs232_contadorbits,F
      goto         rs232_leeBit
      call         retardo_200micros ; esperar un tiempo de dos bit de parada
      movf         rs232_dato,W     ; el resultado al registro W
      return

;        ********* SUBRUTINAS DE RETARDO **********

retardo_200micros                      ; 2+1+1+2+(2+3k)=200cm= 200ms(para K=64 a 4mhz)
       nop
      movlw         d'64'
      goto         retardomicros

retardo_100micros
      movlw         d'31'
      goto         retardomicros
retardomicros
      movwf         R_ContaA     ; Aporta un ciclo de maquina
rmicros_bucle
      decfsz         R_ContaA,F
      goto         rmicros_bucle
      return
con este codigo, me da ese error
salu2
willy
Título: Re: mejor opcion POLLING o INTerrupcion
Publicado por: BrunoF en 19 de Febrero de 2008, 14:51:40
1)

rs232_inicializa
      bsf         rs232_out       ; Salida en alto para reposo
      bsf         STATUS,RP0
      bsf           rs232_in        ; Se configura esta linea como entrada
      bcf         rs232_out       ; Se configura esta linea como salida
      bcf         STATUS,RP0
return   

¿Cómo podés saber que efectivamente la instrucción

bsf         rs232_out       ; Salida en alto para reposo

va a poner a 1 el bit asignado si todavía no lo configuraste como salida?

2)
Principal   
      call         rs232_LeeDato
      movwf         GuardaDato

Proba agregando un goto Principal despues de eso... quedando:
Principal   
      call         rs232_LeeDato
      movwf         GuardaDato
      goto       Principal

Saludos!
Título: Re: mejor opcion POLLING o INTerrupcion
Publicado por: bigwill45 en 19 de Febrero de 2008, 15:11:14
es decir, que primero tendria que acceder al banco 1
con un trisb definir ra3 como salida
y despues poner en estado alto ?
de eso se trata ??
Título: Re: mejor opcion POLLING o INTerrupcion
Publicado por: BrunoF en 19 de Febrero de 2008, 15:22:26
Claaaro.

;)