hola buena tarde he estado trabajando con la uart del pic16f876, necesito recibir datos, lo estba haciendo con l siguiente rutina y todo bien:
RECIBE ;///////////// RUTINA DE RECEPCION SERIAL
BANKSEL PORTA
CLRF RCREG
CLRF RCREG
BSF RCSTA,CREN
BTFSS PIR1,RCIF
GOTO $-1
MOVF RCREG,W
BCF RCSTA,CREN
BANKSEL TRISA
RETURN
el problema ahora es que los datos a recibir son variables, es decir en ocasiones recibo 10 datos y en ocasiones 20 u otra cantidad, enonces necesito saber cuando ya no reciba datos para poder retornar de la rutina para recibir todos estos datos, implementé la siguiente rutina para recibir pero no me funciona, utilizo el tmr0, si se desborda despues del tiempo en que tarda un dato en ser recibido retorna con .10 que es una literal de control que tengo, de lo contrario recibe el dato y retorna con el en w. pero no me funciona, simplemente no hace nada.
RECIBE ;////////// RUTINA DE RECEPCION SERIAL
BANKSEL OPTION_REG
MOVLW B'00000111'
MOVWF OPTION_REG
BANKSEL PORTA
BCF INTCON,T0IF
CLRF TMR0
CLRF RCREG
CLRF RCREG
BANKSEL RCSTA
BSF RCSTA,CREN
LOOP_REC
BTFSS PIR1,RCIF
GOTO COMP_TMR0
GOTO FIN_REC
COMP_TMR0
BTFSS INTCON,T0IF
GOTO LOOP_REC
BCF INTCON,T0IF
BCF RCSTA,CREN
BANKSEL TRISA
RETLW .10
FIN_REC
BCF INTCON,T0IF
MOVF RCREG,W
BCF RCSTA,CREN
BANKSEL TRISA
RETURN
ya lo he simulado en mplab y al parecer corre todo bien.
algun tip que me pueda ayudar? gracias de antemano. saludos
RECIBE ;///////////// RUTINA DE RECEPCION SERIAL
BANKSEL PORTA
CLRF RCREG
CLRF RCREG
BSF RCSTA,CREN
BTFSS PIR1,RCIF
GOTO $-1
MOVF RCREG,W
BCF RCSTA,CREN
BANKSEL TRISA
RETURN
el problema ahora es que los datos a recibir son variables, es decir en ocasiones recibo 10 datos y en ocasiones 20 u otra cantidad, enonces necesito saber cuando ya no reciba datos para poder retornar de la rutina para recibir todos estos datos, implementé la siguiente rutina para recibir pero no me funciona, utilizo el tmr0, si se desborda despues del tiempo en que tarda un dato en ser recibido retorna con .10 que es una literal de control que tengo, de lo contrario recibe el dato y retorna con el en w. pero no me funciona, simplemente no hace nada.
RECIBE ;////////// RUTINA DE RECEPCION SERIAL
BANKSEL OPTION_REG
MOVLW B'00000111'
MOVWF OPTION_REG
BANKSEL PORTA
BCF INTCON,T0IF
CLRF TMR0
CLRF RCREG
CLRF RCREG
BANKSEL RCSTA
BSF RCSTA,CREN
LOOP_REC
BTFSS PIR1,RCIF
GOTO COMP_TMR0
GOTO FIN_REC
COMP_TMR0
BTFSS INTCON,T0IF
GOTO LOOP_REC
BCF INTCON,T0IF
BCF RCSTA,CREN
BANKSEL TRISA
RETLW .10
FIN_REC
BCF INTCON,T0IF
MOVF RCREG,W
BCF RCSTA,CREN
BANKSEL TRISA
RETURN
ya lo he simulado en mplab y al parecer corre todo bien.
algun tip que me pueda ayudar? gracias de antemano. saludos
Última edición: