TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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ò ?
-
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!
-
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
-
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
-
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!
-
Me refiero a la transmisión de los datos ... no lo hace por soft?
Saludos
-
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:
-
Porque de hacerlo por hard, se vería como cambia el bit correspondiente a la interrupción .... no es asi?
Saludos
-
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.
.................... #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
-
;-)
Es bien!!!
Saludos
-
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.