Ah bien, bárbaro entonces.
Lo que estás planteando es hacer la recepción por soft en el pic. No he usado basic para el pic, pero me resulta confusa ésta sentencia:
Es decir, con almacen.b estarías haciendo referencia a un byte no?, y PORTD.1 es un bit. No hay conflicto con eso.
Pero hay otra cosa más importante, y es tenés que leer la entrada por la que vienen los datos cada cierto tiempo (ahi estás leyendo a máxima velocidad), para respetar la tasa de transferencia con que te transmite la tarjeta.
Si transmite a 56 kbit/s pensá que viene un bit cada 1/56K = 17.85 us, tendrías que meter un retardo de ese tiempo entre lectura y lectura.
Por otro lado, si vos podes fijar el protocolo que usa la tarjeta y tenés un módulo usart o uart en el pic (cual pic usas?), te diría que lo uses.
¿Por qué?, porque podés hacer la recepción más sencilla, con menos código, te olvidás de los retardos, y el pic se puede dedicar a hacer otra cosa mientras se recibe la información.
Tendrías que hacer que la tarjeta de transmitiera en conjuntos de 10 bits (marca de inicio + 8 bits de datos + marca stop, puede haber un bit de paridad opcional), el pic puede generar y atender una interrupción cuando se recibe un paquete de 10 bits que tendrá 8 bits de información, y podrías usar dos variables: DatoLSB (byte menos significativo) y Dato MSB (byte más significativo, en los que en realidad se usan solo dos bits).
Antes de seguir por este camino que te propongo, tendrías que leer
ésto para que me termines de entender, lo que digo es con esa información en la cabeza.
Si es un pic de la familia 16
acá hay más.
Igualmente, si lo querés hacer por software sin usar el usart, acordate de los retardos primero; tendrías que hacer algo como (lo pongo en pseudocódigo porque basic no es lo mío):
Código:
Esperar transferencia:
si PinInicioTransferencia = 1 entonces
contadorBits = 0 //supongo contadorBits variable de 2 bytes, o 1 word
EsperarRetardoMedioBit //para que el primer bit se muestree a la mitad y no en los flancos
LeerBit:
DatoRecibido.contadorBits= PinRX //PORTD.1 veo que usaste como PinRX
contadorBits = contadorBits-1
si contadorBits = 10 entonces
irA FinRecepcion
EsperarRetardo1Bit
irA LeerBit
sino // viene acá si PinInicioTransferencia = 0
IrA EsperarTransferencia
FinRecepcion:
sigue el resto del programa