Esta parte yo que tu la cambiaría asi. Fijate que moví el label ret una línea para abajo.
Los dos puntos ":" yo los uso para mayor claridad en mis softwares para distinguir rapidamente un label de una instruccion o una constante.
Lo que hago aquí es no volver a cambiar la página una y otra vez, ya que no es necesario
Otro consejo, si declaras los include para las constantes de los registros (lo que está dentro del P16F876.inc", no uses STATUS,5, usa STATUS,RP0 . Eso deja el código más claro. Es más facil recordar que significa el RP0 y no el STATUS,5.
Codigo:
output: movwf SSPBUF
bsf STATUS,RB0 ; banco 1
ret: btfss SSPSTAT,BF
goto ret
bcf STATUS,RB0 ; banco 0
movf SSPBUF,W
return
Algunos consejos.
1) Es importante que observes que tengas el PULLUP resistor a la salida del DATA OUT del integrado. Ahí en la datasheet te dice que lo pongas.
Pagina 5.
SDO: Serial Data Output, Open Drain transistor requires pull-up resistor.2) Además, supongamos que hiciste bien el hardware y que esté todo bien, fijate que en las datasheet te dice :
An optional reset (PR) pin forces all the AD5204 wipers to the midscale position by loading 80H into the VR latch.Has comprobado esto? es decir, que cuando resetees el módulo la R de cada potenciómetro digital vaya al valor medio? Antes de prender el pic o mejor aún sin que esté el pic. O también podría ser un pin controlado por tu PIC el cual podrías accionar cuando inicies tu firmware.
3) Cuando inicias el firmware del pic no das tiempo a nada, es decir supones que se enciende el pic y todas las tensiones ya se establecieron. Te sugiero que hagas un delay despues de configurar los puertos antes de leer cualquier señal en el Puerto B.
4) Al seleccionar el CHIP con el CS porque no esperas algunos mseg? total no tienes apuro. Esto es para ir viendo posibles problemas. Lo mismo haría antes de deseleccionar el CHIP.
Por ejemplo
1. CS del Integrado
2. Delay n mseg
3. Envias 1er byte
4. Envias 2do byte
5. Delay n mseg
6. Quitas CS del Integrado
5) Puede ser que estemos usando mal el modo de SPI que necesite este integrado. No está muy claro el datasheet jeje, asi que veamos las posibles configuraciones.
Posibilidad 1
Codigo:
bsf STATUS,RP0
movlw B"10000000"
movwf SSPSTAT
bcf STATUS,RP0
movlw B"00110010"
movwf SSPCON
Posibilidad 2
Codigo:
bsf STATUS,RP0
movlw B"11000000"
movwf SSPSTAT
bcf STATUS,RP0
movlw B"00110010"
movwf SSPCON
Posibilidad 3
Codigo:
bsf STATUS,RP0
movlw B"10000000"
movwf SSPSTAT
bcf STATUS,RP0
movlw B"00100010"
movwf SSPCON
Posibilidad 4
Codigo:
bsf STATUS,RP0
movlw B"11000000"
movwf SSPSTAT
bcf STATUS,RP0
movlw B"00100010"
movwf SSPCON
Saludos