que tal amigos necesito de su ayuda estoy realizando un proyecto sobre comunicacion por radio frecuencia, pero lo que estoy haciendo ahorita es la de comunicacion serial sincrona entre dos pic16f877 en la cual tengo problemas en la transmision serial, realice el programa en asm del pic master pero no logro transmitir , acontinuacion les presento el programa que e realizado haber si alguien lo checa y medigan donde esta el error para la transmision serial sincrona.
;***********************************************************
list p=16f877 ;se usa el PIC16F84
include "p16f877.inc" ;se carga la libreria correspondiente
;al PIC16F84
CONTD EQU 0X3C ;se le asigna la direccion a "CONTB"
org 0x00
goto INICIO
org 5
INICIO call initrans
bsf STATUS,RP0 ;banco 1
movlw 0xbF
movwf TRISC
movlw 0XFF
movwf PORTD ;puerto d como entrada
movlw 0X06 ;puerto a como salida
movwf ADCON0
clrf PORTA
movlw 0XD7
movwf TMR0 ;prescaler 1 :128
bcf STATUS,RP0 ;banco 1
ruttec movlw 0x02
movwf PORTA
call EXPLOTEC
call envia
goto ruttec
;*************************************************************************
;exploracion del teclado
;*************************************************************************
EXPLOTEC movlw 0X1A
subwf PORTD,0
btfss STATUS,Z
goto T7
movlw 0X1A
return
T7 movlw 0X19
subwf PORTD,0
btfss STATUS,Z
goto T1
movlw 0X19
return
T1 movlw 0X1B
subwf PORTD,0
btfss STATUS,Z
goto T4
movlw 0X18
return
T4 movlw 0X14
subwf PORTD,0
btfss STATUS,Z
goto T0
movlw 0X14
return
T0 movlw 0X16
subwf PORTD,0
btfss STATUS,Z
goto T8
movlw 0X16
return
T8 movlw 0X18
subwf PORTD,0
btfss STATUS,Z
goto T5
movlw 0X18
return
T5 movlw 0X1C
subwf PORTD,0
btfss STATUS,Z
goto T2
movlw 0X1C
return
T2 movlw 0X1D
subwf PORTD,0
btfss STATUS,Z
goto TN
movlw 0X1D
return
TN movlw 0X15
subwf PORTD,0
btfss STATUS,Z
goto T9
movlw 0X15
return
T9 movlw 0X1E
subwf PORTD,0
btfss STATUS,Z
goto T6
movlw 0X1E
return
T6 movlw 0X17
subwf PORTD,0
btfss STATUS,Z
goto T3
movlw 0X17
return
T3 movlw 0X13
subwf PORTD,0
btfss STATUS,Z
goto TF
movlw 0X13
return
TA movlw 0X01
movwf PORTA
movlw 0X17
subwf PORTD,0
btfss STATUS,Z
goto TB
movlw 0X17
return
TB movlw 0X1D
subwf PORTD,0
btfss STATUS,Z
goto TC
movlw 0X1D
return
TC movlw 0X1B
subwf PORTD,0
btfss STATUS,Z
goto TD
movlw 0X1B
return
TD movlw 0X1E
subwf PORTD,0
btfss STATUS,Z
goto TE
movlw 0X1E
return
TE movlw 0X0F
subwf PORTD,0
btfss STATUS,Z
goto TU
movlw 0X0F
return
TF movlw 0X0F
subwf PORTD,0
btfss STATUS,Z
goto TA
movlw 0X0F
return
TU movlw 0X00
return
;****************************************************************
;Subrutina para inicializar el puerto serie USART como transmisor
;a 9600 Bauds, MODO SINCRONO
;****************************************************************
initrans
BCF STATUS,RP1
BSF STATUS,RP0 ;banco 1
MOVLW .103 ;valor para 9600 Bauds (Fosc=4 Mhz)
MOVWF SPBRG ;configura 9600 Bauds
BSF TXSTA,CSRC ;pone en 1 el bit CRSC(modo master)
BSF TXSTA,SYNC ;pone en 1 el bit SYNC (modo síncrono)
BSF TXSTA,TXEN ;pone bit TXEN=1 (habilita transmisión)
BCF STATUS,RP0 ;regresa al banco 0
BSF RCSTA,SPEN ;pone bit SPEN=1 (habilita puerto serie)
BSF RCSTA,CREN
RETURN
;***************************************************************
;Subrutina para enviar el byte guardado en W por el puerto serie
;***************************************************************
envia BSF STATUS,RP0 ;banco 1
esp BTFSS TXSTA,TRMT ;checa si el buffer de transmisión
GOTO esp ;si está ocupado espera
BCF STATUS,RP0 ;regresa al banco 0
MOVWF TXREG ;envía dato guardado en W
RETURN
;**************************************************
RETARDOS movlw D"10"
movwf CONTD
RET movlw -D"78"
movwf TMR0
EXPLOS btfss INTCON,2
goto EXPLOS
bcf INTCON,2
decfsz CONTD,F
goto RET
goto SAL
SAL return
end
en lacual consta de un teclado que va conectado al pic y es la señal del teclado la que quiero transmitir a otro pic como esclavo. en la cual tambien tengo problemas de como hecer la recepcion de estemismo.
cualquier respuesta se las agradecere.