Hola azicuetano!!!
Gracias porla respuesta expedita...
Aviso que yo programo en "c" y quizas está un poquito largo pero ahí va...
#include <16F873A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) // Jumpers: 8 to 11, 7 to 12
#byte PuertoB = 0x06
#byte PuertoC= 0x07
int a=0,h=0,m=0,s=0,d,g,f=0,i=0,cont=1,p=0,tiempo;
int ciclo,temp;
long t[5];
void toma_muestra(); //declaración de procedimientos.
void ejecucion_dia();
void ejecucion_noche();
void ejecucion1_dia();
void ejecucion1_noche();
void fotoperiodo();
#INT_TIMER2 //Rutina de interrupcion por timer 2,
void timer2() //Funcion que es llamada por la interrupcion
{ //del timer para conformar el reloj
a++; // de horas miniutos segundos y dias de operacion
if(a>24) //Contador de interrupciones
{
if(s<59) //Contador de segundos
{
s++;
}
else
{
if(m<59) //Contador de minutos
m++;
else
{
if(h<23) //Contador de horas
h++;
else
{
h=0;
}
m=0;
}
s=0;
}
a=0;
}
}
void main()
{
setup_port_a(A_ANALOG_RA3_REF);
setup_adc(ADC_CLOCK_INTERNAL);
setup_timer_2(T2_DIV_BY_16,250,10); //Configurando la duracion de
set_timer2(0); //cada interrupcion del timer
set_tris_b(0x01); //declaración de los puertos,
set_tris_c(0x00); //puerto B de salida menos RB0
enable_interrupts(GLOBAL); //y puerto C de salida.
enable_interrupts(INT_TIMER2);
do
{
if(s%2==0)
{
toma_muestra(); //ciclo eterno, que ejecuta los procedimientos
fotoperiodo(); //de cada una de las variables ambientales
temp=(t[0]+t[1]+t[2])/3; //y las envía al pc.
if(bit_test(PuertoB,0))
{
ejecucion_noche();
ejecucion1_noche();
if(tiempo<24)
{ciclo=1;}
else
{ciclo=0;}
}
else
{
ejecucion1_dia();
ejecucion_dia();
ciclo=1;
}
printf("%u%2U%u\r\n",g,d,ciclo);
delay_ms(1000);
}
}while (true);
}
void Toma_Muestra(void) //Funcion que toma las muestras de voltaje entregadas
{ //por los sensores
for(i=0;i<6;i++)
{
if(i==0)
{bit_set(PuertoB,4);
bit_set(Puertob,5);
output_b(0x00);
}
if(i==1)
{bit_set(PuertoB,4);
bit_set(Puertob,5);
output_b(0x02);
}
if(i==2)
{bit_set(PuertoB,4);
bit_set(Puertob,5);
output_b(0x04);
}
if(i==3)
{bit_clear(PuertoB,4);
bit_set(Puertob,5);
output_b(0x06);
}
if(i==4)
{bit_clear(PuertoB,4);
bit_set(Puertob,5);
output_b(0x08);
}
if(i==5)
{bit_clear(PuertoB,4);
bit_set(PuertoB,5);
output_b(0x0A);
}
set_adc_channel(0);
delay_us(50);
t
=Read_ADC();
delay_us(50);
}
}
void ejecucion_dia()
{
bit_clear(PuertoC,3); //ejecuta las acciones a tomar segun temperatura
delay_us(2);
bit_clear(PuertoC,4);
delay_us(2);
if(temp<19)
{
bit_set(PuertoC,3);
delay_us(50);
}
else
if(temp>23)
{
bit_set(PuertoC,4);
delay_us(50);
}
d=temp;
}
void ejecucion_noche()
{
bit_clear(PuertoC,3);
delay_us(2);
bit_clear(PuertoC,4);
delay_us(2);
if(temp<17)
{
bit_set(PuertoC,3);
delay_us(50);
}
else
if(temp>21)
{
bit_set(PuertoC,4);
delay_us(50);
}
d=temp;
}
void ejecucion1_dia() //ejecuta las acciones a tomar segun humedad.
{
bit_clear(PuertoC,5);
delay_us(2);
if(t[3]<73)
{
bit_set(PuertoC,5);
delay_us(50);
}
g=t[3];
}
void ejecucion1_noche()
{
bit_clear(PuertoC,5);
delay_us(2);
if(t[3]<83)
{
bit_set(PuertoC,5);
delay_us(50);
}
g=t[3];
}
void fotoperiodo() //procedimiento a cargo de la cuenta de horas y encendido
{ //de las luces.
tiempo=tiempo+(s/s)+cont;
if (tiempo>50)
tiempo=25;
if(bit_test(PuertoB,0))
if(tiempo<24)
{
bit_set(PuertoC,2);
}
else
{
bit_clear(PuertoC,2);
}
else
{
bit_clear(PuertoC,2);
f++;
if(f==1)
tiempo=0;
}
}
Mañana sin falta pruebo lo que me dices...
Gracias nuevamente.... Saludos .