# PIC16F628A y comunicación RS-232 (Para simular Bluetooth)



## yamilongiano (Mar 26, 2014)

Hola a todos he estado buscando por aqui  en el buscador pero quizas no encuentro las palabras adecuadas he encontrado de otros lenguajes pero no de C.

bueno les cuento puedo mandar mensajes del pic16f628a al hiperterminal simulado en proteus(usando  #use rs232).
(la idea es simular la coneccion de bluetooth)


la verdad no creo que sea tan complicado. pero no encuentro las variables , ni la sintaxis.

la verdad vengo de ensamblador y me estoy pasando al C y por eso me a costado un poco.

bueno la idea es que yo pueda mandar un letra o un numero. y cuando el pic la resiva este me active una de las salidas del microcontrolador(encender un led). 

eso seria todo. he leido por ahi que el bluetooth se puede simular perfectamente con los protocolos y configuracion del RS232 , asi que no creo que tenga problemas despues poniendole un RN-42 u otro similar.

por favor si me cierran el post al menos orientenme algo de ante manos gracias.


----------



## ByAxel (Mar 27, 2014)

Hola.

No mencionas con que compilador pero al usar #use rs232, supongo que es el CCS.
Se más específico en la busqueda como CCS puerto serie, igual con bluetooth... pasa que el compilador CCS tiene un C algo modificado por lo que no es compatible con otros.

Ahora, puedes buscar (RS232 I/O) en el archivo de ayuda del CCS, ahí se muestran las funciones más usadas con ese puerto de comunicación; ya sea para enviar o recibir un dato o cartacter como cadenas de datos y de acuerdo a la necesidad el código puede tener cierta complejidad.

Saludos.


----------



## yamilongiano (Mar 27, 2014)

ByAxel dijo:


> Hola.
> 
> No mencionas con que compilador pero al usar #use rs232, supongo que es el CCS.
> Se más específico en la busqueda como CCS puerto serie, igual con bluetooth... pasa que el compilador CCS tiene un C algo modificado por lo que no es compatible con otros.
> ...



hola gracias por tu tiempo. de verdad no sabia que habia dos tipos de lenguajes de C en microcontroladores.

estoy ocupando este lenguaje y este compilador ojala me puedan orientar un poco mas.



PCWHD


----------



## ByAxel (Mar 27, 2014)

Al menos la mayoria de compiladores para PIC se basan en el estandar ANSI C (sintaxis) pero cada uno tiene ciertas modificaciones por lo que no son muy compatibles unos con otros.
El CCS se distingue por su propio modo de escritura y mayor cantidad de funciones o librerias... ésto tiene pro y contras pero depende de la complejidad de lo que se quiere programar y otros. Buena herramienta para el aprendíz.

Revisa el Manual de usuario del compilador PCW de CCS, es lo que hay en español.

Respecto al tema, para usar el puerto serie basta con:

- Declarar #USE RS232... Si los pines usados corresponden al USART por hardware (PIN_B1 y PIN_B2 en el 16F628), la comunicación se maneja por hardware de lo contrario es por software (ambos automático para el usuario).
- El envío de datos se puede hacer en cualquier línea dentro de main u otra funsion.. se utiliza putc(), putch(), printf()... tienen algunas diferencias.


```
...
putc(0);  // Dato del tipo numérico
putc('0'); // Dato o caracter ASCII.
printf("Hola Mundo"); // Envio de un cadena en string. Con printf() se puede modificar muchas cosas... revisa el Help del CCS.
...
```

- La recepción de datos es un caracter a la vez y se puede hacer manualmente usando las funciones kbhit() que verifica si hay un dato y getc() para obtener el dato o usando interrupción por recepción, éste último método solo funciona cuando el PIC utiliza el USART  por hardware.


```
// Lectura simple 
char dato:;
...
if(kbhit()){  // Revisa si hay un dato en el buffer de recepción
   dato = getc(); // Lee el dato
   if(dato == '1')  // Compara
      output_high(PIN_B0); // y ejecuta una acción en respuesta
   else
      output_low(PIN_B0);
}
```

Con esos detalles ya puedes empezar practicando y luego simular bluetooth... practica!!.
Saludos.


----------



## yamilongiano (Mar 27, 2014)

ByAxel dijo:


> Al menos la mayoria de compiladores para PIC se basan en el estandar ANSI C (sintaxis) pero cada uno tiene ciertas modificaciones por lo que no son muy compatibles unos con otros.
> El CCS se distingue por su propio modo de escritura y mayor cantidad de funciones o librerias... ésto tiene pro y contras pero depende de la complejidad de lo que se quiere programar y otros. Buena herramienta para el aprendíz.
> 
> Revisa el Manual de usuario del compilador PCW de CCS, es lo que hay en español.
> ...



te pasaste lo estoy leyendo el manual en español me da una idea de las intrucciones ahora a comenzar a juntar instrsucciones. el ultimo ejemplo con mi experiencia en programacion que igual es poca , es como que me hablara y me dijiera que pasa en cada momento cuando lee el dato cuando lo compara etc... ahora vere como puedo enviar el dato por hyperterminal al PIC. pero muchas gracias por la ayuda. si tengo otra consulta ojala tengan tiempo muchas gracias por todo. ire poniendo mi codigo y mi proteus para que vean que estoy haciendo.


----------



## ByAxel (Mar 27, 2014)

Me olvide, te puede ser de ayuda utilizar la opción PIC Wizard al crear un proyecto, éste sirve para configurar el hardware del PIC. 
El manual no se de que año es pero sirve, actualmente el CCS tiene algunas cosas más.

Saludos


----------



## yamilongiano (Mar 27, 2014)

ByAxel dijo:


> Me olvide, te puede ser de ayuda utilizar la opción PIC Wizard al crear un proyecto, éste sirve para configurar el hardware del PIC.
> El manual no se de que año es pero sirve, actualmente el CCS tiene algunas cosas más.
> 
> Saludos



muchas gracias con tu ayuda y leer un poco logre mi objetivo.

ahora no se si sera lo mismo hacer este proyecto en fisico con el modulo RN-42 que encontre en el mercado de mi pais. con el hyperterminal funciona perfectamente.


```
#include <16f628a.h>
#use delay (clock = 4M)
#use RS232 (baud = 9600, bits = 8, parity = N, xmit = pin_b2, rcv = pin_b1)

char dato;

void main()
{
      printf ("hola\r");
      delay_ms(1000);
      printf ("teclea la letra  a para encender y b para apagar el led");
      
      while(true)
inicio: 
      {
      
       dato = getc(); 
   
       if(dato == 'a')  // Compara
          output_high(PIN_B5); 
          
       if(dato == 'b')  // Compara
          output_low(PIN_B5); 
          
          goto inicio;
       }
}
```

gracias ByAxel.

este es mi codigo quizas  no es tan bueno pero es mi primero en C lo dejo esta funcionando. ahora solo me quedan dudas.

¿supuestamente el bluethoot es casi lo mismo que el rs232  solo que en forma inalambrica, asi que debo conectarlos a los pines Rx t Tx de mi pic16f628a. (respetar los 3.7V)?.


----------



## ByAxel (Mar 28, 2014)

yamilongiano dijo:


> ¿supuestamente el bluethoot es casi lo mismo que el rs232  solo que en forma inalambrica, asi que debo conectarlos a los pines Rx t Tx de mi pic16f628a. (respetar los 3.7V)?.



El módulo se encarga de todo respecto al protocolo/s que usa bluethoot, el único trabajo del PIC va a ser enviar/recivir datos utilizando el rs232 (su módulo USART).
Son necesarios 3 hilos (RX, TX y GND); RX del PIC al TX del módulo y TX del PIC al RX del módulo.

También es mejor que repetes el voltaje del módulo que son 3.3V (3.6V max. según la hoja de datos), el PIC igual a 3.3V ya que a 4Mhz no hay problema (ver especificaciones electricas en la hoja de datos).
Si no cumple en la práctica ya sería necesario 2 voltajes (5V para el PIC y 3.3 para el módulo) y adaptar de algún modo los niveles de tensión (con resistencias por ejemplo) en la línea de TX del PIC.

En el código, solo un detalle...
while(...) { ... } es un bucle y repite siempre (cuando la condición es verdadera) lo que esté dentro de sus llaves, no es necesario la instrucción GoTo que por cierto no es muy usado en C (sirve pero no es recomendable), C es programación estructurada... intenta con el tiempo no depender de Goto.

Saludos.


----------



## yamilongiano (Mar 28, 2014)

hola de nuevo el programa en proteus funciona correctamente pero cuando trato de escribirlo en el pic sale un mensaje rojo que dice fail. nunca me habia salido eso.

sera algo del lenguaje C o algo que no programe con anterioridad.

read...ok

verify...ok 

write....fail.



¿alguna idea?


----------



## ByAxel (Mar 28, 2014)

mmm en el código falta la configuración de fuses... por defecto al parecer se ha establecido la memoria protegida... ahí en texto rojo "All Protect", en el texto sobre el aviso "Configuration" da clic, aparece una ventana para configurar manualmente.

Pero mejor desde el CCS #FUSES , probando que permita la escritura... primero sin código o borrando, luego con el código... revisa que no aparezca "All Protect".


```
#FUSES NOWDT
#FUSES NOMCLR
#FUSES NOBROWNOUT
#FUSES NOLVP
#FUSES NOPROTECT
```


----------



## yamilongiano (Mar 28, 2014)

buenas, he logrado escribir en el microcontrolador sin ningun  problema, el problema era en los ticket de configuracion.


pero con respecto a los fuses tambien tenias razon ahora estan configurados de mejor manera.

agreguo fotos por si alguien llega a tener el mismo problema que yo.




el problema es que tenia el VDD pickit 3 con ticket no debe tener ningun ticket en esa parte.

program memory y eeprom data deben estar marcados.


----------



## yamilongiano (Mar 30, 2014)

Hola he vuelto con mas informacion... ahora la simulacion a funcionado sin problemas.

pero en lo real he tenido un par de dramas. de hecho un dramon... no funciona el pic.

no se en que he fallado pero explico para ver si alguien me puede ayudar.

primero estoy usando de fuente el pickit 3 a 3.3VDC

Led naranja   (lo use para poner otro pic con otro programa para verificar conecciones)
led rojo         (el pic esta funcionando, para saber si esta vivo )
led verde       (para saber si el pickit 3 esta entregando energia)
led amarillo    (es el comandado atravez de bluetooth)

 

bueno expongo el codigo que tengo...


```
#include <16f628a.h>
#use delay (clock = 4M)
#use RS232 (baud = 9600, bits = 8, parity = N, xmit = pin_b2, rcv = pin_b1)

#FUSES NOWDT
#FUSES NOMCLR
#FUSES NOBROWNOUT
#FUSES NOLVP
#FUSES NOPROTECT

char dato;

void main()
{     
      output_high(PIN_A1);
      printf ("sistema encendido\r");
      delay_ms(1000);
      printf ("teclea la letra a para encender y letra b para apagar\r");
      
      
      while(true)
 
      {
      
       dato = getc(); 
   
       if(dato == 'a')  
         { output_high(PIN_B5);
          
          printf ("\rLuz Encendida\r");
       
         }       
       if(dato == 'b') 
          { output_low(PIN_B5);  
          
            printf ("\rLuz Apagada\r"); 
          
          }
       }
}
```

lo simulo en proteus...



funciona perfectamente enviando los datos por hyperterminal. y el led rojo prende para avisar de que esta activo.



lo escribo en el pic16f628a

luego al protoboard.



pruebo el circuito funcione correctamente con prender un led simple(funciona bien)use otro pic pero era para ver si el coneccionado estava bien.

una duda no pude hacerlo correr con el cristal interno de 4 M no se por que, lo he visto trabajar sin cristal y no se que me falta en la programacion.

bueno ahora hago el circuito al que le estoy poniendo corazon.





pero por alguna razon este programa no arranca. ni siquiera el led rojo prende y no se por que si en el proteus funciona perfectamente. al principio creo que tenia problemas con el CLR
pero no fue asi.

¿quizas me falta declarar algunas cosas que de verdad ignoro...?

ire a descanzar ya son las 2 AM ojala alguien tenga una idea. gracias por su tiempo.


----------



## ByAxel (Mar 30, 2014)

Hola.
Ya entrando al tema del módulo, no basta con enviar datos... es necesario enviar algunos comandos AT para su configuración... revisa aquí... es un tema de Neoteo pero también hay info en la web como en Microchip.

Con respecto al oscilador interno... en necesario cambiar en los fuses el tipo de oscilador por #FUSES INTRC_IO, también indicar en #use delay(internal=4MHz) y dentro de main setup_oscillator(OSC_4MHZ); ver el archivo 16F628A.h para más de detalles.

Una aplicación que te puede ayudar es el ( virtual serial port driver ), crea COM virtual... y puedes usarlo para ver como se comporta la simulación ( Proteus, requiere el componente COMPIM ) con el terminal de la PC por ejemplo... así descartar el PIC y centrarte en la configuración del módulo.

PD: Practica con recepción de cadenas de datos ( string ) es posible que que lo necesites, incluye la recepción por interrupción.

Saludos.


----------



## yamilongiano (Mar 30, 2014)

ByAxel dijo:


> Hola.
> Ya entrando al tema del módulo, no basta con enviar datos... es necesario enviar algunos comandos AT para su configuración... revisa aquí... es un tema de Neoteo pero también hay info en la web como en Microchip.
> 
> Con respecto al oscilador interno... en necesario cambiar en los fuses el tipo de oscilador por #FUSES INTRC_IO, también indicar en #use delay(internal=4MHz) y dentro de main setup_oscillator(OSC_4MHZ); ver el archivo 16F628A.h para más de detalles.
> ...



hola, pero la duda es, el pic no deberia prender el led rojo por lo menos, por que cuando inicia deberia almenos encender el diodo piloto o no ?



> void main()
> {
> output_high(PIN_A1); (deberia encender de todos modos)
> printf ("sistema encendido\r");
> ...



o si no hay comunicacion  por RX y TX tampoco comenzara el progarama interno del pic?.

por que la primera instruccion cuando energice es que prenda el led avisando que el programa esta corriendo ?.


----------



## Ardogan (Mar 31, 2014)

El led no estará conectado al revés no?.
Verificado eso, si no enciende el led es porque no ejecuta código -> le falta alimentación o señal de reloj.
Verifica si la alimentación está bien, pero con el pic funcionando solo, sin estar conectado al módulo RN42. Si solo no funciona, proba subiendo la tensión de alimentación a +5V (la hoja de datos dice que debería funcionar desde 3.0V, pero nunca se sabe).
A lo mejor el pickit3 no puede dar suficiente corriente para hacer funcionar al pic+RN42 + leds. Según veo en la guía de usuario, puede dar 30 mA, el RN42 puede consumir hasta 40 mA, leds supongamos 10 mA cada uno... ya estamos bien arriba de lo que puede suministrar el pickit3.
Medí con el circuito actual la tensión de alimentación con un tester, si ese es el problema la tensión de alimentación debería estar bien debajo de 3V.


----------



## yamilongiano (Mar 31, 2014)

Ardogan dijo:


> El led no estará conectado al revés no?.
> Verificado eso, si no enciende el led es porque no ejecuta código -> le falta alimentación o señal de reloj.
> Verifica si la alimentación está bien, pero con el pic funcionando solo, sin estar conectado al módulo RN42. Si solo no funciona, proba subiendo la tensión de alimentación a +5V (la hoja de datos dice que debería funcionar desde 3.0V, pero nunca se sabe).
> A lo mejor el pickit3 no puede dar suficiente corriente para hacer funcionar al pic+RN42 + leds. Según veo en la guía de usuario, puede dar 30 mA, el RN42 puede consumir hasta 40 mA, leds supongamos 10 mA cada uno... ya estamos bien arriba de lo que puede suministrar el pickit3.
> Medí con el circuito actual la tensión de alimentación con un tester, si ese es el problema la tensión de alimentación debería estar bien debajo de 3V.



hola a todos llegue a un punto muerto y no sabia que hacer asi que volvi a la base.... intentar que el pic me enviara algun dato cualquiera al computador. pues de ciertamanera lo he logrado. les explico

pero es mas les pongo un video del funcionamiento, pero la cosa no termina ahi , como dije logre configurar el hyperterminal en windows 8.1 para que se comunicara con mi bluetooth RN-42.

pero ya estoy mas seguro  que es la programacion del pic la que no me deja enviar un dato adecuado la sincronizacion no se hacerla de manera correcta paraq ue una A sea una a osea configurar los tiempos adecuados o probar con ascii me podrian ayudar a enviar un valor por ahora lo importante es que envie datos al computador.

despues podre ir haciendo que se reciba datos o instruciones y al final controlarlo por bluetooth o por alguna aplicacion en android seria lo ideal.

ojala logre hacerlo y postearlo ya que en internet hay mucha informacion pero casi todo tiene que ver con compra esto y ello y las aplicaciones mas faciles vienen para usar kit  con microcontroladores y la idea es usar los dispositivos mas economicos y faciles de adquirir.
y que puedan ser de gran utilidad.

bueno estoy subiendo el video.



> #include "C:\Users\yamil\Desktop\compilador C\MAS PRUEBAS\main.h"
> 
> 
> void main()
> ...



lenguaje simple cada vez que prende el led envia la letra a cuando apaga significa que ya prendio

le puse un led a las salidas TX y RX y si envian informacion, yo creo que el problema es que no se la forma correcta de enviar.

ahora el video para que vean que si se comunica.
https://www.youtube.com/watch?v=ctcgxYaOaq8&feature=youtu.be





ojala me puedan ayudar alguien que sepa mas gracias por su tiempo.

aqui simulado en proteus con hyperterminal de proteus

otra cosa gracias ByAxel logre usar el crystal interno del pic.

PD: no encuentro un regulador de 3,3VDC parecido el 7805 aqui en mi ciudad no venden nada bueno. y ningun cargador de celulares jajaja. tendre que encargar a santiago, mientras seguire usando el pickit 3. quizas de verdad el voltaje no es el adecuado, o es inextable.


----------



## Ardogan (Abr 1, 2014)

Ok!!!, eso ya tiene mejor apariencia 
A lo mejor no era la fuente, pero no dejes de tener en cuenta las limitaciones de corriente que puede entregar el pickit3.
Para obtener 3.3V con componentes comunes fáciles de conseguir, busca trabajar con el LM317, vas a tener una tensión a la salida de cualquier valor (siempre que la entrada sea mayor a la salida + 2V aprox).

Veamos... esta última prueba que hiciste (la del video), no tengo claro como esta todo conectado. ¿Es el RN42 comunicándose con la pc a través de bluetooth sin pic de por medio, con un adaptador bluetooth para la PC?, ¿si no es así como se comunica el pic con la PC, con un adaptador usb a puerto serie?

Independientemente de lo anterior, cuando uno recibe caracteres ininteligibles por puerto serie es muy probable que esté mal configurado el puerto (baud rate, paridad, control de flujo)...
Verifica que baudrate/paridad/control de flujo sea lo mismo del lado  de la PC y del otro lado.

Si estás haciendo comunicación de RN42 con PC a través de un adaptador bluetooth: de la hoja de datos del RN42 veo que con el pin 4 se define la velocidad. No sé si lo conectaste, si está abierto debe estar activo el pull-down y el RN42 debe estar trabajando a 115Kbps. Para llevarlo a 9600 deberías poner ese pin a +3.3V


----------



## yamilongiano (Abr 1, 2014)

Ardogan dijo:


> Ok!!!, eso ya tiene mejor apariencia
> A lo mejor no era la fuente, pero no dejes de tener en cuenta las limitaciones de corriente que puede entregar el pickit3.
> Para obtener 3.3V con componentes comunes fáciles de conseguir, busca trabajar con el LM317, vas a tener una tensión a la salida de cualquier valor (siempre que la entrada sea mayor a la salida + 2V aprox).
> 
> ...



hola , el bluetooth esta energizado  junto con el pic, y la alimentacion del modulo rn-42 y el pic16f628a, salen del pickit 3 ( voy a encargar a santiago los dispositivos para una fuente externa, en mi ciudad no venden nada bueno).

la comunicacion del rn-42 es atravez del bluetooth hacia el bluetooth del computador. y la comunicacion la realizo atravez del programa hyperterminal.

la verdad el pin4 no lo tengo energizado lo tengo desconectado, mi bluetooth es el RN42XV

no se si los pines son los mismos que los otros rn42 estandar.




bueno con respecto a  la configuracion de bluetooth se las muestro a continuacion.


```
***ADVANCED Settings***                       
SrvName= SPP            
SrvClass=0000             
SrvClass=0000             
InqWindw=0100
PagWindw=0100
CfgTimer=255
StatuStr=NULL
HidFlags=200
DTRtimer=8
KeySwapr=0
***Settings***
BTA=000666639909
BTName=RNBT-9909
Baudrt=9600
Mode  =Slav
Authen=1
PinCod=1234
Bonded=0
Rem=NONE SET
Reboot!
õþ ò‰€ h_ý· þü ø  õ€ áþ¶ß ÷è÷7À;½öü ù ïUø €þó€ú  œðûø ç¦Á úþÏ€ þü ï¿ ‚üà￾× þø
 àþÃÐþ   üðø   þ}€œàøþü þ ÖãÐ ýøø‚?@ý‰€~üþ þ   °öÏ ä€‡’ü ÷ø￾àøøøøøøøøøøøøøøøøøø
øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø
øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø
øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø
øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø
øøøøøøøøøøøøøøø
```

cuando  me conecto por hyperterminal envio los 3 signos peso $$$ este me devuelve un CMD... eso quiere decir que esta conectado.

ahora con respecto a la configuraciond e bluetooth he mirado en el programa y al parecer esta todo bien. aqui pongo el codigo del programa del microcontrolador que tengo funcionando en el pic para que envie la letra "a".


```
#include <16F628A.h>
#FUSES NOWDT, INTRC, NOPUT, NOPROTECT, NOBROWNOUT, NOMCLR, NOLVP, NOCPD, RESERVED
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)
```




> #include "C:\Users\yamil\Desktop\compilador C\MAS PRUEBAS\main.h"
> 
> 
> void main()
> ...



todo esto hecho con el wizard de PCWHD.... ahora la parte de la configuracion del puerto serie 232 sobre bluetooth en administrador de dispositivos busque el bluetooth.

hardware serie estandar sobre bluetooth(com4) foto




haciendo doble click arriba del serie estandar....



me manda a propiedades en la pestaña configuracion del puerto.


foto configuracion de hyperterminal.



y aqui la configuracion que se accede cuando envio los comandos para ver la configuracion.
el modulo bluetooth 

aqui una foto de bluetooth enviando  el signo "°" cuando de verdad envio la letra a.





codigo de envio de la letra "a"

```
while(true)
 
      {      
       output_high(PIN_B5);
       delay_ms(1000);
       printf ("\ra\r");
       output_low(PIN_B5);
       delay_ms(1000);       
       }

}
```

jajaj se que es mucha informacion pero. yo creo que debe ser el programa alguna idea, gracias por su tiempo, hasta ahi mi trabajo con su ayuda.


----------



## Ardogan (Abr 2, 2014)

Ok, entonces la parte de comunicación RN42XV<--> PC funciona.
Algo está mal con la configuración del usart del pic entonces.
De la guía de usuario, página 45:
http://ww1.microchip.com/downloads/en/DeviceDoc/50002222A.pdf
dice que hay que conectar la línea CTS a GND o a RTS. ¿Eso está?.

Pero fuera de ese detalle, volvemos al baudrate. El UART del modulo bluetooth trabaja por default a 115200 bps, y tu pic le está enviando información a 9600 bps.

Configura el pic para transmita a 115200 bps:
#use rs232(baud=115200,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)

o si querés que el módulo bluetooth trabaje a 9600 bps, mira lo que dice la guía del link en la página 11:
La pata GPIO7 conectada a +3.3V hace que el módulo trabaje a 9600 bps en vez del default de 115200bps.


----------



## yamilongiano (Abr 2, 2014)

Hola  gracias por responder  estava viendo el link que me entregaste pero es de otro dispositivo. y la pagina 11 esta en blanco quizas te equivocaste de link.


el datasheet RN42XV esta en link de abajo  y no encuentro eso de forzar mediante hardware atravez del GPIO7 ...

datasheet:

http://ww1.microchip.com/downloads/en/DeviceDoc/RN41XV-RN42XV-ds-v1.0r.pdf

pines:

Ver el archivo adjunto 107807

el dispositivo es este:

Ver el archivo adjunto 107808

y otra cosa voy a cambiar el baud a 115 para salir de la duda pero tengo configurado todo a 9600 

pero es raro por que lo tengo configurado a 9600 (RN42XV) el pic y el hyperterminal tambienasi como el puerto.
como puedes ver aqui y en los post anteriores.
Ver el archivo adjunto 107775

una consulta al enviar la palabra "a"


```
while(true)

{
output_high(PIN_B5);
delay_ms(1000);
printf ("\ra\r");
output_low(PIN_B5);
delay_ms(1000);
}

}
```

deberia verse en el hyperterminal la letra "a", o debo enviar en codigo ascii para que interpreta la letra "a"

o el comando printf en el lenguaje C no es necesario enviar algun codigo si no que las palabras que enviamos se ven en hyperterminal.

¿no se si quede claro, si envio la letra "a" con el comando printf de lenguaje CCS con la configuracion adecuada del UART,  en el hyperterminal deberia verse  tal cual no con codigos indecifrables?

muchas gracias....por su tiempo.

PD: vivo en chile en iquique y el terremoto de 8.3 me dejo la casa de cabeza, como se dice patas arriba. aun sigue temblando, por lo menos puedo tener mi mente ocupada aqui. se me vino abajo el techo se rompieron las paredes, se quebro casi todo. se cortaron los cables.gracias adios mi casa soporto. otros no tuvieron la misma suerte, pero somos un pais fuerte y saldremos adelante. muchas gracias a los paises hermanos que nos dan su apoyo.


----------



## Ardogan (Abr 3, 2014)

yamilongiano dijo:


> Hola  gracias por responder  estava viendo el link que me entregaste pero es de otro dispositivo. y la pagina 11 esta en blanco quizas te equivocaste de link.



Perdón, me equivoqué de link, me refería a la guía de usuario del módulo (que está aparte del datasheet):
http://ww1.microchip.com/downloads/en/DeviceDoc/bluetooth_cr_UG-v1.0r.pdf



yamilongiano dijo:


> y otra cosa voy a cambiar el baud a 115 para salir de la duda pero tengo configurado todo a 9600



No estoy seguro, pero creo que podes estar confundiendo la velocidad del UART/USART del módulo (conexión física a través de pines RX y TX) con la velocidad que emula el enlace bluetooth.
Te diría que no dejes de realizar la simple de prueba de conectar el pin GPIO7 a +3.3V y ver si con eso funciona, es sencillo y rápido de ver.



yamilongiano dijo:


> una consulta al enviar la palabra "a"
> 
> 
> ```
> ...



Así como está creo que no debería haber problema, con las comillas dobles "\ra\r" uno está indicando una secuencia de caracteres terminada en carácter nulo. En binario lo que se envía es 13,97,13,0




yamilongiano dijo:


> ¿no se si quede claro, si envio la letra "a" con el comando printf de lenguaje CCS con la configuracion adecuada del UART,  en el hyperterminal deberia verse  tal cual no con codigos indecifrables?



Sí, debería verse el/los mismo/s caracter/es.



yamilongiano dijo:


> PD: vivo en chile en iquique y el terremoto de 8.3 me dejo la casa de cabeza, como se dice patas arriba. aun sigue temblando, por lo menos puedo tener mi mente ocupada aqui. se me vino abajo el techo se rompieron las paredes, se quebro casi todo. se cortaron los cables.gracias adios mi casa soporto. otros no tuvieron la misma suerte, pero somos un pais fuerte y saldremos adelante. muchas gracias a los paises hermanos que nos dan su apoyo.


Uh hermano, que jodida la naturaleza por aquellos lares. Uno acá se acostumbra a que lo peor que puede pasar es una inundación o sequía; y los políticos claro (pero eso no cuenta, porque los elegimos nosotros, es daño auto-inflingido en todo caso).
Voy a ver si en algún lado están juntando cosas para enviar, como vos decís, no es la 1ra ni la última vez que les pasa algo así, y han salido/van a seguir saliendo adelante; eso demuestra que los tienen bien puestos para no dejarse vencer. 
Un abrazo y fuerza!!!


----------



## luis1234567890 (Abr 3, 2014)

haber amigo cual es el tu programación completo que estas utilizando últimamente, capaz hay un problema en esa parte .


----------



## yamilongiano (Abr 4, 2014)

luis1234567890 dijo:


> haber amigo cual es el tu programación completo que estas utilizando últimamente, capaz hay un problema en esa parte .



hola gracias por responder la programacion que tengo es la siguiente.esta  en PCWHD CCS

Ver el archivo adjunto 107494


```
#include <16F628A.h>
#FUSES NOWDT, INTRC, NOPUT, NOPROTECT, NOBROWNOUT, NOMCLR, NOLVP, NOCPD, RESERVED
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)
```



```
#include "C:\Users\*******\Desktop\compilador C\MAS PRUEBAS\main.h"


void main()
{

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   char dato;
   // TODO: USER CODE!!
   

      
      
      while(true)
 
      {      
       output_high(PIN_B5);
       delay_ms(500);
       printf ("\ra\r");
       output_low(PIN_B5);
       delay_ms(500);       
       }

}
```

eso es todo lo que tengo en el microcontrolador.


----------



## luis1234567890 (Abr 5, 2014)

veo que la programación esta bien ,pero para que los timers si ni los utilizas no veo ninguna interrupción  ,

 Necesitas cargar trisb=0b11011011 para indicar la transmisión y recepción de datos .


----------



## yamilongiano (Abr 9, 2014)

hola miren he encargado a santiago un monton de cosas para ir depurando. quizas el modulo bluetooth no puedo configurarlo como corresponde as que encargue un modulo RS232 USB para sacar dudas un regulador de 3.3 volt y un max 232 que hora pueden funcionar con 3.3 volt que genial. =)

voy a conectar mediante cable el pic y sacare mis dudas tambien compre otro modulo bluetooth RN-42 pero no el XV. de ahi les pongo mas informacion. hay cosas que no puedo cambiar en el bluetooth como la paridad y esas cosas. ya pondre mas informacion

luis he puesto ese comando pero no ha cambiado nada. gracias por tu apoyo.


----------



## yamilongiano (Abr 11, 2014)

hola miren ya he intentado casi de todo y estoy trabado hay comunicacion y todo pero no se cual es el problema.... alguien podria darme alguna programacion que si funcione que sepa para enviar una letra por el pic al pc me tinka que quizas algo no se esta compilando como quiero....



alguie tiene un codigo quizas mi programacion esta mala o mal configurado en algun lado del compilador...ya no se

tengo forzado por gpio7 a 9600 y aun asi no aparece la letra a en el terminal sino el signo °°°°°°°

configuracion modulo bluetooth



se comunican y puedo acceder a la configuracion por comando en atravez de hyperterminal para configurar el modulo bluetooth.

yo creo que el problema es el codigo que estoy enviando o la programacion del pic.

ya que si cambio los milisegundos


```
while(true)
 
      { 
output_high(PIN_B5);
delay_ms(300);                 // si cambio los milisegundos aqui cambia los signos
printf ("a");                       // que aparecen en el terminal por la comunicaion
output_low(PIN_B5);         // del bluetooth en la pc
delay_ms(300);
       }
}
```

al cambiar los milisegundos me cambia el caracter que aparece en el tera term.

alguien podria ayudarme con algun codigo para sacar las dudas.


----------



## luis1234567890 (Abr 11, 2014)

Este es un ejemplo de prender leds con las teclas a,b,c en minúscula.


```
#include <16f877.h>
#FUSES XT,NOWDT,NOPUT,NOPROTECT,NODEBUG,BROWNOUT,NOLVP,NOCPD,NOWRT
#use delay(clock = 4000000)
#use rs232(baud=9600,rcv=pin_c7,xmit=pin_c6,parity=N)
#byte trisb=0x86
#byte portb=0x06
#byte trisc=0x87
#byte portc=0x07
#bit rb0=portb.0
#bit rb1=portb.1
#bit rb2=portb.2

unsigned int8 dato;
 void main()
 {trisb=0;
  portb=0;
  trisc=0b10000000;
  while(1)
  {
    if(kbhit()==1) 
  {    dato=getc();
   if(dato=='a')
     {rb0^=1;
     if(rb0==0)
     printf("led verde apagado \r");
     else
     printf("led verde encendido \r");    
     }
   else if(dato=='b')
      {rb1^=1;
       if(rb1==0)
         printf("led amarrillo apagado \r");
         else
         printf("led amarrilo encendido \r");
      }
      else if(dato=='c')
         {rb2^=1;
          if(rb2==0)
          printf("led rojo apagado \r");
          else
          printf("led rojo encendido \r");
         }
      else 
      printf("dato incorrecto \r"); 
  }
  }
 }
```
Tienes que configurar tu visual terminal con la velocidad de  baudios que es 9600 y el bit de  paridad.
También fíjate en las conexiones, algo puede estar mal .


----------



## kikeap (Abr 11, 2014)

Hola Luis, tu diagrama si funciona en proteus, pero en físico no me funcionó.
¿No sé si sabrás por qué? Yo lo probé en un 16f628a cambiando algunas cosas.
Saludos.


----------



## yamilongiano (Abr 11, 2014)

kikeap dijo:


> Hola Luis, tu diagrama si funciona en proteus, pero en físico no me funcionó.
> ¿No sé si sabrás por qué? Yo lo probé en un 16f628a cambiando algunas cosas.
> Saludos.



amigo tenemos el mismo problema, yo tengo todo bien configurado por alguna razon algo que no se no lora enviar los datos como corresponde. 

estoy seguro que tiene que ver algo con la configuaracion de las interrupciones  pero va en la programacion.


tienes la comunicacion por cable o no...


----------



## kikeap (Abr 12, 2014)

yo estoy usando una aplicacion android para conectarme al modulo bluetooth que esta conectado al pic16f628a pero nada no me funciona


----------



## Ardogan (Abr 12, 2014)

yamilongiano, ¿probaste de hacer lo sugerí de conectar el pin GPIO7 a +3.3V?


----------



## yamilongiano (Abr 12, 2014)

Ardogan dijo:


> yamilongiano, ¿probaste de hacer lo sugerí de conectar el pin GPIO7 a +3.3V?



hola si he conectado el pin 4  el GPIO7 a 3.3vdc

y se conecta pero yo creo que va en las interrupciones no se.

como avisarle que va a enviar la letra "a" (el bus de datos) y despues cerrar el bus de datos .

lo digo por que cuando cambio valores en milisegundos  en los retardos me cambian los caracteres.


```
while(true)
 
      {      
       output_high(PIN_B5);
       delay_ms(1000);              //cuando cambio el retardo cuanbia el signo
       output_low(PIN_B5);
       delay_ms(1000);
       printf ("a");                     // la letra a si llega pero de vez enc uando sale la letra beta
       }

}
```


como sale aqui en 
tera term



los puertos estan bien configurados quizas  algo no configure bien en el wizard proyect o el programa tendra algunos errores producidos por CCS .  ya no se que puede ser.

estoy 100% seguro que es la programacion del pic no envia el caracter adecuado, ya sea por cosa de interrupciones bit de inicios o de paradas del protocolo. quizas por ahi va la cosa.


ahora miren cuando saco los retardos


```
while(true)
 
      {      
       output_high(PIN_A3);   // sin retardos
       printf ("a");
       output_low(PIN_A3);    // sin retardos
       }
```

fotogracia de lo que envia el pic por hyperterminal:




y ahora sin los comandos (output_high(PIN_A3) y sin los retardos
en el programa del pic...



```
while(true)
 
      {      

       printf ("a");

       }
```

no envia nada... y sigue habiendo comunicacion con el modulo .




por eso creo que quizas falta algo en el codigo que no me deja enviar la letra "a" desde el microcontrolador atravez del modulo bluetooth (rn-42 XV) al pc para que se repita la letra "a" en tera term (hyperterminal).  es como si el pic no estuviera dando los tiempos correctos para que  el pc lo interprete como la letra "a"  o no estuvieran determinados bien los tiempos en el pic. para que lo que ponga en el comando printf ("XXXXX"); se vea correctamente en el hypertermina.

no se si aparte de la configuracion por software falta hacer pausas mediante hardware enviando un low o un high por unos milisegundos antes de enviar el codigo printf ("a");.

alguna idea....???


----------



## ByAxel (Abr 12, 2014)

Hola.
Vuelvo al tema... Solo para probar (misma configuración y a 9600 baud):

- Probar solo el módulo con la PC... unir las líneas RX y TX del módulo para que trabaje a modo de ECO, si el dato recivido en la PC es el mismo que el enviado al módulo... entonces el módulo va bien.

- Probar solo el PIC con la PC... en necesario un adaptador para un puerto serie, ya sea MAX232 o adaptador USB a RS232... hacer que el PIC trabaje en modo de ( ECO ) ver código... si el dato recivido en la PC es el mismo que el enviado al PIC... entonces el PIC va bien.


```
#include <16F628A.h>

#FUSES INTRC_IO
#FUSES NOWDT
#FUSES PUT
#FUSES NOMCLR
#FUSES NOLVP

#use delay(internal=4MHz)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)

char dato;

void main()
{
   setup_oscillator(OSC_4MHZ);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   set_tris_b(0b00000010);

   while(true){   
      if(kbhit()){
         dato = getc(); 
         putc(dato);         
      }
   }
}
```

El PIC puede ser el más indicado en fallar, entonces si va mal la segunda prueba puede ser:
- Niveles de voltaje, (se supone que el PIC a 4Mhz trabaja bien a 3.3V pero...) adapta mejor el cambio de 5V a 3.3V y viceversa.
- Protocolo... ahunque lo dudo (se puede variar paridad, bit de parada) ya que es por hardware no se puede hacer mucho... _no tengo la hoja del módulo a la mano... revisa que el UART del RN42 no tenga las señales  del UART invertidas, solo por las dudas_.

Sobre la inestabilidad del dato al cambiar el delay, eso si es raro... bugs del CCS? u otra cosa.

Adjunto un par de HEX, incluye explicación... compilados en CCS y otro compilador... ambos me van bien... no se más.

Saludos


----------



## Ardogan (Abr 13, 2014)

100 % de acuerdo con ByAxel, probar cada cosa por separado haciendo loopback.

Otra cosa que podría estar pasando es problemas de reloj. ¿Que capacitores utilizaste con el cristal?, ¿son NP0/cabecita negra?, ¿de que valor?. 
Hace una prueba con delay_ms(5000) por ejemplo, encendiendo y apagando un led para ver si el tiempo real es el esperado (si se enciende cada 10 segundos).
Esto podría afectar al generador de baudrate si la velocidad de reloj es inestable o distinta a la esperada, y terminaría provocando el efecto de caracteres raros.


----------



## kikeap (Abr 13, 2014)

yo estoy usando el modulo hc06 y tampoco no me funciona el programa :/


----------



## yamilongiano (Abr 16, 2014)

bueno me llegaron las piezas e hice pruebas.... 

al final es el modulo bluetooth, no se como configurarlo esa es la verdad al parecer.
me faltara configurar algunas cosas que desconosco y no se donde empezar jaja.

he conectado el circuito con el mismo programa y funciona perfectamente me envia una letra a sin ningun problema,y sin caracteres raros.

adjunto fotografia del protoboard.

chip ICL3232cp trabaja con 3.3 volt
pic 16f628a 3.3v  con cristal interno de 4mhz
modulo usb TO SERIAL PORT UCON-232S



aqui otra foto.



tera term.



por lo menos ahora me queda saber por que el modulo bluethooth tiene problemas con el envio de datos a mi pc ... alguien me podria dar otra manito. gracias a todos por ayudarme y ocupar su tiempo para aconsjarme gracias otra vez.


----------



## kikeap (Abr 18, 2014)

Hola yamilongiano yo ya pude comunicar mi pc con mi pic16f628a pero tube que usar otros pines declarandolos antes en el #fuses


----------



## yamilongiano (Abr 18, 2014)

kikeap dijo:


> Hola yamilongiano yo ya pude comunicar mi pc con mi pic16f628a pero tube que usar otros pines declarandolos antes en el #fuses



Que bluetooth ocupaste?

Bueno si me funciono al final pero con otro dispositivo el rn42 , el que tenia era el rn42xv no se cual es la diferencia pero con el otro me funciona perfectamente. No se cual sera el problema en verdad con el otro moculo bluetooth...

Fin. Despues subire un tutorial en verdad es simple . Pero con el modulo Rn42. El otro aunque tenga todo configurado igual no funciona.


----------



## kikeap (Abr 19, 2014)

yo use el hc06 q es un modulo muy economico por aca. Bueno saludos


----------



## Paola123 (Dic 24, 2016)

Buenas tardes. Quisiera ayuda.
Mi trabajo si se conecta, pero el problema es el envío de datos.
Cree una aplicación en App Inventor para q*ue* me envíe el dato, pero no se conecta.

Gracias por la ayuda.


----------



## D@rkbytes (Dic 24, 2016)

Paola123 dijo:


> Buenas tardes. Quisiera ayuda.
> Mi trabajo si se conecta, pero el problema es el envío de datos.
> Cree una aplicación en App Inventor para q*ue* me envíe el dato, pero no se conecta.
> 
> Gracias por la ayuda.


Debes adjuntar lo que has hecho, recuerda que no somos adivinos.


----------



## Paola123 (Dic 25, 2016)

D@rkbytes dijo:


> Debes adjuntar lo que has hecho, recuerda que no somos adivinos.



Una disculpa. Bueno, mi código es este:

```
list p= 16F628A ;listo el micros a utilizar
#include P16F628A.inc; incluye la libreria del pic
__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_OFF & _CP_OFF;configuracion de la palabra del pic con seguridar timers
  
CBLOCK 0X20
NUM1, NUM2, NUM3, DATO ;declaración de registros
ENDC

ORG 0X00 ;declaro el origen del programa en la dirección de reset
GOTO INICIO ;voy al inicio real del programa
ORG 0X04 ;declaro el vector de interrupción

;******************C O D I G O D E I N T E R R U P C I O N************************************
MOVF RCREG,W
MOVWF TXREG
MOVWF DATO
BCF PIR1,RCIF
RETFIE
;*****************************************************************************************
;******************C O N F I G U R A C I O N D E P U E R T O S********************************
INICIO: BSF STATUS,RP0 ;CAMBIO A BANCO 1

BCF TRISB,3 ;CONFIGURO PORTB,3 Y PORTB,4 COMO SALIDA
BCF TRISB,4 ;PARA LOS LEDS INDICADORES

BSF TRISB,1 ;CONFIGURO PORTB,1 Y PORTB,2 PARA QUE
BSF TRISB,2 ;FUNCIONE EL MODULO USART

BCF STATUS,RP0 ;CAMBIO A BANCO 0

CALL USARTINI ;LLAMO A LA SUBRUTINA QUE CONFIGURA
;AL MODULO USART

START: MOVF DATO,W ;COLOCO EL CONTENIDO DEL REGISTRO
SUBLW "49" ;DATO EN W Y LO COMPARO CON UNA
BTFSS STATUS,Z ;LITERAL
GOTO NEXT ;SI NO ES IGUAL, VA A LA SIGUIENTE PREGUNTA
bsf PORTB,4 ;SI ES IGUAL, ENCIENDO PORTB,4
CLRF DATO ;BORRO EL CONTENIDO DEL REGISTRO
GOTO START ;Y REGRESO AL INICIO DEL CODIGO


NEXT: MOVF DATO,W ;COLOCO EL CONTENIDO DEL REGISTRO
SUBLW "50" ;DATO EN W Y LO COMPARO CON UNA
BTFSS STATUS,Z ;LITERAL
GOTO NEXT1 ;SI NO ES IGUAL, VA A LA SIGUIENTE PREGUNTA
bsf PORTB,3 ;SI ES IGUAL, ENCIENDO PORTB,3
CLRF DATO ;BORRO EL CONTENIDO DEL REGISTRO
GOTO START ;Y REGRESO AL INICIO DEL CODIGO




NEXT1: MOVF DATO,W ;COLOCO EL CONTENIDO DEL REGISTRO
SUBLW "51" ;DATO EN W Y LO COMPARO CON UNA
BTFSS STATUS,Z ;LITERAL
GOTO START ;SI NO ES IGUAL, REGRESA A START
CLRF PORTB ;SI ES IGUAL, BORRA TODO PORTB
CLRF DATO ;BORRO EL CONTENIDO DEL REGISTRO
GOTO START ;Y REGRESO AL INICIO DEL CODIGO

;*****************************************************************************************

;*************C O D I G O D E I N I C I A L I Z A C I O N D E L A U S A R T********************
USARTINI: BSF STATUS,RP0
MOVLW 0X24
MOVWF TXSTA
MOVLW D'25'
MOVWF SPBRG
BSF PIE1,RCIE
MOVLW 0XC0
MOVWF INTCON
BCF STATUS,RP0 ;BANCO 0
MOVLW 0X90
MOVWF RCSTA
RETURN
;*****************************************************************************************

END
```
Y la aplicación está así a parte en bloques que se muestran, pero no logro enviar el dato.


----------



## juanbacan (Dic 25, 2016)

En la aplicación estas enviando texto, no estoy seguro pero creo que cuando lo haces de esa manera estas enviando además un retorno de carro y un salto de linea, intenta a sólo enviar un byte con send1bytenumber, ahí en el programa en asm lo comparas directo


----------



## Paola123 (Dic 25, 2016)

juanbacan dijo:


> En la aplicación estas enviando texto, no estoy seguro pero creo que cuando lo haces de esa manera estas enviando además un retorno de carro y un salto de linea, intenta a sólo enviar un byte con send1bytenumber, ahí en el programa en asm lo comparas directo



Gracias voy a probar


----------



## D@rkbytes (Dic 26, 2016)

Así como está el código está bien para recibir los números 1, 2 y 3 como texto.
No importa que se mande un salto de línea y retorno de carro al final, ya que serán omitidos.
El programa está recibiendo el primer byte que llega y posteriormente se compara, el resto se descarta.

El único problema que veo, es que el bit 4 (RB4) no va a funcionar cómo salida, porque el fuse LVP no está configurado, quedando activo por defecto. (LVP_ON)
Quita el fuse CP_OFF, que por defecto es inactivo, y en su lugar coloca: LVP_OFF

Y una pregunta. ¿A qué velocidad piensas que funcione el módulo USART?


----------



## Paola123 (Dic 27, 2016)

D@rkbytes dijo:


> Así como está el código está bien para recibir los números 1, 2 y 3 como texto.
> No importa que se mande un salto de línea y retorno de carro al final, ya que serán omitidos.
> El programa está recibiendo el primer byte que llega y posteriormente se compara, el resto se descarta.
> 
> ...



Gracias x la respuesta voy a uSar un cristal x 4mhz


----------



## D@rkbytes (Dic 27, 2016)

Sí, eso lo supuse por el fuse _FOSC_XT
A lo que me refiero, es a la velocidad en baudios del módulo USART.


----------



## Paola123 (Dic 27, 2016)

D@rkbytes dijo:


> Sí, eso lo supuse por el fuse _FOSC_XT
> A lo que me refiero, es a la velocidad en baudios del módulo USART.



 es velocidad nose la verdad si estare fallando no me salen datos aun 9600 baudios


----------



## D@rkbytes (Dic 30, 2016)

Puede ser que tengas algo mal conectado, o mal configurado el módulo Bluetooth.
Revisa tus conexiones, la configuración del módulo y usa esta configuración en el programa del PIC:

```
; Configuración USART: (9600 Bps @ 4MHz. 9615 Bps Reales 0.16% de error.)
    bsf        STATUS,RP0    ; Seleccionar el Banco 1
    movlw    0x19
    movwf    SPBRG
    movlw    0x24
    movwf    TXSTA
    bcf        STATUS,RP0    ; Seleccionar el Banco 0
    movlw    0x90
    movwf    RCSTA
```


----------

