TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: nbc en 25 de Febrero de 2010, 00:31:58

Título: interrupcion tbe
Publicado por: nbc en 25 de Febrero de 2010, 00:31:58
hola , estoy trabajando con un 18f8720 en un proyecto multitarea , en el cual necesito transmitir un mensaje a 1200 baudios ( por limitacion de la radio ) sin que me interrumpa otras tareas , por lo que quiero usar la TBE para saber cuando se transmitio un byte , mientras el micro atiende otra cosa , y seguir con la transmision  si no tiene otra tarea , ya que transmitir todo de una insumiria algunos segundos. Mando el primer byte por software,  pero nunca se produce la int. TBE , he leido directamente el registro pero nunca se pone en 1 , a pesar de haber transmitido el primer byte , a alguien le pasò ? 
Título: Re: interrupcion tbe
Publicado por: Suky en 25 de Febrero de 2010, 01:29:20
Me dejaste perdido con eso de TBE!  :mrgreen: Te aseguraste de habilitar las interrupciones por periféricos, local y global? Muéstranos el código para detectar un posible inconveniente  ;-) Habría que mirar el datasheet para determinar si tiene una sola opción de interrupción por transmisión o tiene algunas opciones que haya que configurar.


Saludos!
Título: Re: interrupcion tbe
Publicado por: RedPic en 25 de Febrero de 2010, 10:47:07
A mi me ha pasado igual, llevo toda una vida trasteando con las USART de los PIC's y nunca usé la #INT_TBE RS232 transmit buffer empty Igual será porque no me ha hecho falta.  :D

 
Título: Re: interrupcion tbe
Publicado por: MLO__ en 25 de Febrero de 2010, 12:35:23
Hola.

No se supone que el #use rs_232 hace la transmisión por software? Ese es el problema de no tener acceso al código fuente  :(

Saludos
Título: Re: interrupcion tbe
Publicado por: Suky en 25 de Febrero de 2010, 14:21:18
Hola.

No se supone que el #use rs_232 hace la transmisión por software? Ese es el problema de no tener acceso al código fuente  :(

Saludos
No, solo cuando se hace force_sw, sino emplea el módulo. Sino no tendrías manera de utilizar interrupción por recepción de datos, dado que esta se ejecuta al recibir el bit Stop.


Saludos!
Título: Re: interrupcion tbe
Publicado por: MLO__ en 25 de Febrero de 2010, 21:15:29
Me refiero a la transmisión de los datos ... no lo hace por soft?

Saludos
Título: Re: interrupcion tbe
Publicado por: Suky en 25 de Febrero de 2010, 21:21:43
Me refiero a la transmisión de los datos ... no lo hace por soft?

Saludos

Tampoco, usa el módulo. Porque lo haría por soft  :huh:
Título: Re: interrupcion tbe
Publicado por: MLO__ en 25 de Febrero de 2010, 21:23:39
Porque de hacerlo por hard, se vería como cambia el bit correspondiente a la interrupción .... no es asi?

Saludos
Título: Re: interrupcion tbe
Publicado por: Suky en 25 de Febrero de 2010, 21:36:01
No hay duda, viendo el assembler generado, vemos que espera a que termine de enviar un dato testeando el bit TXIF y luego carga el dato a TXREG.

Código: [Seleccionar]
.................... #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
*
0006E:  BTFSS  F9E.4
00070:  BRA    006E
00072:  MOVWF  FAD
00074:  GOTO   023A (RETURN)

....................    putc(0xAA);
00236:  MOVLW  AA
00238:  BRA    006E

Título: Re: interrupcion tbe
Publicado por: MLO__ en 26 de Febrero de 2010, 12:14:54
 ;-)

Es bien!!!

Saludos
Título: Re: interrupcion tbe
Publicado por: bmfranky en 01 de Marzo de 2010, 05:16:14
Hola chicos, la transmisión se hace por soft siempre ,si configuramos pins distintos a los que usa el hardware, ¿sera este el caso?,  si es así aunque parezca tonto jamas generara la interrupción.
Si no es asi, comprueba que este bien configurada , como dice suky, pues el CCS tiene tantos bugs que este podría ser uno de ellos.