Hola amigos foreros:
Este es el primer mensaje que pongo en el foro y estoy desesperado necesito de vuestra ayuda.
Os explico:
Estoy realizando un proyecto de fin de carrera se trata de un Invernadero automatizado. Ya tengo to el harware montado y todo funciona OK.
Para poder actualizar el invernadero, es decir, la captura de los sensores necesito las interrupciones para cada cierto tiempo ir actualizando los valores que cambian continuamente.
El problema es que la interrupción se me desactiva cuando hago uso de la lcd. Es decir hago un programas aparte usando las librerías de LCD.c y todo funciona OK. La lcd funciona pero la cosa se complica cuando hago un programa con alguna interrupción y meto la inicialización de la lcd. Me escribe en la lcd pero no me funciona lo demás.
Utilizo el PIC 16F1937 y el compilador CCS. Os pongo un pequeño programa que sirve como explicación a mi problema.
SALUDOS y GRACIAS
Este es el primer mensaje que pongo en el foro y estoy desesperado necesito de vuestra ayuda.
Os explico:
Estoy realizando un proyecto de fin de carrera se trata de un Invernadero automatizado. Ya tengo to el harware montado y todo funciona OK.
Para poder actualizar el invernadero, es decir, la captura de los sensores necesito las interrupciones para cada cierto tiempo ir actualizando los valores que cambian continuamente.
El problema es que la interrupción se me desactiva cuando hago uso de la lcd. Es decir hago un programas aparte usando las librerías de LCD.c y todo funciona OK. La lcd funciona pero la cosa se complica cuando hago un programa con alguna interrupción y meto la inicialización de la lcd. Me escribe en la lcd pero no me funciona lo demás.
Utilizo el PIC 16F1937 y el compilador CCS. Os pongo un pequeño programa que sirve como explicación a mi problema.
SALUDOS y GRACIAS
Código:
#include<16F1937.h>
#FUSES XT
#DEVICE ADC=10
#USE delay(clock=20000000)
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D2
#define LCD_RW_PIN PIN_D3
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include<LCD.c>
#include"16F1937_Registros.c"
int cont=0;
#INT_TIMER1
void Timer1_isr()
{
clear_interrupt(int_timer1);
cont++;
bit_clear(PORTC,1);
}
void main (void)
{
TRISC=0x00;
//lcd_init();
delay_ms(100);
enable_interrupts(GLOBAL);
enable_interrupts(INT_TIMER1);
setup_timer_1 (T1_INTERNAL);
set_timer1(0);//reset the timer.
do{
if(cont==3)
{
bit_set(PORTC,1);
cont=0;
}
//lcd_putc("HOLA");
}while(1);
}
Última edición por un moderador: