G
GrandAlf
Guest
Haluaisin kovasti, jos joku voi tarkistaa seuraavat minua.Ei voi paikalla sitä.Hanki virhe "liian monta todelliset parametrit" DS1302GetAll, kun vaatii aikaa.Monet kiitokset.
////////////////////////////////////////////////// ///////////////////////////////////////
mitätön aika ()
(
unsigned char toinen, minuutti, tunti, päivä, kuukausi-, viikko, vuosi;
DS1302Init ();
lcd_init ();
lcd_puts ( '\ f');
DS1302GetAll (toinen, minuutti, tunti, päivä, kuukausi-, viikko, vuosi);
printf (lcd_puts, "% 02u /% 02u /% 02u% 02u:% 02u", päivä, kuukausi, vuosi, tunti, minuutti);
printf ( "Date% 02u /% 02u /% 02u \ n \ rTime% 02u:% 02u \ n \ r", päivä, kuukausi, vuosi, tunti, minuutti);
DelayMs (250);
)
////////////////////////////////////////////////// //////////////////////////////////////
/ / DS1302.h
# ifndef DS1302_H
#
define DS1302_H
#
include <AT89S8253.h>
#
include <intrins.h>
sbit DS1302Sclk = P0 ^ 0;
sbit DS1302Io = P0 ^ 1;
sbit DS1302Ce = P0 ^ 2;
sbit ACC0 = ACC ^ 0;
sbit ACC7 = ACC ^ 7;
typedef struct __SYSTEMTIME__
(
unsigned char toinen;
unsigned char minuutissa;
unsigned char h;
unsigned char päivämäärä;
unsigned char Kuukausi;
unsigned char Viikko;
unsigned char Vuosi;
)
SYSTEMTIME;/ / Rekisteröidy osoite lukemaan ja kirjoittamaan määritelmän makron
#
define SEC_WRITE 0x80
#
define SEC_READ 0x81
#
define MIN_WRITE 0x82
#
define MIN_READ 0x83
#
define HOUR_WRITE 0x84
#
define HOUR_READ 0x85
#
define DATE_WRITE 0x86
#
define DATE_READ 0x87
#
define MONTH_WRITE 0x88
#
define MONTH_READ 0x89
#
define WEEK_WRITE 0x8a
#
define WEEK_READ 0x8b
#
define YEAR_WRITE 0x8c
#
define YEAR_READ 0x8d
#
define WP_WRITE 0x8e
#
define WP_READ 0x8f
#
define TCS_WRITE 0x90
#
define TCS_READ 0x91
/ / RAM lukea ja kirjoittaa osoite makron määritelmän mukaan tähän osoitteeseen tag säilyttämiseen käytettyjen käynnistystoimien.
#
define SET_FLAG_WRITE 0xC0
#
define SET_FLAG_READ 0xc1
/ / RAM Burst-tilassa, jotta voidaan lukea ja kirjoittaa sanan
#
define RAM_BURST_WRITE 0xFE
#
define RAM_BURST_READ 0xff
/ / Burst Mode Rekisteröidy komento lukea ja kirjoittaa sanan
#
define CLOCK_BURST_WRITE 0xbe
#
define CLOCK_BURST_READ 0xBF
/ / Kirjoita suojata asetukset
#
define WP_ON 0x80
#
define WP_OFF 0x00
/ / Makro määritelmä: DS1302 on alustettu.
#
define IS_SET 0xAA
#
define NOT_SET 0x00
/ / CE, IO, SCLK linja toiminnan makron määritelmän tarkoituksena Näin on foorumi tulevaisuudessa siirtää muihin sopii, mutta kun
/ / The nastainen mallin numeron, se voi toteuttaa sen?
#
define SETB_DS1302_CE (); DS1302Ce = 1;
#
define CLR_DS1302_CE (); DS1302Ce = 0;
#
define SETB_DS1302_SCLK (); DS1302Sclk = 1;
#
define CLR_DS1302_SCLK (); DS1302Sclk = 0;
#
define PUT_DS1302_IO (); DS1302Io = ACC0;
#
define GET_DS1302_IO (); ACC7 = DS1302Io;
/ / Tehtävä määritelmä
extern mitätön DS1302Init (void);
extern mitätön DS1302WriteByte (unsigned char data);
extern unsigned char DS1302ReadByte (void);
extern mitätön DS1302SetWP (unsigned char lippu);
extern mitätön DS1302GetAll (SYSTEMTIME * Time);
extern mitätön DS1302SetAll (SYSTEMTIME * Time);
# endif/ / DS1302.c
#
include "DS1302.h"
mitätön DS1302Init (void)
(
unsigned char Flag;
SYSTEMTIME TimeInit;
SETB_DS1302_CE ();
DS1302SetWP (WP_OFF);
DS1302WriteByte (SET_FLAG_READ);
Flag = DS1302ReadByte ();
if (Flag! = IS_SET)
(
DS1302WriteByte (SET_FLAG_WRITE); / / RAM 0xAA, DS1302WriteByte (SET_FLAG_WRITE); / / in RAM vuonna ensimmäinen tavu kirjoittaa 0xAA,
joka on alustettu.
DS1302WriteByte (IS_SET);
TimeInit.Second = 0x00; / / TimeInit.Second = 0x00; / / käynnistystoimien aikaa.
TimeInit.Minute = 0x00;
TimeInit.Hour = 0x00;
TimeInit.Date = 0x12;
TimeInit.Month = 0x03;
TimeInit.Week = 0x06;
TimeInit.Year = 0x09;
DS1302SetAll (& TimeInit);
)
DS1302SetWP (WP_ON); / / DS1302SetWP (WP_ON); / / avata kirjoitussuojattu.
CLR_DS1302_CE (); / / CE?, DS1302 CLR_DS1302_CE (); / / release CE linjan, jotta vältettäisiin misoperation on DS1302.
)
mitätön DS1302SetWP (unsigned char Flag)
(
DS1302WriteByte (WP_WRITE); / / DS1302WriteByte (WP_WRITE); / / kirjoittaa sanan järjestystä.
DS1302WriteByte (lippu); / / DS1302WriteByte (lippu); / / kirjoittaa sisällön rekistereistä.
)
mitätön DS1302WriteByte (unsigned char data)
(
unsigned char i;
ACC = Data;
for (i = 8; i> 0, i -) / / ACC, SCLK, ACC (i = 8; i> 0, i -) / /
kpl kirjoittaa vähintään ACC, minkä jälkeen se lähetetään joka SCLK on pulssitoimiset, ACC siirtynyt oikealle kullekin.
(
CLR_DS1302_SCLK ();
PUT_DS1302_IO ();
SETB_DS1302_SCLK ();
ACC = ACC>> 1;
)
CLR_DS1302_SCLK (); / /, CLR_DS1302_SCLK (); / / negatiivinen hopping luetaan, jotta voidaan valmistautua seuraavaan byte, ja
/ / En tiedä miksi, jos lukea osaksi seuraavan toiminnon, miten ole oikein.
)
unsigned char DS1302ReadByte (void)
(
unsigned char i;
for (i = 8; i> 0, i -) / / IOACC, ACC?for (i = 8; i> 0, i -) / / Lisää jokaisen IO lukea korkein ACC sitten lähettää kielteisen hypätä, lue seuraava jokainen ACC on myös
/ / Siirtynyt oikea.
(
ACC = ACC>> 1;
GET_DS1302_IO ();
SETB_DS1302_SCLK ();
CLR_DS1302_SCLK ();
)
tuotto (ACC);
)
mitätön DS1302SetAll (SYSTEMTIME * Time)
(
SETB_DS1302_CE (); / / CE, DS1302 SETB_DS1302_CE (); / / herättää CE-alueen DS1302 on valmis toimimaan.
DS1302SetWP (WP_OFF); / / DS1302SetWP (WP_OFF); / / sammuta kirjoitussuojattu.
CLR_DS1302_CE (); / / CE, DS1302 CLR_DS1302_CE (); / / release CE linjan, jotta vältettäisiin misoperation on DS1302.
SETB_DS1302_CE (); / / CE, DS1302 SETB_DS1302_CE (); / / herättää CE-alueen DS1302 on valmis toimimaan.
DS1302WriteByte (CLOCK_BURST_WRITE); / / Burst Mode Kirjoita DS1302WriteByte (CLOCK_BURST_WRITE); / /
enter Burst Mode Kirjoita.
DS1302WriteByte (Time-> toinen);
DS1302WriteByte (Time-> minuutissa);
DS1302WriteByte (Time-> h);
DS1302WriteByte (Time-> Päiväys);
DS1302WriteByte (Time-> kuukausi);
DS1302WriteByte (Time-> Week);
DS1302WriteByte (Time-> vuosi);
DS1302SetWP (WP_ON); / / DS1302SetWP (WP_ON); / / avata kirjoitussuojattu.
CLR_DS1302_CE (); / / CE, DS1302??CLR_DS1302_CE (); / / release CE linjan, jotta vältettäisiin misoperation on DS1302.
)
mitätön DS1302GetAll (SYSTEMTIME * Time)
(
SETB_DS1302_CE (); / / CE, DS1302 SETB_DS1302_CE (); / / herättää CE-alueen DS1302 on valmis toimimaan.
DS1302WriteByte (CLOCK_BURST_READ); / / Burst Mode Lue?DS1302WriteByte (CLOCK_BURST_READ); / /
enter Burst Mode Lue.
Aika-> toinen = DS1302ReadByte ();
Aika-> Minute = DS1302ReadByte ();
Aika-> h = DS1302ReadByte ();
Aika-> Date = DS1302ReadByte ();
Aika-> Kuukausi = DS1302ReadByte ();
Aika-> Viikko = DS1302ReadByte ();
Aika-> Vuosi = DS1302ReadByte ();
CLR_DS1302_CE (); / / CE?, DS1302 CLR_DS1302_CE (); / / release CE linjan, jotta vältettäisiin misoperation on DS1302.
)
////////////////////////////////////////////////// ///////////////////////////////////////
mitätön aika ()
(
unsigned char toinen, minuutti, tunti, päivä, kuukausi-, viikko, vuosi;
DS1302Init ();
lcd_init ();
lcd_puts ( '\ f');
DS1302GetAll (toinen, minuutti, tunti, päivä, kuukausi-, viikko, vuosi);
printf (lcd_puts, "% 02u /% 02u /% 02u% 02u:% 02u", päivä, kuukausi, vuosi, tunti, minuutti);
printf ( "Date% 02u /% 02u /% 02u \ n \ rTime% 02u:% 02u \ n \ r", päivä, kuukausi, vuosi, tunti, minuutti);
DelayMs (250);
)
////////////////////////////////////////////////// //////////////////////////////////////
/ / DS1302.h
# ifndef DS1302_H
#
define DS1302_H
#
include <AT89S8253.h>
#
include <intrins.h>
sbit DS1302Sclk = P0 ^ 0;
sbit DS1302Io = P0 ^ 1;
sbit DS1302Ce = P0 ^ 2;
sbit ACC0 = ACC ^ 0;
sbit ACC7 = ACC ^ 7;
typedef struct __SYSTEMTIME__
(
unsigned char toinen;
unsigned char minuutissa;
unsigned char h;
unsigned char päivämäärä;
unsigned char Kuukausi;
unsigned char Viikko;
unsigned char Vuosi;
)
SYSTEMTIME;/ / Rekisteröidy osoite lukemaan ja kirjoittamaan määritelmän makron
#
define SEC_WRITE 0x80
#
define SEC_READ 0x81
#
define MIN_WRITE 0x82
#
define MIN_READ 0x83
#
define HOUR_WRITE 0x84
#
define HOUR_READ 0x85
#
define DATE_WRITE 0x86
#
define DATE_READ 0x87
#
define MONTH_WRITE 0x88
#
define MONTH_READ 0x89
#
define WEEK_WRITE 0x8a
#
define WEEK_READ 0x8b
#
define YEAR_WRITE 0x8c
#
define YEAR_READ 0x8d
#
define WP_WRITE 0x8e
#
define WP_READ 0x8f
#
define TCS_WRITE 0x90
#
define TCS_READ 0x91
/ / RAM lukea ja kirjoittaa osoite makron määritelmän mukaan tähän osoitteeseen tag säilyttämiseen käytettyjen käynnistystoimien.
#
define SET_FLAG_WRITE 0xC0
#
define SET_FLAG_READ 0xc1
/ / RAM Burst-tilassa, jotta voidaan lukea ja kirjoittaa sanan
#
define RAM_BURST_WRITE 0xFE
#
define RAM_BURST_READ 0xff
/ / Burst Mode Rekisteröidy komento lukea ja kirjoittaa sanan
#
define CLOCK_BURST_WRITE 0xbe
#
define CLOCK_BURST_READ 0xBF
/ / Kirjoita suojata asetukset
#
define WP_ON 0x80
#
define WP_OFF 0x00
/ / Makro määritelmä: DS1302 on alustettu.
#
define IS_SET 0xAA
#
define NOT_SET 0x00
/ / CE, IO, SCLK linja toiminnan makron määritelmän tarkoituksena Näin on foorumi tulevaisuudessa siirtää muihin sopii, mutta kun
/ / The nastainen mallin numeron, se voi toteuttaa sen?
#
define SETB_DS1302_CE (); DS1302Ce = 1;
#
define CLR_DS1302_CE (); DS1302Ce = 0;
#
define SETB_DS1302_SCLK (); DS1302Sclk = 1;
#
define CLR_DS1302_SCLK (); DS1302Sclk = 0;
#
define PUT_DS1302_IO (); DS1302Io = ACC0;
#
define GET_DS1302_IO (); ACC7 = DS1302Io;
/ / Tehtävä määritelmä
extern mitätön DS1302Init (void);
extern mitätön DS1302WriteByte (unsigned char data);
extern unsigned char DS1302ReadByte (void);
extern mitätön DS1302SetWP (unsigned char lippu);
extern mitätön DS1302GetAll (SYSTEMTIME * Time);
extern mitätön DS1302SetAll (SYSTEMTIME * Time);
# endif/ / DS1302.c
#
include "DS1302.h"
mitätön DS1302Init (void)
(
unsigned char Flag;
SYSTEMTIME TimeInit;
SETB_DS1302_CE ();
DS1302SetWP (WP_OFF);
DS1302WriteByte (SET_FLAG_READ);
Flag = DS1302ReadByte ();
if (Flag! = IS_SET)
(
DS1302WriteByte (SET_FLAG_WRITE); / / RAM 0xAA, DS1302WriteByte (SET_FLAG_WRITE); / / in RAM vuonna ensimmäinen tavu kirjoittaa 0xAA,
joka on alustettu.
DS1302WriteByte (IS_SET);
TimeInit.Second = 0x00; / / TimeInit.Second = 0x00; / / käynnistystoimien aikaa.
TimeInit.Minute = 0x00;
TimeInit.Hour = 0x00;
TimeInit.Date = 0x12;
TimeInit.Month = 0x03;
TimeInit.Week = 0x06;
TimeInit.Year = 0x09;
DS1302SetAll (& TimeInit);
)
DS1302SetWP (WP_ON); / / DS1302SetWP (WP_ON); / / avata kirjoitussuojattu.
CLR_DS1302_CE (); / / CE?, DS1302 CLR_DS1302_CE (); / / release CE linjan, jotta vältettäisiin misoperation on DS1302.
)
mitätön DS1302SetWP (unsigned char Flag)
(
DS1302WriteByte (WP_WRITE); / / DS1302WriteByte (WP_WRITE); / / kirjoittaa sanan järjestystä.
DS1302WriteByte (lippu); / / DS1302WriteByte (lippu); / / kirjoittaa sisällön rekistereistä.
)
mitätön DS1302WriteByte (unsigned char data)
(
unsigned char i;
ACC = Data;
for (i = 8; i> 0, i -) / / ACC, SCLK, ACC (i = 8; i> 0, i -) / /
kpl kirjoittaa vähintään ACC, minkä jälkeen se lähetetään joka SCLK on pulssitoimiset, ACC siirtynyt oikealle kullekin.
(
CLR_DS1302_SCLK ();
PUT_DS1302_IO ();
SETB_DS1302_SCLK ();
ACC = ACC>> 1;
)
CLR_DS1302_SCLK (); / /, CLR_DS1302_SCLK (); / / negatiivinen hopping luetaan, jotta voidaan valmistautua seuraavaan byte, ja
/ / En tiedä miksi, jos lukea osaksi seuraavan toiminnon, miten ole oikein.
)
unsigned char DS1302ReadByte (void)
(
unsigned char i;
for (i = 8; i> 0, i -) / / IOACC, ACC?for (i = 8; i> 0, i -) / / Lisää jokaisen IO lukea korkein ACC sitten lähettää kielteisen hypätä, lue seuraava jokainen ACC on myös
/ / Siirtynyt oikea.
(
ACC = ACC>> 1;
GET_DS1302_IO ();
SETB_DS1302_SCLK ();
CLR_DS1302_SCLK ();
)
tuotto (ACC);
)
mitätön DS1302SetAll (SYSTEMTIME * Time)
(
SETB_DS1302_CE (); / / CE, DS1302 SETB_DS1302_CE (); / / herättää CE-alueen DS1302 on valmis toimimaan.
DS1302SetWP (WP_OFF); / / DS1302SetWP (WP_OFF); / / sammuta kirjoitussuojattu.
CLR_DS1302_CE (); / / CE, DS1302 CLR_DS1302_CE (); / / release CE linjan, jotta vältettäisiin misoperation on DS1302.
SETB_DS1302_CE (); / / CE, DS1302 SETB_DS1302_CE (); / / herättää CE-alueen DS1302 on valmis toimimaan.
DS1302WriteByte (CLOCK_BURST_WRITE); / / Burst Mode Kirjoita DS1302WriteByte (CLOCK_BURST_WRITE); / /
enter Burst Mode Kirjoita.
DS1302WriteByte (Time-> toinen);
DS1302WriteByte (Time-> minuutissa);
DS1302WriteByte (Time-> h);
DS1302WriteByte (Time-> Päiväys);
DS1302WriteByte (Time-> kuukausi);
DS1302WriteByte (Time-> Week);
DS1302WriteByte (Time-> vuosi);
DS1302SetWP (WP_ON); / / DS1302SetWP (WP_ON); / / avata kirjoitussuojattu.
CLR_DS1302_CE (); / / CE, DS1302??CLR_DS1302_CE (); / / release CE linjan, jotta vältettäisiin misoperation on DS1302.
)
mitätön DS1302GetAll (SYSTEMTIME * Time)
(
SETB_DS1302_CE (); / / CE, DS1302 SETB_DS1302_CE (); / / herättää CE-alueen DS1302 on valmis toimimaan.
DS1302WriteByte (CLOCK_BURST_READ); / / Burst Mode Lue?DS1302WriteByte (CLOCK_BURST_READ); / /
enter Burst Mode Lue.
Aika-> toinen = DS1302ReadByte ();
Aika-> Minute = DS1302ReadByte ();
Aika-> h = DS1302ReadByte ();
Aika-> Date = DS1302ReadByte ();
Aika-> Kuukausi = DS1302ReadByte ();
Aika-> Viikko = DS1302ReadByte ();
Aika-> Vuosi = DS1302ReadByte ();
CLR_DS1302_CE (); / / CE?, DS1302 CLR_DS1302_CE (); / / release CE linjan, jotta vältettäisiin misoperation on DS1302.
)