با سلام
سال نو بر تمام دوستان مبارک
دوستان من با میکرو pic18 یه برنامه نوشتم که از ds1307 میخونه و روی lcd زمان رو نمایش میده. ولی متاسفانه همیشه زمان رو صفر نشون میده.
با برنامه های دیگه هم که روی اینترنت بود چک کردم اما به نتیجه نرسیدم. ممنون میشم کمک کنید. فرکانس میکرو با PLL به 40MHz میرسه.
کامپایلر microC
سال نو بر تمام دوستان مبارک
دوستان من با میکرو pic18 یه برنامه نوشتم که از ds1307 میخونه و روی lcd زمان رو نمایش میده. ولی متاسفانه همیشه زمان رو صفر نشون میده.
با برنامه های دیگه هم که روی اینترنت بود چک کردم اما به نتیجه نرسیدم. ممنون میشم کمک کنید. فرکانس میکرو با PLL به 40MHz میرسه.
کامپایلر microC
کد:
// Lcd pinout settings sbit LCD_RS at RB3_bit; sbit LCD_EN at RB1_bit; sbit LCD_D7 at RB7_bit; sbit LCD_D6 at RB6_bit; sbit LCD_D5 at RB5_bit; sbit LCD_D4 at RB4_bit; // Pin direction sbit LCD_RS_Direction at TRISB3_bit; sbit LCD_EN_Direction at TRISB1_bit; sbit LCD_D7_Direction at TRISB7_bit; sbit LCD_D6_Direction at TRISB6_bit; sbit LCD_D5_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB4_bit; ///////// char txt_1[4],txt_2[4],txt_3[4],txt_4[4]; char i2c_txt[4]; unsigned short tst[4]; //////// unsigned char rtc_read(unsigned char address); void rtc_write(unsigned char address,unsigned char _data); void rtc_init(unsigned char rs,unsigned char sqwe,unsigned char out); void rtc_get_time(unsigned char *hur,unsigned char *min,unsigned char *sec); void rtc_set_time(unsigned char hur,unsigned char min,unsigned char sec); void rtc_get_date(unsigned char *date,unsigned char *month,unsigned char *year); void rtc_set_date(unsigned char date,unsigned char month,unsigned char year); //// void main() { PORTA=LATA=0x00; PORTB=LATB=0x00; PORTC=LATC=0x00; ADCON1=0x0f; TRISA=0xa7; TRISB=0x00; TRISC=0x87; Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); /// I2C1_Init(100000); while (!I2C1_Is_Idle()); rtc_init(0,0,0); hour=12; minute=1; seconde=1; rtc_set_time(hour,minute,seconde); while(1){ Lcd_Chr(1, 1, (hour/10+48)); Lcd_Chr(1, 2, (hour%10+48)); Lcd_Out(1, 3, ":"); Lcd_Chr(1, 4, (minute/10+48)); Lcd_Chr(1, 5, (minute%10+48)); Lcd_Out(1, 6, ":"); Lcd_Chr(1, 7, (seconde/10+48)); Lcd_Chr(1, 8, (seconde%10+48)); rtc_get_time(&hour,&minute,&seconde); delay_ms(500); } } unsigned char rtc_read(unsigned char address) { unsigned char _data; i2c1_start(); I2C1_Repeated_Start(); i2c1_wr(0xd0); i2c1_wr(address); i2c1_start(); i2c1_wr(0xd1); _data=I2C1_Rd(0); i2c1_stop(); return _data; } // void rtc_write(unsigned char address,unsigned char _data) { i2c1_start(); I2C1_Repeated_Start(); i2c1_wr(0xd0); i2c1_wr(address); i2c1_wr(_data); i2c1_stop(); } void rtc_init(unsigned char rs,unsigned char sqwe,unsigned char out) { rs&=3; if (sqwe) rs|=0x10; if (out) rs|=0x80; i2c1_start(); i2c1_wr(0xd0); i2c1_wr(7); i2c1_wr(rs); i2c1_stop(); } void rtc_get_time(unsigned char *hur,unsigned char *min,unsigned char *sec) { I2c1_start(); I2c1_wr(0xd0); I2c1_wr(0); I2C1_Repeated_Start(); I2c1_wr(0xd1); *sec=Bcd2Dec(I2C1_Rd(1)); *min=Bcd2Dec(I2C1_Rd(1)); *hur=Bcd2Dec(I2C1_Rd(0)); while (!I2C1_Is_Idle()); I2c1_stop(); } void rtc_set_time(unsigned char hur,unsigned char min,unsigned char sec) { I2c1_start(); I2C1_Repeated_Start(); I2c1_wr(0xd0); I2c1_wr(0x00); I2c1_wr(sec); I2c1_wr(Dec2Bcd(min)); I2c1_wr(Dec2Bcd(hur)); while (!I2C1_Is_Idle()); I2c1_stop(); } void rtc_get_date(unsigned char *date,unsigned char *month,unsigned char *year) { i2c1_start(); I2C1_Repeated_Start(); i2c1_wr(0xd0); i2c1_wr(4); i2c1_start(); i2c1_wr(0xd1); *date=Bcd2Dec(I2C1_Rd(1)); *month=Bcd2Dec(I2C1_Rd(1)); *year=Bcd2Dec(I2C1_Rd(0)); i2c1_stop(); } void rtc_set_date(unsigned char date,unsigned char month,unsigned char year) { i2c1_start(); I2C1_Repeated_Start(); i2c1_wr(0xd0); i2c1_wr(4); i2c1_wr(Bcd2Dec(date)); i2c1_wr(Bcd2Dec(month)); i2c1_wr(Bcd2Dec(year)); i2c1_stop(); }
دیدگاه