Hola que tal... He aquí mis respuestas con el experimiento!!! He tratado de transmitir y pues nada... Como el modula USART es muy lento, pues probe con la sugerencia de Nocturno, chequee el bit que me indica si el buffer está vacio o no... y pues nada, no envia naita de nada... Ni siquiera letras... Nada! probe on un retardito y tampoco... la puse en Autowakeup, y pues ni siquiera transmite un mal caracter, puse en micro en modo IDLE y tampoco!! ya ando loca, no encuntro más nada que hacer... Si alguien pudiera echarme una mano pos le agradeceria...
Aquí dejo el código...
#include <18f4550.h>
#DEVICE ADC=8
#fuses NOPROTECT,NOCPD,NOLVP,WDT64,XT,NOMCLR
#use fast_io (A)
#use fast_io (B)
#use fast_io (D)
#use delay(clock=4000000)
#include "lcd.c" // Libreria de la LCD por el purto B
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) // Habilita las funciones RS232, velocidad a 9600 baudios
#byte portd= 0xF83
#byte PIR1=0xF9E
#bit TXIF=PIR1.4
#byte BAUDCON=0xFB8
#bit WUE=BAUDCON.1
#byte OSCCON = 0xFD3
#bit IDLEN=OSCCON.7
#bit SCS0=OSCCON.0
#bit SCS1=OSCCON.1
//::::::::::::::::::::::::::Declaración de variables:::::::::::::::::::::::::::::::::::::
float dato,value,valord,value1,valord1,dato1;
int x=0;
//:::::::::::::::::::::::::::Programa Principal:::::::::::::::::::::::::::::::::::::::::::
void main(void)
{
set_tris_a(0xe7); // Puerto A, como b'11100111
set_tris_b(0x00); // Puerto B, como b'00000000 (salida)
set_tris_d(0x00); // Puerto D, como b'11111111 (salida)
output_a(0); // Limpio el puerto A
output_c(0); // Limpio el puerto C
output_b(0); // Limpio el puerto B
setup_wdt(WDT_ON); // Watchdog Encedido
setup_port_a(AN0_ANALOG ); // RA0 son analógicos y los demás son digitales
//WUE=1;
lcd_init(); // para inicializar el LCD
restart_wdt(); // Inicio el perro Guardian
while(true)
{
restart_wdt(); // Inicio el perro Guardian
IDLEN=1;
SCS1=0;
SCS0=0;
SLEEP(); // Modo sleep
// Se desborda Watchdog y sale del modo Sleep
if (restart_cause()==WDT_FROM_SLEEP) // Si el pic despierta por watchdog, entonces...
{
if(x==0) // Pregunto por bandera
{
setup_adc(ADC_CLOCK_INTERNAL ); // Tomará el dato contando el tiempo con el reloj interno
set_adc_channel(0); // El canal de adquisición del dato es el RA0
delay_ms(10); // Un retardo para capturar bien el dato
value=read_adc(); // Leo el dato
valord=(value*0.4); // Multiplico el valor por 0.4 para hacer la equivalencia a 2V
portd=valord; // Lo mando al puerto D
dato=(valord*5)/255; // Convierto el valor a decimal y lo guardo
set_adc_channel(1); // El canal de adquisición del dato es el RA0
delay_us(10); // Un retardo para capturar bien el dato
value1=read_adc(); // Leo el dato del An1 (Realimentación)
valord1=(value1*0.4); // Multiplico el valor por 0.4 para hacer la equivalencia a 2V
dato1=(valord1*5)/255; // Convierto el valor a decimal y lo guardo
setup_adc (ADC_OFF); // Apago el conversor A/D
x=1; // Seteo la bandera
}
else if (x==1) // Si x es igual a 1
{
printf(lcd_putc,"\f"); // Borro la pantalla LCD
dato=(value*5)/255; // Convierto el valor a decimal y lo guardo
printf(lcd_putc,"Voltaje= %2.2g",dato); // Mando a mostrar el valor del conversor en la LCD
printf("\f"); // Limpio pantalla del hyperterminal
printf(" Voltaje= %2.2g V",dato); // Mando a mostrar el valor del conversor
delay_ms(500);
band: if(txif==0)
{ goto band;
}
x=0; // Reseteo la bandera
}
}
}
}
Atte Enigma... La llanerita de Guayana