TODOPIC
Microcontroladores PIC => - Niple - => Mensaje iniciado por: nanosegundo en 13 de Marzo de 2006, 16:26:00
-
Hola yo quiero comunicar a 2 pics via usart, de manera que uno de los pics esté siempre esperando a que el otro le pida información y cuando este se la envie, le responda con un dato. Mi pregunta es, al poner al pic en modo recepción ¿Éste no continua con el programa hasta que le envien los datos o si no hay datos supone una recepción 0 y sihue con el programa?
Gracias
-
Hola nanosegundo, mira primero especifica que tipo de Pic vas a estar usando pues cada uno tiene sus características con respecto a la comunicación por USART.
Si usas el afamado pic16f84a el codigo lo genera a "a paso" es decir como si fuese un procedimiento y por su puesto el pic no podra haccer otra tarea mientras este ocupado recibiendo el dato.
Si usas un pic16f876a o 16f877a por decir un ejemplo estos pic"s ya traen en su interior registros especializados en usart, de tal forma que declaras una interrupcion por recibir datos, la interrupción ocurre al finalizar la recepcion. Quiere decir que mientras recibe los 8 bit"s de datos tu puedes trabajar en otra area pero al recibir el bit de stop ahi te desvia el flujo del programa a la interrupción.
-
hola a todos yo quisiera saber si alguien me puede dar un ejemplo, yo estoy tratando de hacer lo mismo y no se como empezar, estoy usando un micro como master 16f873 y como slave 16f876. desde ya gracias
-
Hola tengo un problema cuando simulo en Proteus un programa en el cual uso el modulo Usart. Yo habilito la interrupcion por recepcion y como prueba al recibir mando un mensaje diciendo "el mensaje recibido fue: "el mensaje" ", la transmision se realiza perfecto, pero sin teclear ningun mensaje el actua como si estuviese recibiendo algo, y escribe repetidamente "el mensaje recibido fue: "el mensaje" " no se porque. Asi configuro los registros
movlw .25
movwf CtteBaud
call IniUSART
call Convertir
call Mostrar
call EnableUSART
call Transmisionserial
call DisableUSART
banksel RCSTA
movlw b'10010000'
movwf RCSTA
banksel INTCON
movlw b'01000000'
movwf INTCON
banksel PIE1
movlw b'00100000'
movwf PIE1
banksel 0x00
bsf INTCON,7
.
.
.
INTERRUPCION:
btfss PIR1,ADIF
goto $+4
call Convertir
call Mostrar
bcf PIR1,ADIF
btfsc PIR1,RCIF
call Recepcion
retfie
.
.
.
Recepcion:
btfss PIR1,RCIF
goto $+4
movf RCREG,w
movwf Dato
call EnableUSART
call Menrecived
call DisableUSART
return
-
Umm!! Bueno esa parte de los registros se ve bien!!! haria falta el programa completo para revisarlo bien... Si te está mostrando ese mensaje infinitas veces, es porque estás pasando por esa instrucción mostrar todo el tiempo.... Es decir, estás entrando infinitas veces en la función enviar a través del modulo usart!!! Revisa bien tu programa, y verifica que luego de que envie por primera vez tu mensaje, pues de allí se vaya a otra función que se yo, manda a dormir al micro, chequea un puerto o algún otra cosa!!!
Pero lo que estoy viendo es eso, que en vez de irte a otro lado luego de mandar el mensaje, estás devolviendo el programa a esa función de enviar y allí se queda hasta el infinito!!
Atte: Enigma... La llanerita de Guayana :D