ds1307

J

john_a

Guest
iam koristeći CCS prevodilac iwant AdRiver do sučelja sa RTC ds1307 pic

 
Pogledajte ovdje:
http://www.ccsinfo.com/forum/viewtopic.php?t=19526

se ne bi moglo biti točno ono što želite, ali imate dobar početak.

srdačan pozdrav

 
Možete koristiti ovaj kod.To zaslon s HyperTerminal.1 # include <16F84A.h>
2 # osigurače XT, NOWDT, NOPROTECT
3 # koristiti delay (clock = 4000000)
4 # korištenje RS232 (baud = 9600, xmit = PIN_A1, rcv = PIN_A0)
5 # define DS1307_SDA PIN_B1
6 # define DS1307_SCL PIN_B0
7 # koristite I2C (master, SDA = DS1307_SDA, SCL DS1307_SCL =)
8
9 bitova sec, min, sat, dan, datum, mjesec, godina;
10
11 //==========================
12 / / početni DS1307
13 //==========================
14 void init_DS1307 ()
15 (
16 output_float (DS1307_SCL);
17 output_float (DS1307_SDA);
18)
19 //==========================
20 / / write data bajtova za
21 / / DS1307
22 //==========================
23 void write_DS1307 (byte adrese, BYTE podaci)
24 (
25 short int status;
26 i2c_start ();
27 i2c_write (0xd0);
28 i2c_write (adresa);
29 i2c_write (data);
30 i2c_stop ();
31 i2c_start ();
32 status = i2c_write (0xd0);
33 while (status == 1)
34 (
35 i2c_start ();
36 status = i2c_write (0xd0);
37)
38)
39 //==========================
40 / / čitanje podataka bajtova iz DS1307
41 //==========================
42 BYTE read_DS1307 (bajt adrese)
43 (
44 BYTE podataka;
45 i2c_start ();
46 i2c_write (0xd0);
47 i2c_write (adresa);
48 i2c_start ();
49 i2c_write (0xd1);
50 data = i2c_read (0);
51 i2c_stop ();
52 return (data);
53)
54 void show_date (bajt dan)
55 (
56 switch (dan)
57 (
58 case 1: printf ( "SUN-");
59 break;
60 case 2: printf ( "MON-");
61 break;
62 case 3: printf ( "TUE-");
63 break;
64 case 4: printf ( "SRI-");
65 break;
66 case 5: printf ( "-");
67 break;
68 case 6: printf ( "PET-");
69 break;
70 case 7: printf ( "SAT-");
71 break;
72)
73)
74
75 //==== glavni program ============
76 void main ()
77 (
78 init_ds1307 ();
79 write_ds1307 (0,0 x50); / / set drugi na 00 i omogućiti sat (bit7 = 0)
80 write_ds1307 (1,0 x59); / / set minuta
81 write_ds1307 (2,0 x23); / / set sat
82 write_ds1307 (3,0 x04); / / set dan
83 write_ds1307 (4,0 x03); / / set date
84 write_ds1307 (5,0 x03); / / set mjesec
85 write_ds1307 (6,0 x04); / / godišnje
86 / /
87 while (true)
88 (
89 sec = read_ds1307 (0);
90 min = read_ds1307 (1);
91 sata = read_ds1307 (2);
92 dana = read_ds1307 (3);
93 date = read_ds1307 (4);
94 mjeseci = read_ds1307 (5);
95 godina = read_ds1307 (6);
96 printf ( "\ f");
97 printf ( "% 2X: 2X%:% 2X \ r \ n", sat, min, sek);
98 show_date (dan);
99 printf ( "% 2X /% 2X/20% 2X", datum, mjesec, godina);
100 delay_ms (250);
101)
102)
Žao nam je, ali morate prijaviti kako biste vidjeli ovaj privitak

 
Ja sam bio iskoristiti DS1307 i PIC-a.To je vrlo utvrditi

 
Moj ds1307 vozač.# ifndef RTC_SCL

# define RTC
# define RTC_SDA PIN_C4
# define RTC_SCL PIN_C3

# endif

# define rtc_seconds 0
# define rtc_minutes 1
# define rtc_hours 2
# define rtc_day 3
# define rtc_date 4
# define rtc_month 5
# define rtc_year 6
# define rtc_control 7
# define rtc_rambase 8

# koristite I2C (master, SDA = RTC_SDA, SCL = RTC_SCL, SPORO)

void init_ds1307 () (
output_float (rtc_scl);
output_float (rtc_sda);
)

void write_ds1307 (byte adrese, bajt podataka) (

i2c_start ();
i2c_write (0xd0);
i2c_write (adresa);
i2c_write (data);
i2c_stop ();
/ / Delay_ms (11);
)

read_ds1307 bajt (byte adrese) (
bajt podataka;

i2c_start ();
i2c_write (0xd0);
i2c_write (adresa);
i2c_start ();
i2c_write (0xd1);
/ / While (! I2c_poll ());
data = i2c_read (0);
i2c_stop ();
return (data);
)# odvojena int8 ToBCD (int8 u)
(
return ((in/10) <<4 in% 10);
)

# odvojena int8 Tobin (int8 u)
(
return ((u>> 4) * 10 (u & 0x0F));
)

void rtc_set_datetime (byte datum, byte mj., byte godine, byte dan, byte hr, byte min, bajt secnd) (
write_ds1307 (rtc_date, ToBCD (datum));
write_ds1307 (rtc_month, ToBCD (mj.));
write_ds1307 (rtc_year, ToBCD (year));
write_ds1307 (rtc_day, dan);
write_ds1307 (rtc_hours, ToBCD (hr));
write_ds1307 (rtc_minutes, ToBCD (min));
write_ds1307 (rtc_seconds, ToBCD (secnd));
)

void rtc_get_date (byte i datum, bajta & mj., bajta i godina, dan i bajt) (
date = Tobin (read_ds1307 (rtc_date));
mj. = Tobin (read_ds1307 (rtc_month));
godine = Tobin (read_ds1307 (rtc_year));
dan = read_ds1307 (rtc_day);
)

void rtc_init () (

write_ds1307 (rtc_control, 0x00);
rtc_set_datetime (0,0,0,1,0,0,0);
)

void rtc_get_time (byte & HR, bajta & min, bajt & s) (
hr = Tobin (read_ds1307 (rtc_hours));
min = Tobin (read_ds1307 (rtc_minutes));
sec = Tobin (read_ds1307 (rtc_seconds));
)

void rtc_write_nvr (byte adrese, bajt podataka) (
write_ds1307 (adresa rtc_rambase, data);
)

rtc_read_nvr bajt (byte adrese) (
return (read_ds1307 (adresa rtc_rambase));
)

 

Welcome to EDABoard.com

Sponsor

Back
Top