bueno esta es la que envia:
List p=16F876 ;Tipo de procesador
include "P16F876.INC" ;Definiciones de registros internos
#define ENABLE_CS bcf PORTA,0 ;Activa señal E
#define DISABLE_CS bsf PORTA,0 ;Desactiva señal E
DIRECCIO equ 0x29 ;ON PASSAM LA DIRECCIO
COMMAND equ 0X28
org 0x05
goto Inicio
;TRANSMIT***************************************************************************
;
TRANSMIT bcf STATUS,RP0
MOVWF SSPBUF
bsf STATUS,RP0
LOOP1 btfss SSPSTAT,BF
goto LOOP1
bcf STATUS,RP0
return
;************************************************************************************
;CONTROL_RESISTOR
;
CONTROL_RESISTOR bcf STATUS,RP0
ENABLE_CS
movf COMMAND,W
call TRANSMIT
DISABLE_CS
return
;************************************************************************************
;START_SPI
;
START_SPI bcf STATUS,RP0
movlw b"00110001" ;
movwf SSPCON
bsf STATUS,RP0
movlw b"01000000" ;40 mode 1,1 SPI
movwf SSPSTAT
bcf STATUS,RP0
return
;**********************************************************************************
;STOP_SPI
;
STOP_SPI bcf STATUS,RP0
movlw b"00000001" ; Funciona a 5MHz, 0x30
movwf SSPCON
return
;Programa principal
Inicio clrf PORTA
clrf PORTB
clrf PORTC ;Borra salidas
bsf STATUS,RP0 ;Selecciona banco 1
movlw 0x06
movwf ADCON1 ;Puerta A digital
movlw b"00000000"
movwf TRISA
movlw b"00010000"
movwf TRISC ;RC2 salida
bcf STATUS,RP0 ;Selecciona banco 0
torna call START_SPI
movlw .4
movwf DIRECCIO ;POSAM LA DIRECCIO
movwf COMMAND
call CONTROL_RESISTOR
call STOP_SPI
goto torna
end
****************************************************
I la que recibe:
list p=16F876
#include "p16F876.inc"
#define CS 0x20 ; PORTA,5 (HW SS pin)
ORG 0
nop ; FOR ICD
; Set up the SPI Support
BANKSEL TRISA ; BANK 1
movlw CS ; Chip Select pin
movwf TRISA ; is in input mode
movlw 0x06 ; Turn Off A/D mode for at least the
movwf ADCON1 ; Chip Select pin (all Digital mode)
; Set up output port
BANKSEL TRISB ; BANK 1
movlw 0x00 ; Configure all PORTB pins
movwf TRISB ; to be in output mode
; Set up the SPI
BANKSEL TRISC ; BANK 1
movlw 0x18 ; SCK is input (Slave), SDI is input,
movwf TRISC ; SDO is output, all others output
movlw 0x40 ; Mode 1,1 SPI with
movwf SSPSTAT ; middle of output time sampling
BANKSEL SSPCON ; BANK 0
movlw 0x34 ; Mode 1,1 SPI Slave Mode, /SS Required
movwf SSPCON ; SSP is on
Chk4Dat movlw SSPSTAT ; Indirectly test
movwf FSR ; a register by loading FSR
btfss INDF,BF ; Here is the test
goto Chk4Dat ; New data, do a transfer (below
RX_Data BANKSEL SSPBUF ; BANK 0
movf SSPBUF,W ; put in SSPBUF into W
BANKSEL PORTB ; BANK 0
movwf PORTB ; Show the results on PORTB
DoAgain
; Optional customer code can go here
goto Chk4Dat ; Receive Next Byte
end
Antoniof: Creo que tus subrutinas son por software y las mias per hard. Pero bueno. Por cierto, cuando tienes el pic de esa manera se deben de poder visualizar la onda de reloj y con el mio no hay manera. Bueno si me puedes echar esa mano. Muy agradecido. Saludos