Noman Yousaf
Full Member level 4
- Joined
- Nov 19, 2003
- Messages
- 208
- Helped
- 3
- Reputation
- 6
- Reaction score
- 2
- Trophy points
- 1,298
- Location
- Lahore Pakistan
- Activity points
- 1,763
hi
i am using RTC DS1307 with pic16f887.
using very common code for mikro c, avilable on net.
problem is
when i run the code on debugger, "read_time" routine sticks on "I2C1_start();"
can anybody help?
code is:
i am using RTC DS1307 with pic16f887.
using very common code for mikro c, avilable on net.
problem is
when i run the code on debugger, "read_time" routine sticks on "I2C1_start();"
can anybody help?
code is:
Code C - [expand] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 // LCD module connections sbit LCD_RS at RB3_bit; sbit LCD_EN at RB2_bit; sbit LCD_D4 at RB4_bit; sbit LCD_D5 at RB5_bit; sbit LCD_D6 at RB6_bit; sbit LCD_D7 at RB7_bit; sbit LCD_RS_Direction at TRISB3_bit; sbit LCD_EN_Direction at TRISB2_bit; sbit LCD_D4_Direction at TRISB4_bit; sbit LCD_D5_Direction at TRISB5_bit; sbit LCD_D6_Direction at TRISB6_bit; sbit LCD_D7_Direction at TRISB7_bit; // End LCD module connections char txt1[] = "mikroElektronika"; char txt2[] = "EasyPIC6"; char txt3[] = "Lcd4bit"; char txt4[] = "example"; char i; // Loop variable unsigned char sec, min1, hr, week_day, day, mn, year; char *txt, tnum[4]; void Zero_Fill(char *value) { // fill text repesentation if (value[1] == 0) { // with leading zero value[1] = value[0]; value[0] = 48; value[2] = 0; } } void Read_Time(char *sec, char *min, char *hr, char *week_day, char *day, char *mn, char *year) { I2C1_Start(); I2C1_Wr(0xD0); I2C1_Wr(0); I2C1_Repeated_Start(); I2C1_Wr(0xD1); *sec =I2C1_Rd(1); *min =I2C1_Rd(1); *hr =I2C1_Rd(1); *week_day =I2C1_Rd(1); *day =I2C1_Rd(1); *mn =I2C1_Rd(1); *year =I2C1_Rd(0); I2C1_Stop(); } //-------------------- Formats date and time void Transform_Time(char *sec, char *min, char *hr, char *week_day, char *day, char *mn, char *year) { *sec = ((*sec & 0x70) >> 4)*10 + (*sec & 0x0F); *min = ((*min & 0xF0) >> 4)*10 + (*min & 0x0F); *hr = ((*hr & 0x30) >> 4)*10 + (*hr & 0x0F); *week_day =(*week_day & 0x07); *day = ((*day & 0xF0) >> 4)*10 + (*day & 0x0F); *mn = ((*mn & 0x10) >> 4)*10 + (*mn & 0x0F); *year = ((*year & 0xF0)>>4)*10+(*year & 0x0F); } //-------------------- Output values to LCD void Display_Time(char sec, char min, char hr, char week_day, char day, char mn, char year) { switch(week_day){ case 1: txt="Sun"; break; case 2: txt="Mon"; break; case 3: txt="Tue"; break; case 4: txt="Wed"; break; case 5: txt="Thu"; break; case 6: txt="Fri"; break; case 7: txt="Sat"; break; } Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); // Clear display Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off Lcd_Out(1,1,txt); Lcd_Chr(1, 6, (day / 10) + 48); // Print tens digit of day variable Lcd_Chr(1, 7, (day % 10) + 48); // Print oness digit of day variable Lcd_Chr(1, 9, (mn / 10) + 48); Lcd_Chr(1,10, (mn % 10) + 48); Lcd_Chr(1,15, year + 48); // Print year vaiable + 8 (start from year 2008) Lcd_Chr(2, 6, (hr / 10) + 48); Lcd_Chr(2, 7, (hr % 10) + 48); Lcd_Chr(2, 9, (min / 10) + 48); Lcd_Chr(2,10, (min % 10) + 48); Lcd_Chr(2,12, (sec / 10) + 48); Lcd_Chr(2,13, (sec % 10) + 48); } void Init_Main() { // ADCON1 = 0x0F; // page 268 // ANSEL=0; // ANSELH=0; trisc =0; Lcd_Init(); // Initialize LCD Lcd_Cmd(_LCD_CLEAR); // Clear LCD display Lcd_Cmd(_LCD_CURSOR_OFF); // Turn cursor off I2C1_Init(100000); // initialize I2C Lcd_Chr(1,8,'.'); Lcd_Chr(1,11,'.'); txt = "Time:"; Lcd_Out(2,1,txt); Lcd_Chr(2,8,':'); Lcd_Chr(2,11,':'); txt = "201"; Lcd_Out(1,12,txt); Lcd_Cmd(_LCD_CURSOR_OFF); } void main() { Init_Main(); // Read_Time(&sec,&min1,&hr,&week_day,&day,&mn,&year); // read time from RTC(DS1307) // Transform_Time(&sec,&min1,&hr,&week_day,&day,&mn,&year); // format date and time // Display_Time(sec, min1, hr, week_day, day, mn, year); // prepare and display on LCD // Delay_ms(1000); while (1) { Read_Time(&sec,&min1,&hr,&week_day,&day,&mn,&year); // read time from RTC(DS1307) // Transform_Time(&sec,&min1,&hr,&week_day,&day,&mn,&year); // format date and time // Display_Time(sec, min1, hr, week_day, day, mn, year); // prepare and display on LCD Delay_ms(1000); // wait 1s } }
Last edited by a moderator: