Hola, quisiera pedirles ayuda con la USART. Me he configurado mi USART a 9600 baudios, y lo tengo configurado para que lo que le entre por RX, lo vuelva a enviar. Pero no me funciona la rutina. La rutina es la que sigue, le veis algun fallo?, gracias de antemano:
LIST P=16F73
include "P16F73.inc"
W_save res 1
CounterA EQU 0x20
CounterB EQU 0x21
CounterC EQU 0x22
Status_save res 1 ;
PCLATH_save res 1
FSR_save res 1
outbuffer res 8 ;
rx_buffer res 7 ; UART
rx_count res 1 ; UART
recbyte res 1 ; byte reciido
ORG 0x00 ;Inicio en el Vector de Reset
goto main ;Va a la primera instruccion del
;programa
;<<<<<<------------------- VECTOR DE INTERRUPCION -------------------->>>>>>>
ORG 0x04 ;Vector de interrupcion
bcf INTCON,GIE
InterruptServiceVector
movwf W_save ;
movf STATUS,W
clrf STATUS ;
movwf Status_save ;
movf PCLATH,w
movwf PCLATH_save ;
movf FSR,w
movwf FSR_save ;
pagesel USART_rx
btfsc PIR1,RCIF
call USART_rx
nop
EndISR
bsf INTCON,GIE
clrf STATUS ;
movf FSR_save,w ;
movwf FSR
movf PCLATH_save,w ;
movwf PCLATH
movf Status_save,w ;
movwf STATUS
swapf W_save,f ;
swapf W_save,w
retfie
USART_rx
banksel RCREG
movf RCREG,w ;
banksel recbyte
movwf recbyte ;
return
; ******************************************************************
;
;
; ******************************************************************
main
movlw .30 ; delay 16 uS to wait for USB to reset
movwf W_save ; SIE before initializing registers
decfsz W_save,f ; W_save is merely a convienient register
goto $-1 ; to use for the delay counter.
movlw 0x00
movwf recbyte
BANKSEL OPTION_REG
bsf OPTION_REG,NOT_RBPU ; turn off pullups
bsf STATUS,RP0
clrf TRISB
bcf STATUS,RP0
bsf PORTB,4 ;cs=0
bcf PORTB,1
bsf PORTB,2 ;rx
; 9600 baud 8 n 1
BANKSEL TXSTA
movlw B"00000000"
movwf TXSTA
movlw .25 ;**** baud rate **** 9600 ***
BANKSEL SPBRG
movwf SPBRG
BANKSEL RCSTA
movlw B"10010000"
movwf RCSTA
BANKSEL PIE1
bcf PIE1,TXIE
bsf PIE1,RCIE
BANKSEL TXSTA
bsf TXSTA,TXEN
BANKSEL TXREG
bsf RCSTA,CREN
BANKSEL rx_count
clrf rx_count
call PDelay
call PDelay
call PDelay
call PDelay
movlw .49
movwf recbyte
LoopForData
bcf PORTB,1
bsf PORTB,2 ;rx
call PDelay
bsf PORTB,1
bcf PORTB,2 ;tx
movf recbyte,w
call PDelay
call tx_data
goto LoopForData ; huj
tx_data
BANKSEL PIR1
btfss PIR1,TXIF ; espera a TX termine
goto $-1
BANKSEL TXREG
movwf TXREG ; enviar caracter
return
PDelay movlw D"6"
movwf CounterC
movlw D"24"
movwf CounterB
movlw D"168"
movwf CounterA
loop decfsz CounterA,1
goto loop
decfsz CounterB,1
goto loop
decfsz CounterC,1
goto loop
return
end