TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: marcelo_gre en 08 de Julio de 2005, 15:28:00
-
Tengo un problema con relacion a mi comunicacion SPI, estoy intentanto comunicar un 877A con un 876, hago la configuracion de los registros SSPCON y SSPSTAT tanto para el 877A (maestro) y 876(esclavo) y lo q hace mi programa es manda 0x32 del maestro al esclavo y el esclavo cuando reciba este valor tiene q devolver 0x35 pero el esclavo se queda esperando a q el maestro mande el codigo luego verifique q el pin SCK no tenia señal....
Talvez me este equivocando en la configuracion de los registros SSPCON y SSPSTAT por favor alguien me podria ayudar con la configuracion del protocolo SPI......
-
Lo siento por mandar la pregunta a dos subforos,pero como soy nuevo en esto no me di cuenta q primero lo mande al almacen de assembler sin querer y despues me di cuenta que las preguntas se realizaban en el subforo Todo en microcontroladores PIC, lo siento fue un error, y agradeceria si alguien me ayuda con la duda que tengo en la pregunta anterior... Gracias de ante mano....
-
Bueno. Pon el código que corre en ambos PIC y le echaremos un vistazo por que asi no sabemos cual es el fallo
-
Bueno aqui esta el codigo del maestro:
list p=16f877A
include<p16f877A.inc>
org 0x00
goto inicio
;///////////declaracion de variables//////////7777777
retar_20 equ 0x30
retar1_20 equ 0x31
retar equ 0x32
retar1 equ 0x33
retaro equ 0x34
retar1o equ 0x35
banderas equ 0x36
rx_data equ 0x37
tx_data equ 0x38
W_Temp equ 7Ch
Status_Temp equ 7Dh
PClatch_Temp equ 7Eh
FSR_Temp equ 7Fh
;configuracion de registros
inicio
;iniciar puertos
bcf STATUS, RP0 ;va al banco 0
clrf PORTA
clrf PORTB
clrf PORTC
;clrf PORTD
;clrf PORTE
bsf STATUS, RP0 ;va al banco 1
movlw b"00000111" ;RA0,RA1,RA2,RA3,RA4,RA5,RE0,RE1,RE2 digitales
movwf ADCON1 ;Mover el valor al registro
movlw b"00001111" ;0,1,2,3 entradas 4 salida
movwf TRISA
movlw b"00000001" ;0,1,2,3 entradas 4,5,6,7 salidas
movwf TRISB
movlw b"10011000" ;0,1,2,3,4,5,6 salidas 7 entrada
movwf TRISC
movlw b"00000000" ;0,1,2,3,4,5,6,7 salidas entrada
movwf TRISD
movlw b"00000000" ;0,1,2,3,4,5,6,7 salidas entrada
movwf TRISE
;iniciar_perifericos
bsf STATUS,RP0 ;seleccion del banco 1
movlw b"00000000"
movwf PIE1 ;permiso de interrupciones para el T1 y T2
movlw b"00000000"
movwf SSPSTAT
bcf STATUS,RP0 ;va al banco 0
movlw b"00100010"
movwf SSPCON
clrf STATUS
clrf PIR1
clrf PIR2
goto principal
;programa principal
principal
movlw 0x32
movwf SSPBUF
finsp
btfss PIR1,PSPIF
goto finsp
no_spi
btfss PIR1,PSPIF
goto no_spi
movfw SSPBUF
movwf rx_data
goto $
END
-
Y este es eñl del esclavo:
list p=16f876
include<p16f876.inc>
org 0x00
goto inicio
;///////////declaracion de variables//////////7777777
retar_20 equ 0x30
retar1_20 equ 0x31
retar equ 0x32
retar1 equ 0x33
retaro equ 0x34
retar1o equ 0x35
banderas equ 0x36
rx_data equ 0x37
tx_data equ 0x38
W_Temp equ 7Ch
Status_Temp equ 7Dh
PClatch_Temp equ 7Eh
FSR_Temp equ 7Fh
;configuracion de registros
inicio
;iniciar puertos
bcf STATUS, RP0 ;va al banco 0
clrf PORTA
clrf PORTB
clrf PORTC
;clrf PORTD
;clrf PORTE
bsf STATUS, RP0 ;va al banco 1
movlw b"00000111" ;RA0,RA1,RA2,RA3,RA4,RA5,RE0,RE1,RE2 digitales
movwf ADCON1 ;Mover el valor al registro
movlw b"00001111" ;0,1,2,3 entradas 4 salida
movwf TRISA
movlw b"00000001" ;0,1,2,3 entradas 4,5,6,7 salidas
movwf TRISB
movlw b"10011000" ;0,1,2,3,4,5,6 salidas 7 entrada
movwf TRISC
;movlw b"00000000" ;0,1,2,3,4,5,6,7 salidas entrada
;movwf TRISD
;movlw b"00000000" ;0,1,2,3,4,5,6,7 salidas entrada
;movwf TRISE
;iniciar_perifericos
bsf STATUS,RP0 ;seleccion del banco 1
movlw b"00000000"
movwf PIE1 ;permiso de interrupciones para el T1 y T2
movlw b"00000000"
movwf SSPSTAT
bcf STATUS,RP0 ;va al banco 0
movlw b"00110100"
movwf SSPCON
clrf STATUS
clrf PIR1
clrf PIR2
goto principal
;programa principal
principal
no_spi
btfss PIR1,PSPIF
goto no_spi
movfw SSPBUF
movwf rx_data
movlw 0x35
movwf SSPBUF
finsp
btfss PIR1,PSPIF
goto finsp
goto $
END
-
agradezco su ayuda.