TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado 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
-
Hola.
Podría ser. Todo depende de si necesitas que el PIC haga otras cosas. Sino, puedes dejarlo polleando que no molestaría.
Saludos
-
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
-
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!
-
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 ??
-
Claaaro.
;)