TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: hegod en 02 de Octubre de 2004, 22:05:00
-
nesesito entrar 8bit y sacar 8bit con el 16f84 pero no me alcanzan los pines, e penzado en la comunica comunicacion serial entre dos pic, pero no tengo idea de como es el mecanismo, ¿es mas leta?
¿como funciona ? ¿vetajas desventas?
muchas grasias
suerte.....................
-
Bueno, la comunicacion serial tiene un formato, el estandar es el siguiente:
Bit de inicio, transmitir el Bit0, bit1, bit2...bit8, bit de paridad, bit de stop, fin..
Bi | b0 |b1| b2 | b3 | b4 | b5 | b6 | b7 | Bp | Bs
al principio es tedioso pero una vez que le agarras la movida, se te hara sencillo, peor hay otras considerciones que debes hacer..
El bit de inicio siempre es un 0 logico, y el bit de paro es un 1 logico.
Si no hay ningun dato en el bus, es decir, no se esta transmitiendo nada, debe estar presente un 1 logico en el bus, es por eso que el bit de inicio es un 0 logico, y el bit de stop un 1 logico.
El bit de paridad solo se usa para el control de errores, puedes eliminarlo en la transmision, segun lo desees. En algunos instrumentos, es posible configurar el bit de paro o stop para que dure 2 tiempos de bit o 1.5 tiempos de bit, es decir, si utilizas una velocidad de transmision de 9600 bits por segundo (bps), el tiempo de bit es de aproximadamente 104 uS, entonces, solo haz las cuenats y listo. Aunque por lo general utilizar un solo bit de stop es suficiente.
otro detalle a considerar es lo que vas a unir serialmente, si vas a utilizar niveles rs232 o niveles ttl, lo digo por lo de 1"s y 0" logicos, ya que varian segun la norma que utilizes....
Mira, aqui te va una pequeñra rutina que hice para transmision y recepcion serial a 9600 bps, utiliza 1 bit de inidio, 8 bits de datos y 1 bit de stop...
;----------------------------------------------------------------
; RXserial y TXserial
;----------------------------------------------------------------
; Registros Asociados: NumBits, TxReg, RxReg, TEMPB1
; Constantes: SerTX = PORTC , TX = 6
; SerRX = PORTB , RX = 0
; Si se deseara modificar la velocidad de la transmision
; es necesario determinar el valor de la constante TEMPB1
; del Delay, en el caso de 9600 bps TEMPB1=.30 (decimal)
;----------------------------------------------------------------
TXserial ; (9600 bps)
bsf STATUS,C ; Config Bit de Stop
movlw .10
movwf NumBits
bcf SerTX,TX ; Transmitir 0
goto $+2
bsf SerTX,TX ; Transmitir 1
call SBit_Time
decf NumBits,F
btfsc STATUS,Z
return
rrf TxReg,F ; LSB en C
btfss STATUS,C
goto $-9
goto $-8
;----------------------------------------------------------------
RXserial ; (9600 bps)
clrf RxReg
movlw .9
movwf NumBits
bsf STATUS,C ; Bit de Stop
call SBit_Time
decf NumBits,F
btfsc STATUS,Z
goto Fin_RX
btfss SerRX,RX
goto $+.4
bsf STATUS,C
rrf RxReg,F
goto $-.8
bcf STATUS,C
rrf RxReg,F
goto $-.11
Fin_RX
call SBit_Time
return
;----------------------------------------------------------------
SBit_Time ; ~104 uS por bit (9600bps)
movlw .30
movwf TEMPB1
decfsz TEMPB1,F
goto $-1
return
;----------------------------------------------------------------