Problemas con el buffer de la USART del PIC 16f876A

Hola alguien me pordria ayudar es de urgencia!! Tengo problemas con el buffer de la usart del pic 16f876A, no quiero que el buffer me almacene datos, como hago para no tenerlo en cuenta o desabilitarlo. Estoy programando en C y no he encontrado ninguna funcion o algo para solucionar este inconveniente.

Gracias

MARIO
 
pues hermanito que le comento, llevo un año viviendo y durmiendo con estos microcontroladores, no se para que quiere deshabilitar el buffer, para mi no tiene sentido, pues para saber que recibio debes leerlo, pero bueno, alla ud, y ese es el problema, que cuando se trabaja con modulos, los modulos son por hardware, por lo tanto ellos hacen todo por uno, y si eso es así, no tiene sentido recibir mensajes sin guardarlos, no he encontrado dicha forma de hacerlo en ensamblador, pues tiene un limite de tres mensajes si no estoy mal, es decir, tres bytes, y luego vienen los errores de sobrecarga, overflow y todo eso, por eso le digo, !NO HAY MODO DE HACERLO!, le aconsejo que lo haga por inetrrupciones, que cada vez que reciba un nuevo byte, borre el buffer, sin tener en cuenta lo que hay en el, eso es lo que quiere no?, en todo caso, no se puede en ensamblador, mucho menos en c, y creame, llevo mucho estudiando el c de microcontroladores, que yo prefiero el ensamblador, pero el c es mas lindo, cualquier cosa escribame para discutirlo, si tiene alguna duda.
 
mr_coral dijo:
Hola alguien me pordria ayudar es de urgencia!! Tengo problemas con el buffer de la usart del pic 16f876A, no quiero que el buffer me almacene datos, como hago para no tenerlo en cuenta o desabilitarlo. Estoy programando en C y no he encontrado ninguna funcion o algo para solucionar este inconveniente.

Gracias

MARIO

Si deshabilitas el bit CREN del registro RCSTA, con eso deshabilitas la recepción y asunto solucionado.

No se que C usas, pero de seguro puedes acceder bit a bit y borrar el bit en cuestión

En ensamblador sería

Código:
        bcf    RCSTA,CREN

Saludos
 
leo_programer dijo:
pues hermanito que le comento, llevo un año viviendo y durmiendo con estos microcontroladores, no se para que quiere deshabilitar el buffer, para mi no tiene sentido, pues para saber que recibio debes leerlo, pero bueno, alla ud, y ese es el problema, que cuando se trabaja con modulos, los modulos son por hardware, por lo tanto ellos hacen todo por uno, y si eso es así, no tiene sentido recibir mensajes sin guardarlos, no he encontrado dicha forma de hacerlo en ensamblador, pues tiene un limite de tres mensajes si no estoy mal, es decir, tres bytes, y luego vienen los errores de sobrecarga, overflow y todo eso, por eso le digo, !NO HAY MODO DE HACERLO!, le aconsejo que lo haga por inetrrupciones, que cada vez que reciba un nuevo byte, borre el buffer, sin tener en cuenta lo que hay en el, eso es lo que quiere no?, en todo caso, no se puede en ensamblador, mucho menos en c, y creame, llevo mucho estudiando el c de microcontroladores, que yo prefiero el ensamblador, pero el c es mas lindo, cualquier cosa escribame para discutirlo, si tiene alguna duda.

leo_programmer, si hay forma, y es la que puse. Si apagas un módulo simplemente no se llena su buffer, no recibe nada... lo 'apagas'.

Esto es lo que se hace también cuando quieres ahorrar consumo, uno va apagando módulos que no va a usar.

Saludos
 
a ver maunix, es simple, lo apagas, no recibes, ni siquiera se da cuenta de que alguien le esta enviando algo, como se lo dije a mr_coral, para que carajos quiere eso, si no va a tener en cuenta lo que recibe?, el no pregunto, "hay alguna forma de no recibir datos datos usando el usart?", por que cualquiera que sepa manejar este modulo lo sabe, el pregunto: "como hago para no tenerlo en cuenta o desabilitarlo...", es diferente la pregunta, pues solo se refirio al buffer, si el especificara que su pic solo sera transmisor las veces que quiera sin importarle nada de afuera, listo, es valida su respuesta y la mia será siendo valida para la pregunta especifica, yo lo tomo asi...
 
leo_programer dijo:
a ver maunix, es simple, lo apagas, no recibes, ni siquiera se da cuenta de que alguien le esta enviando algo, como se lo dije a mr_coral, para que carajos quiere eso, si no va a tener en cuenta lo que recibe?, el no pregunto, "hay alguna forma de no recibir datos datos usando el usart?", por que cualquiera que sepa manejar este modulo lo sabe, el pregunto: "como hago para no tenerlo en cuenta o desabilitarlo...", es diferente la pregunta, pues solo se refirio al buffer, si el especificara que su pic solo sera transmisor las veces que quiera sin importarle nada de afuera, listo, es valida su respuesta y la mia será siendo valida para la pregunta especifica, yo lo tomo asi...

leo, no te lo tomes a mal, pero si el dice que no lo quiere tener en cuenta entonces es como tu dices, ahora para deshabilitarlo se hace como yo dije.

El punto es que creo que tu respuesta fue algo de "mala manera" y no me parece que sea la forma en que nuestro amigo quería preguntar.

Si no quieres responderle, no le respondas pero ser agresivo no es la solución. Yo también antes trataba con mayor dureza a quienes preguntaban así, luego entendí que no todos somos iguales y no por eso yo debía ser tan duro.

Saludos
 
no hay que contestar de mala gana las inquietudes de los demas ; ustedes fueron pricipientes tambien y tal ves fueron mas listos pero no les gustaria si eso pasara con usted o ustedes .

la verdad que cuando yo se lo que otro pregunta por muy trivial que sea se responde con enteresa y coordialmente,y con amabilidad .


disculpas por las palabras.
maunix.
leo_programer.



saludos.
 
ben99 dijo:
no hay que contestar de mala gana las inquietudes de los demas ; ustedes fueron pricipientes tambien y tal ves fueron mas listos pero no les gustaria si eso pasara con usted o ustedes .

la verdad que cuando yo se lo que otro pregunta por muy trivial que sea se responde con enteresa y coordialmente,y con amabilidad .


disculpas por las palabras.
maunix.
leo_programer.



saludos.

Clarisimo mensaje. Tratemos de no utilizar lenguaje ofencivo, hay que aprender a ser tolerante en la vida, porque estos ojos que ahora no ven lo que uno ve, serán los que verán cuando uno no pueda ver.

Saludos.
 
ben99 y MaMu, gracias por sus palabras, opino como uds, simplemente estaba tratando de explicarle a leo que no sea tan duro con mr_coral.

A veces también cuesta expresarse con la palabra escrita, uno quiere decir algo y suena "agresivo" o "fuerte".

La paciencia es lo primordial, todos empezamos siempre con el LED apagando y encediéndose :D :D :D
 
de acuerdo, pido disculpas a los que me mal interpretaron, solo queria responder a la pregunta como tal, tomare los consejos, espero no se torne mal ambiente, nuevamente pido disculpas a todos, cuidensen...
 
leo_programer dijo:
de acuerdo, pido disculpas a los que me mal interpretaron, solo queria responder a la pregunta como tal, tomare los consejos, espero no se torne mal ambiente, nuevamente pido disculpas a todos, cuidensen...

leo, te felicito, has tomado una actitud muy buena y te ha pasado lo mismo que a mi, a veces uno escribe de una forma que choca a los demás...

Un problema en ocasiones se puede resolver de varias formas, y por eso es que hay que estar abierto a lo que otros expongan.

Me ha pasado muchas veces y por eso es que te lo dije, que tu texto sonó algo fuerte, nada más. De seguro nuestro amigo mr_coral ya habrá comprendido cómo resolver su problema.
 
ya, k weno k todos sean amigos :) :) :) :) ojala los politicos se pudieran poner de acurdo en 5 post :) :) :)

y k paso con el tema??????????????

creo k lo mas facil si el amigo no kiere recibir data pork le molesta la interrupcion y le complik desactivarla, mejor es k no conecte el cable al RX del micro...............................


PD: sigo intentando lo de la emulacion del I2C...ya viene ya viene :)

salu2 :)

chaos :)
 
hola necesito ayuda tengo el pic 16f876a. y ya tengo mi programa de control de motores es muy basico pero no se como decirle al pic que reciba datos via serial de un programa como hyperterminal o visual basic
ya me desespere porque leo y leo varias cosas pero no les entiendo si alguien me pudiera ayudar lo agradeceria bastante
el programa esta en ensamblador
 
si si lo hago y me dice que estan enlazados pero en hyperterminal lo configuro y todo pero no me deja escribir nada y en proteus el compin prende un foquito pero no realiza nada siento que esta mal la programacion. quien me podria ayudar. como veran mi codigo es muy basico solo quiero que cuando envie un dato de 1 en hexadecimal prenda un led y cuando mande un 2 prenda el otro y con un 3 apage todo.
gracias

__CONFIG _CP_OFF &_WDT_OFF &_LVP_OFF & _XT_OSC & _PWRTE_OFF
list p=16f876a
#include<p16f876a.inc>
ADCON1 EQU 0x9F
dato1 equ 0x20
dato2 equ 0x021
dato3 equ 0x22
dato_serial equ 0x023

ORG 0X00
BSF STATUS,RP0

movlw b'000000'
movwf TRISA

movlw b'00000000'
movwf TRISB
movlw 0X06
movwf ADCON1
BCF STATUS,RP0

; activacion del modo usart
;Baud Rate = 9600, Sin Paridad, 1 Bit parada

movlw 0x19 ; 0x19=9600 bps (0x0C=19200 bps)
movwf SPBRG

movlw b'00100100' ;
movwf TXSTA ; habilita la transmisión Async

bcf STATUS,RP0 ; RAM PAGE 0

movlw b'10010000' ; habilita de recepción Async
movwf RCSTA

;*******************************************************************
; VARIABLES
;*****************************************************************

movlw 0x01
movwf dato1

movlw 0x02
movwf dato2

movlw 0x03
movwf dato3

CLRF PORTB
CLRF PORTA
CLRF PORTC
;*******************************************************************
; ASEGURAR QUE EL DATO ESTA COMPLETO.
;*******************************************************************

loop
clrw
btfss PIR1,RCIF ; (5) se fija si hay dato RS232
goto loop ; no, no llegó
call recibeRS232 ; sí, hay
movwf dato_serial ; guarda dato (para uso de cualquier rutina)
;*******************************************************************
; RECIBE CARACTER SERIE - RS232 - DESDE LA PC
;*******************************************************************

recibeRS232
movf RCREG,W ; guarda dato recibido en acumulador
return



inicio
movf dato_serial,W
SUBWF dato1,w
BTFSS STATUS,Z
GOTO etiqueta2
GOTO prende
etiqueta2:
movf dato_serial,W
SUBWF dato1,w
BTFSS STATUS,Z
GOTO etiqueta3
GOTO prende2
etiqueta3:
movf dato_serial,W
SUBWF dato1,w
BTFSS STATUS,Z
GOTO etiqueta2
GOTO apaga

prende: movlw b'0000001'
movwf PORTB
clrf PORTB
goto inicio
prende2: movlw b'00000010'
movwf PORTB
clrf PORTB
goto inicio
apaga:
movlw b'00000000'
movwf PORTB
clrf PORTB
goto inicio

Aqui mando una imagen de los programas trabajando y el codigo del pic en block de notas no se donde esta mi error. gracias
 

Adjuntos

  • programas.png
    programas.png
    69.9 KB · Visitas: 11
  • programa en block de notas.txt
    2.4 KB · Visitas: 10
Última edición:
Atrás
Arriba