0 Usuarios y 1 Visitante están viendo este tema.
#include <16F877.h>#FUSES XT,NOWDT,NOPROTECT,PUT,NOLVP#use delay(clock=4000000)#use i2c(Master,Slow,sda=PIN_C4,scl=PIN_C3)#include "lcd.c"#include "C:\Documents and Settings\Administrador\Desktop\todopic\ds1307.c"void main(){byte sec; byte min; byte hrs; byte day; byte month; byte year; byte dow;lcd_init(); //initialize lcd//initialize 1307 ds1307_init(); ds1307_set_date_time(18,12,9,3,10,30,55); //day, month,year,dow,hr,min.sec while(1) { ds1307_get_date(day,month,year,dow); ds1307_get_time(hrs,min,sec); lcd_gotoxy(1,1); printf(lcd_putc,"Data : %02d:%02d:%02d",day,month,year); lcd_gotoxy(1,2); printf(lcd_putc,"Time : %02d:%02d:%02d",hrs,min,sec); if (!input(PIN_c0) ) // controla el puerto C pin0 incrementa horas { while(!input(pin_c0)){} if (hrs>23) hrs=0; else hrs++; i2c_start(); i2c_write(0xD0); i2c_write(0x02); i2c_write(bin2bcd(hrs)); i2c_stop(); delay_ms(50); } if (!input(PIN_c1) ) // controla el puerto C pin1 incrementa minutos { while(!input(pin_c1)){} if (min>58) min=0; else min++; i2c_start(); i2c_write(0xD0); i2c_write(0x01); i2c_write(bin2bcd(min)); i2c_stop(); delay_ms(50); } }}
//#define RTC_SDA PIN_C4//#define RTC_SCL PIN_C3//#use i2c(master, sda=RTC_SDA, scl=RTC_SCL)//BYTE bin2bcd(BYTE binary_value);//BYTE bcd2bin(BYTE bcd_value);int8 bin2bcd(int8 binary_value){ int8 temp; char retval; temp = binary_value; retval = 0; while(1) { // Get the tens digit by doing multiple subtraction // of 10 from the binary value. if(temp >= 10) { temp -= 10; retval += 0x10; } else // Get the ones digit by adding the remainder. { retval += temp; break; } } return(retval);}// Input range - 00 to 99.char bcd2bin(char bcd_value){ char temp; temp = bcd_value; // Shifting upper digit right by 1 is same as multiplying by 8. temp >>= 1; // Isolate the bits for the upper digit. temp &= 0x78; // Now return: (Tens * + (Tens * 2) + Ones return(temp + (temp >> 2) + (bcd_value & 0x0f));}void ds1307_init(void){ BYTE seconds = 0; i2c_start(); i2c_write(0xD0); // WR to RTC i2c_write(0x00); // REG 0 i2c_start(); i2c_write(0xD1); // RD from RTC seconds = bcd2bin(i2c_read(0)); // Read current "seconds" in DS1307 i2c_stop(); seconds &= 0x7F; delay_us(3); i2c_start(); i2c_write(0xD0); // WR to RTC i2c_write(0x00); // REG 0 i2c_write(bin2bcd(seconds)); // Start oscillator with current "seconds value i2c_start(); i2c_write(0xD0); // WR to RTC i2c_write(0x07); // Control Register i2c_write(0x80); // Disable squarewave output pin i2c_stop();}void ds1307_set_date_time(BYTE day, int8 mth, BYTE year, BYTE dow, BYTE hr, BYTE min, BYTE sec){ sec &= 0x7F; hr &= 0x3F; i2c_start(); i2c_write(0xD0); // I2C write address i2c_write(0x00); // Start at REG 0 - Seconds i2c_write(bin2bcd(sec)); // REG 0 i2c_write(bin2bcd(min)); // REG 1 i2c_write(bin2bcd(hr)); // REG 2 i2c_write(bin2bcd(dow)); // REG 3 i2c_write(bin2bcd(day)); // REG 4 i2c_write(bin2bcd(mth)); // REG 5 i2c_write(bin2bcd(year)); // REG 6 i2c_write(0x80); // REG 7 - Disable squarewave output pin i2c_stop();}void ds1307_set_time(byte hr, byte min, byte sec){ sec &= 0x7F; hr &= 0x3F; i2c_start(); i2c_write(0xD0); // I2C write address i2c_write(0x00); // Start at REG 0 - Seconds i2c_write(bin2bcd(sec)); // REG 0 i2c_write(bin2bcd(min)); // REG 1 i2c_write(bin2bcd(hr)); // REG 2 //i2c_write(0x80); // REG 7 - Disable squarewave output pin i2c_stop();}void ds1307_set_date(byte day, byte mth, byte year, byte dow){ i2c_start(); i2c_write(0xD0); // I2C write address i2c_write(0x03); // Start at REG 0 - Seconds i2c_write(bin2bcd(dow)); i2c_write(bin2bcd(day)); i2c_write(bin2bcd(mth)); i2c_write(bin2bcd(year)); i2c_write(0x80); // REG 7 - Disable squarewave output pin i2c_stop();}void ds1307_get_date(BYTE &day, BYTE &mth, BYTE &year, BYTE &dow){ i2c_start(); i2c_write(0xD0); i2c_write(0x03); // Start at REG 3 - Day of week i2c_start(); i2c_write(0xD1); dow = bcd2bin(i2c_read() & 0x7f); // REG 3 day = bcd2bin(i2c_read() & 0x3f); // REG 4 mth = bcd2bin(i2c_read() & 0x1f); // REG 5 year = bcd2bin(i2c_read(0)); // REG 6 i2c_stop();}void ds1307_get_time(BYTE &hr, BYTE &min, BYTE &sec){ i2c_start(); i2c_write(0xD0); i2c_write(0x00); // Start at REG 0 - Seconds i2c_start(); i2c_write(0xD1); sec = bcd2bin(i2c_read() & 0x7f); min = bcd2bin(i2c_read() & 0x7f); hr = bcd2bin(i2c_read(0) & 0x3f); i2c_stop();}
¿Y que era?
Cita de: Leon Pic en 22 de Agosto de 2011, 18:37:01¿Y que era?Biblioteca equivocada