hola como doy lata con eso ... pero sii me estoy quemando los ojos para que salga... podrias ver mi codigo es que la salia PWM no sale como deberia...
haber si habilite bn el timer 1
#include "FINAL_UC1.h"
#include <LCD.c>
#byte portc = 0x07
//Registros DS1307
#define ds_seconds 0x00
#define ds_minutes 0x01
#define ds_hours 0x02
#define ds_day 0x03
#define ds_date 0x04
#define ds_month 0x05
#define ds_year 0x06
#define ds_control 0x07
#define MULT1 PIN_C1
#define MULT2 PIN_C3
//#use standard_io (C)
int16 time,lm35,retardo=250;
int8 data,unidad,decena;
//Dato en registro ds, a mandar o leer
int seconds,minutes,hours,day,date,month,year,control;
int8 bcd();
void ds1307(void);
void multiplex(void);
int1 flag,flag2;
#int_timer0
void mux()
{
if(flag)//si vas a prender el display 1
{
output_low(MULT2); //apagas el display 2
portc=decena*16; //sacas el valor para el display 1
output_high(MULT1); //prendes el display 1
flag=false;
}
else
{
output_low(MULT1); // apagas el display 1
portc=unidad*16; //sacas el valor para el display 2
output_high(MULT2); //prendes el display 2
flag=true;
}
}
#int_timer1
void int_t1()
{
if(flag2)
flag2=false;
else
flag2 = true;
set_timer1(3036);//con esto incializa el timer para que te vuelva a generar la interrupcion en medio segundo.
//si quieres puedes dejarlo cada medio segundo, es decir, 2 muestras por segundo, o poner un contador, y que cada 2 interrupciones se active una bandera para actualizar los datos
}
void main()
{
set_tris_c(0x00);
SETUP_ADC_PORTS(AN0_AN1_AN3);
setup_adc(ADC_CLOCK_INTERNAL);
setup_timer_1(t1_internal|t1_div_by_8);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_2(T2_DIV_BY_4,249,1); // Timer2 a ikhz
setup_ccp1(CCP_PWM);
enable_interrupts(int_timer0);
enable_interrupts(int_timer1);
enable_interrupts(global);
set_adc_channel(0);
seconds= 0x00;
minutes= 0x30;
hours = 0x17; //modo 24 hrs
day = 0x04; //1 es domingo
date = 0x08;
month = 0x06;
year = 0x11;
control= 0x00; //OUT=0 SQWE=0 RS0-1=0 no hay onda cuadrada
delay_ms(retardo); //Usuario lee
//Establece fecha y hora
i2c_start(); //Inicia I2C
i2c_write(0xd0); //Direcciona DS1307 write
i2c_write(ds_seconds); //Indica que empiece en registro ds_seconds
//Aquí establece fecha y hora respecto a la puesta arriba
i2c_write(seconds);
i2c_write(minutes);
i2c_write(hours);
i2c_write(day);
i2c_write(date);
i2c_write(month);
i2c_write(year);
i2c_write(control);
i2c_stop(); //Ya puso la hora y fecha
//El RTC ya está marcando el tiempo y fecha
//Rutina LCD
lcd_init();
lcd_putc("\f"); //Limpia LCD
lcd_putc("Temp: \n");
lcd_gotoxy(13,1);
lcd_putc("oC");
while(TRUE)
{
time = read_adc();
time*=0.9775;
printf("%Ld",time);
lm35 = time/10.23;
data = lm35;
data=bcd();
set_pwm1_duty(time);
set_timer2(0);
delay_ms(200);
while(flag2)
{
delay_ms(retardo); //Usuario lee
i2c_start(); //Inicia I2C
i2c_write(0xd0); //Direcciona DS1307 write
i2c_write(ds_seconds); //Indica que ponga registro en ds_seconds
i2c_stop();
i2c_start();
i2c_write(0xd1); //Lee DS1307
seconds = i2c_read();
minutes = i2c_read();
hours = i2c_read();
day = i2c_read();
date = i2c_read();
month = i2c_read();
year = i2c_read(0);
i2c_stop();
}
lcd_gotoxy(7,1);
printf(lcd_putc,"%Lu",lm35); //xxx.x °C
lcd_gotoxy(1,2);
printf(lcd_putc,"%2x-%2x-20%2x %2x:%2x:",date,month,year,hours,minutes); //xxx.x °C
}
}
int bcd()
{
unidad = data%10;
decena = data/10;
}