A quien me pueda ayudar a conseguir el codigo de master y esclavo en comunicacion SPI, sin el uso del SS pin, entre los pic 18f458 en lenguaje assembler (para programar en MPLAB), aqui esta el codigo en donde lo pruebo en el esclavo con el PWM (modulo ccp) usando el valor para modificar el ciclo util :
El master:
LIST P=18F448
include <P18F448.INC>
__CONFIG _CONFIG4L, _STVR_OFF_4L & _LVP_OFF_4L
__CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
__CONFIG _CONFIG2L, _BOR_OFF_2L
__CONFIG _CONFIG1H, _OSCS_OFF_1H & _HSPLL_OSC_1H
PWMVAL EQU 1
REG_TEMP_T1L EQU 1
REG_TEMP_T1H EQU 1
ORG 00H
goto Start ;Reset Vector address
ORG 08H
goto ISR_HIGH ;Higher priority ISR at 0x0008
ORG 18H
goto ISR_HIGH ;Lower priority ISR at 0x0018
;****************************************************************
Start
;****************************************************************
;Initialization of the Ports
clrf TRISC ;PORTC all output
clrf PORTC
clrf TRISD ;PORTC all output
clrf PORTD
clrf TRISB ;PORTB all output
clrf PORTB
clrf PORTA
clrf TRISA
MOVLW 0X0F
MOVWF BSR,0
MOVLW 0X00
MOVWF PWMVAL,0
MOVWF REG_TEMP_T1L,0
MOVWF REG_TEMP_T1H,0
;******************************************************************
;Initialize ADC registers
movlw 0X81 ;FOSC/4,CHANNEL 0, ADON
movwf ADCON0,1
movlw 0X40
movwf ADCON1,1 ;ALL CHANNELS AVAILABLE,VCC=VDD, GND=VSS
movlw 0xFF
movwf TRISA,1 ;
;******************************************************************
clrf T1CON,1
movlw 0X34
movwf T1CON,1 ;16 BITS, TIMER1 OFF, PRESCALER 1:8
bsf T1CON,TMR1ON,1
movlw 0x04
movwf T2CON,1 ;INICIALIZA TIMER 2 PARA PWM
movlw 0x0C
movwf CCP1CON,1 ;CCP1 and CCP2 configured to PWM
;movwf ECCP1CON
movlw 0xFF
movwf PR2,1
;******************************************************************
bsf PIE1,ADIE,1 ;AD Converter over Interrupt enable
bsf PIE1,TMR1IE,1 ;Timer 0 interrupt enable
bsf INTCON,PEIE,1 ;Port interrupts enable
bsf INTCON,GIE,1 ;Global interrupt enable
;CONFIGURACION DE COMUNICACION ENTRE MICROS POR MEDIO DEL MODO SPI (MASTER)
movlw 0XC0
movwf SSPSTAT ;MASTER MODE, INPUT DATA SAMPLED AT THE END OF DATA OUTPUT TIME
movlw 0X22
movwf SSPCON1 ;MASTER MODE, FOSC/32
bcf PORTC,5,1 ;SDO salida
bsf PORTC,4,1 ;SDI entrada
bcf PORTC,3,1 ;Master da el clock
bsf PORTB,4,1
;******************************************************************
MAIN_LOOP
bra MAIN_LOOP
ISR_HIGH
btfsc PIR1,ADIF,1
bra AD_CONV_COMPLETE
btfsc PIR1,TMR1IF,1
bra SAMPLING_TIME
RETFIE FAST
AD_CONV_COMPLETE ;ADC interrupt
movff ADRESH,CCPR1L
bsf PORTB,4,1 ;Visualizacion de actividad
NO_TERMINA
btfss SSPSTAT,BF,1 ;data has been received (transmit completed)?
bra NO_TERMINA
bcf PORTB,4,1 ;Visualizacion de actividad
movf SSPBUF,W,1
movwf PWMVAL,0 ;se almacena datos de recepcion
movf ADRESH,W,1
movwf SSPBUF,1 ;se transmite datos de AD por SPI
bcf PIR1,ADIF,1
RETFIE FAST
SAMPLING_TIME
bcf PIR1,TMR1IF,1
movff REG_TEMP_T1L,TMR1L
movff REG_TEMP_T1H,TMR1H
call SET_ADC_GO
RETFIE FAST
SET_ADC_GO
btfss ADCON0,GO,1
bsf ADCON0,GO,1 ;Set GO bit for ADC conversion start
return
END
El esclavo
LIST P=18F448
include <P18F448.INC>
__CONFIG _CONFIG4L, _STVR_OFF_4L & _LVP_OFF_4L
__CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
__CONFIG _CONFIG2L, _BOR_OFF_2L
__CONFIG _CONFIG1H, _OSCS_OFF_1H & _HSPLL_OSC_1H
PWMVAL EQU 1
REG_TEMP_T1L EQU 1
REG_TEMP_T1H EQU 1
ORG 00H
goto Start ;Reset Vector address
ORG 08H
goto ISR_HIGH ;Higher priority ISR at 0x0008
ORG 18H
goto ISR_HIGH ;Lower priority ISR at 0x0018
;****************************************************************
Start
;****************************************************************
;Initialization of the Ports
clrf TRISC ;PORTC all output
clrf PORTC
clrf TRISD ;PORTC all output
clrf PORTD
clrf TRISB ;PORTB all output
clrf PORTB
clrf PORTA
clrf TRISA
MOVLW 0X0F
MOVWF BSR,0
MOVLW 0X00
MOVWF PWMVAL,0
MOVWF REG_TEMP_T1L,0
MOVWF REG_TEMP_T1H,0
;******************************************************************
;Initialize ADC registers
movlw 0X81 ;FOSC/4,CHANNEL 0, ADON
movwf ADCON0,1
movlw 0X40
movwf ADCON1,1 ;ALL CHANNELS AVAILABLE,VCC=VDD, GND=VSS
movlw 0xFF
movwf TRISA,1 ;
;******************************************************************
clrf T1CON,1
movlw 0X34
movwf T1CON,1 ;16 BITS, TIMER1 OFF, PRESCALER 1:8
bsf T1CON,TMR1ON,1
movlw 0x04
movwf T2CON,1 ;INICIALIZA TIMER 2 PARA PWM
movlw 0x0C
movwf CCP1CON,1 ;CCP1 and CCP2 configured to PWM
;movwf ECCP1CON
movlw 0xFF
movwf PR2,1
;******************************************************************
;bsf PIE1,ADIE,1 ;AD Converter over Interrupt enable
bsf PIE1,TMR1IE,1 ;Timer 1 interrupt enable
bsf INTCON,PEIE,1 ;Port interrupts enable
bsf INTCON,GIE,1 ;Global interrupt enable
;CONFIGURACION DE COMUNICACION ENTRE MICROS POR MEDIO DEL MODO SPI (esclavo)
movlw 0X40
movwf SSPSTAT ;SLAVE MODE, INPUT DATA SAMPLED AT THE END OF DATA OUTPUT TIME
movlw 0X25
movwf SSPCON1 ;SLAVE MODE, SS PIN DISABLED
bcf PORTC,5,1 ;SDO salida
bsf PORTC,4,1 ;SDI entrada
bsf PORTC,3,1 ;Master da el clock
movf SSPBUF,W,1
clrf W,1
movwf SSPBUF,1
bsf PORTB,7,1
;******************************************************************
MAIN_LOOP
bra MAIN_LOOP
ISR_HIGH
btfsc PIR1,TMR1IF,1
bra SAMPLING_TIME
RETFIE FAST
SAMPLING_TIME
bcf PIR1,TMR1IF,1
movff REG_TEMP_T1L,TMR1L
movff REG_TEMP_T1H,TMR1H
bsf PORTB,7,1 ;Visualizacion de actividad
NO_TERMINA
btfss SSPSTAT,BF,1 ;data has been received (transmit completed)?
bra NO_TERMINA
btfss SSPCON1,6,1 ;OVERFLOW?
bra NO_OVF
bcf SSPCON1,6,1
bsf PORTB,6,1 ;avisa overflow
bra NO_TERMINA
NO_OVF
bcf PORTB,6,1 ;quita aviso overflow
bcf PORTB,7,1 ;Visualizacion de actividad
movf SSPBUF,W,1
movwf PWMVAL,0 ;se almacena datos de recepcion
movff PWMVAL,CCPR1L ;PWM del primer modulo CCP
movf PWMVAL,W,1
movwf SSPBUF,1 ;se transmite datos de RECEPCION por SPI
RETFIE FAST
END
La pregunta es en que estoy fallando porque ni el reloj se puede ver en el osciloscopio...... ya que el master esta en fosc/64???
Gracias por la posible colaboracion
Atte:
Andres Hernandez