por que me dices que bsf 0x05,0 mal?
Vos tenes un "bus" en realidad un cable por el cual ambos dispositivos, es decir el PIC o el DHT11 deben enviar datos. Y imagina por un momento que ocurriria si vos en tu PIC pones un pin a 5V ( imaginatelo como una llave que conecta los 5V al pin ) y el DHT11 procede a poner el pin de datos a 0V ( igual que antes como una llave que conecta el pin de datos a 0V)
Estarias haciendo un cortocircuito!.
Entonces como se soluciona esto ? Para esto se usan salidas conocidas como open colector ( colector abierto ), que es esto ? Es asi:

Como observas este pin solo puede poner el pin a 0V o alta impedancia ( en caso que el transistor no conduzca ).
Esta salida es la que posee el DHT11, y es la que deberia poseer el PIC ( o la que intentamos simular )
Entonces la linea ( bus ) por donde van los datos va a estar en 1 ( 5V ) gracias a una resistencia de pull-up, si por ejemplo ocurre algun problema y ambos ( PIC y DHT11 ) actuan al mismo tiempo, lo unico que pueden hacer es conectar la linea a 0V, y de esa forma nunca tendrias un cortocircuito, ya que a corriente esta limitada por la resistencia de pull-up.
Como decia, el PIC posee una salida tottem-pole:

El cual si pones un 1, activaria la llave superior y desactivaria la inferior, conectando el pin a 5V, y si pones un 0 ocurriria lo contrario. Ademas de esto podes ponerlo en alta impedancia ( al ponerlo como entrada ) y ambas llaves estarian desactivadas.
Si quisieramos simular la salida open-colector, solo necesitariamos la llave inferior ( poner a 0V ) y ponerlo como entrada ( para alta impedancia ). Si uno usa la llave superior corre el riesgo del cortocircuito como ya lo hablamos.
Resumid En unos puntos mas simples:
- El que mantiene en 1 el canal ( bus, linea ) es una resistencia de pull-up.
- Tu PIC solo debe poner un 0 o alta impedancia a la salida nada mas. Poner un 1 ( 5V ) podria significar un cortocircuito en caso que el DHT11 envie ( ponga un 0 ).
Yo casi te di el codigo completo, solo le faltan un par de cosas nomas.
Recorda dejar el pin como entrada ( el de datos me refiero ) y solo ponerlo como salida cuando tengas que poner el 0.
Una que no te dije, si vas a cambiar solo 1 bit, no es necesario esto:
movlw b'000001'
movwf 0x85 ; 0x85 es TRISA , 0x05 es PORTA, a pesar que el opcode no los diferencie
Podes hacer lo mismo con esto:
BSF 0x85, 0
Aunque como dije solo pondrias como salida en un solo momento, en el reset dejarlo como entrada.
Como no puedo ver la temperatura en puerto d y la humedad en c (por ejemplo) no se que estoy haciendo.Agradezco tu ayuda pero me esta quedando grande esto.Un saludo
Si podes pero hasta ahora tus codigos han sido muy basicos y no llegaste a tomar los bits necesarios.
Como dije antes, yo te pase el codigo casi completo, solo le faltaban rellenar algunas partes que creo que son 8 instrucciones nomas ( pasar a salida, poner un 0, esperar el tiempo necesario para que el pulso sea valido, poner como entrada, esperar un 0 y luego esperar un 1). Todo lo demas del codigo esta realizado.
Luego de eso falta mostrarlo, lo cual seran 4 instrucciones mas. ( Es decir mover de los registros creados a los puertos )