gracias por los comentarios, me sirvieron bastante. logre hacer encender un led con un ring, pero ahora tengo otro problema. Al colocar la interrupcion por usart, la pic queda en blanco. Hace todo lo que esta en void main(), hasta el while(true), ahi deberia mostrar la conversion A/D de dos potenciometros conectados a los pines A0 y A1. pero el display LCD queda en blanco. alguien me podria ayudar por favor.
gracias
#include "16f877a.h" // Pic a utilizar
#device adc=10 // Usa resolución de 10 bits
#use delay(clock=20000000) // Cristal 20 MHz
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#include <string.h>
#include <stdlib.h>
#fuses hs,nowdt,nobrownout,nolvp,noprotect // Fusibles
#define use_portb_lcd TRUE
#include "lcd420.c"
#byte TRISD = 0x88
#byte PORTD = 0x08
#INT_RDA
void serial_isr(void)
{
}
long int temperatura;
long int humedad;
long int esc_humedad;
long int esc_temperatura;
long int extremo=500;
long int extremo_2=45;
char dato_mensaje[];
char mensaje[60]={0};
int est=2;
int est_t=2;
int i=0;
void serial(void){
disable_interrupts(INT_RDA);
if(kbhit()){
mensaje = getc();
while(mensaje != '\r')
{
i++;
mensaje=getc();
}
}
lcd_putc('\f');
for(i=0;i<15;i++)
{
printf(lcd_putc,"%c",mensaje);
}
enable_interrupts(INT_RDA);
void main ()
{
lcd_init();
set_tris_d(0x00); // puerto D como salida
lcd_putc("Inicializando");
PORTD=0x00;
output_high(PIN_D2);
printf("ATQ0\r\n");
lcd_putc('\f');
lcd_putc("ATQ0");
delay_ms(1000);
printf("AT+CMGF=1\r\n"); // Modo texto
lcd_putc('\f');
lcd_putc("AT+CMGF=1");
delay_ms(1000);
printf("ATD87663847;\r\n"); // realiza una llamada telefonica
lcd_putc('\f');
lcd_putc("ATD87663847;");
delay_ms(5000);
delay_ms(5000);
printf("AT+CHUP\r\n"); // corta la llamada.
lcd_putc('\f');
lcd_putc("AT+CHUP");
delay_ms(1000);
printf("AT+CNMI=1,2,0,0,0\r\n"); // espera mensaje
lcd_putc('\f');
lcd_putc("AT+CNMI=1,2,0,0,0");
delay_ms(1000);
lcd_putc('\f');
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while (true)
{
setup_adc (adc_clock_internal);
setup_adc_ports(RA0_RA1_analog_RA3_REF);
set_adc_channel (0); // Elige canal analogico a medir
delay_us (20); //espera 20 microseg
temperatura=read_adc (); // Hace conversión A/D
lcd_gotoxy(1,1); // Acomoda cursor LCD
printf(lcd_putc,"Temp= %lu ",temperatura);
set_adc_channel (1); // Elige canal analogico a medir
delay_us (20); //espera 20 microseg
humedad=read_adc (); // Hace conversión A/D
esc_humedad=(humedad*60)/1023;
lcd_gotoxy(1,2);
printf(lcd_putc,"Humed= %lu ",esc_humedad);
if (temperatura>extremo)
{
for(est_t;est_t>1;est_t--)
{
output_high(PIN_D1);
printf("AT+CSCA=\"+5698890005\"\r\n");
delay_ms(500);
printf("AT+CMGS=\"xxxxxxxx\"\r\n");
delay_ms(500);
printf("ALERTA 2\r\n");
putc(26);
printf("\r\n");
//output_high(PIN_D1);
//delay_ms(300);
}
}
else
{
output_low(PIN_D1);
est_t=2;
}
if (esc_humedad>extremo_2)
{
for(est;est>1;est--)
{
output_high(PIN_D0);
printf("AT+CSCA=\"+5698890005\"\r\n");
delay_ms(500);
printf("AT+CMGS=\"xxxxxxxx\"\r\n");
delay_ms(500);
printf("ALERTA\r\n");
putc(26);
printf("\r\n");
//output_high(PIN_D0);
//delay_ms(300);
}
}
else
{
output_low(PIN_D0);
est=2;
}
//delay_ms (300);
}
}
gracias
#include "16f877a.h" // Pic a utilizar
#device adc=10 // Usa resolución de 10 bits
#use delay(clock=20000000) // Cristal 20 MHz
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#include <string.h>
#include <stdlib.h>
#fuses hs,nowdt,nobrownout,nolvp,noprotect // Fusibles
#define use_portb_lcd TRUE
#include "lcd420.c"
#byte TRISD = 0x88
#byte PORTD = 0x08
#INT_RDA
void serial_isr(void)
{
}
long int temperatura;
long int humedad;
long int esc_humedad;
long int esc_temperatura;
long int extremo=500;
long int extremo_2=45;
char dato_mensaje[];
char mensaje[60]={0};
int est=2;
int est_t=2;
int i=0;
void serial(void){
disable_interrupts(INT_RDA);
if(kbhit()){
mensaje = getc();
while(mensaje != '\r')
{
i++;
mensaje=getc();
}
}
lcd_putc('\f');
for(i=0;i<15;i++)
{
printf(lcd_putc,"%c",mensaje);
}
enable_interrupts(INT_RDA);
void main ()
{
lcd_init();
set_tris_d(0x00); // puerto D como salida
lcd_putc("Inicializando");
PORTD=0x00;
output_high(PIN_D2);
printf("ATQ0\r\n");
lcd_putc('\f');
lcd_putc("ATQ0");
delay_ms(1000);
printf("AT+CMGF=1\r\n"); // Modo texto
lcd_putc('\f');
lcd_putc("AT+CMGF=1");
delay_ms(1000);
printf("ATD87663847;\r\n"); // realiza una llamada telefonica
lcd_putc('\f');
lcd_putc("ATD87663847;");
delay_ms(5000);
delay_ms(5000);
printf("AT+CHUP\r\n"); // corta la llamada.
lcd_putc('\f');
lcd_putc("AT+CHUP");
delay_ms(1000);
printf("AT+CNMI=1,2,0,0,0\r\n"); // espera mensaje
lcd_putc('\f');
lcd_putc("AT+CNMI=1,2,0,0,0");
delay_ms(1000);
lcd_putc('\f');
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while (true)
{
setup_adc (adc_clock_internal);
setup_adc_ports(RA0_RA1_analog_RA3_REF);
set_adc_channel (0); // Elige canal analogico a medir
delay_us (20); //espera 20 microseg
temperatura=read_adc (); // Hace conversión A/D
lcd_gotoxy(1,1); // Acomoda cursor LCD
printf(lcd_putc,"Temp= %lu ",temperatura);
set_adc_channel (1); // Elige canal analogico a medir
delay_us (20); //espera 20 microseg
humedad=read_adc (); // Hace conversión A/D
esc_humedad=(humedad*60)/1023;
lcd_gotoxy(1,2);
printf(lcd_putc,"Humed= %lu ",esc_humedad);
if (temperatura>extremo)
{
for(est_t;est_t>1;est_t--)
{
output_high(PIN_D1);
printf("AT+CSCA=\"+5698890005\"\r\n");
delay_ms(500);
printf("AT+CMGS=\"xxxxxxxx\"\r\n");
delay_ms(500);
printf("ALERTA 2\r\n");
putc(26);
printf("\r\n");
//output_high(PIN_D1);
//delay_ms(300);
}
}
else
{
output_low(PIN_D1);
est_t=2;
}
if (esc_humedad>extremo_2)
{
for(est;est>1;est--)
{
output_high(PIN_D0);
printf("AT+CSCA=\"+5698890005\"\r\n");
delay_ms(500);
printf("AT+CMGS=\"xxxxxxxx\"\r\n");
delay_ms(500);
printf("ALERTA\r\n");
putc(26);
printf("\r\n");
//output_high(PIN_D0);
//delay_ms(300);
}
}
else
{
output_low(PIN_D0);
est=2;
}
//delay_ms (300);
}
}