de eroare în lectură RTC ajuta

G

GrandAlf

Guest
Mi-ar aprecia foarte mult daca cineva poate verifica următoarele pentru mine.Poate nu pare să-l la faţa locului.Ia eroare "prea mulţi parametri real" DS1302GetAll,
atunci când se solicită timp.Multe mulţumiri.

////////////////////////////////////////////////// ///////////////////////////////////////
Ora nule ()
(
nesemnate caracter al doilea rând, procesul-verbal, ora, data, luna, săptămâna, an;

DS1302Init ();
lcd_init ();

lcd_puts ( '\ f');

DS1302GetAll (al doilea rând, procesul-verbal, ora, data, luna, săptămâna, an);

printf (lcd_puts, "% 02u /% 02u /% 02u% 02u:% 02u", data, luna, anul, ora, minutul);
printf ( "Data% 02u /% 02u /% 02u \ n \ rTime% 02u:% 02u \ n \ r", data, luna, anul, ora, minutul);
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__
(
În al doilea rând caracter nesemnate;
nesemnate caracter proces-verbal;
nesemnate caracter ora;
nesemnate caracter dată;
nesemnate caracter lună;
nesemnate caracter săptămână;
nesemnate caracter Anul;
)
SYSTEMTIME;/ / Register adresa pentru a citi şi scrie în definiţia de la nivel macro
# 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 citi şi scrie pe adresa de macro definiţie, această adresă tag-ul folosit pentru a păstra initializare.
# define SET_FLAG_WRITE 0xc0
# define SET_FLAG_READ 0xc1
/ / RAM izbucni Modul pentru a citi şi a scrie cuvântul
# define RAM_BURST_WRITE 0xfe
# define RAM_BURST_READ 0xff
/ / Izbucni Mod Inregistrare comanda pentru a citi şi a scrie cuvântul
# define CLOCK_BURST_WRITE 0xbe
# define CLOCK_BURST_READ 0xbf
/ / Scrieţi-proteja setările
# define WP_ON 0x80
# define WP_OFF 0x00
/ / Macro definiţie: DS1302 a fost iniţializată.
# define IS_SET 0xAA
# define NOT_SET 0x00
/ / Din CE, IO, SCLK linie de funcţionare a macro definiţie de scopul de a face acest lucru este o platformă pentru viitorul transfer la alte comoditate, dar,
atunci când
/ / Numarul de PIN-ul de design de timp, poate dura de a face acest lucru?
# 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;

/ / Funcţia definiţie
Extern nule DS1302Init (gol);
Extern nule DS1302WriteByte (nesemnate caracter de date);
Extern nesemnate caracter DS1302ReadByte (gol);
Extern nule DS1302SetWP (nesemnate caracter Flag);
Extern nule DS1302GetAll (SYSTEMTIME * timp);
Extern nule DS1302SetAll (SYSTEMTIME * timp);
# endif/ / DS1302.c

# include "DS1302.h"

nule DS1302Init (gol)
(
nesemnate caracter de pavilion;
SYSTEMTIME TimeInit;

SETB_DS1302_CE ();
DS1302SetWP (WP_OFF);
DS1302WriteByte (SET_FLAG_READ);
Flag DS1302ReadByte = ();

dacă (Flag! = IS_SET)
(
DS1302WriteByte (SET_FLAG_WRITE); / / RAM 0xaa, DS1302WriteByte (SET_FLAG_WRITE); / / în RAM în primul octet scrie 0xaa, care a fost iniţializată.
DS1302WriteByte (IS_SET);
TimeInit.Second = 0x00; / / TimeInit.Second = 0x00; / / initializare timp.
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); / / deschide un protejat la scriere.
CLR_DS1302_CE (); / / CE?, DS1302 CLR_DS1302_CE (); / / versiune CE linie, pentru a evita misoperation din DS1302.
)

nule DS1302SetWP (nesemnate caracter de pavilion)
(
DS1302WriteByte (WP_WRITE); / / DS1302WriteByte (WP_WRITE); / / scrie cuvântul pentru.
DS1302WriteByte (pavilion); / / DS1302WriteByte (pavilion); / / scrie conţinutul registrelor.
)

nule DS1302WriteByte (nesemnate caracter de date)
(
nesemnate caracter i;
ACC = de date;
for (i = 8; i> 0; i -) / / ACC, SCLK, pentru ACC (i = 8; i> 0; i -) / / fiecare scrie un minim de ACC, apoi trimis pe un SCLK este pulsed, ACC mutat de la dreapta, pentru fiecare dintre ele.
(
CLR_DS1302_SCLK ();
PUT_DS1302_IO ();
SETB_DS1302_SCLK ();
ACC ACC =>> 1;
)
CLR_DS1302_SCLK (); / /, CLR_DS1302_SCLK (); / / negativ ţopăială sunt citite în scopul de a pregăti următoarea byte, şi
/ / Nu ştiu de ce, în cazul în care declaraţia citi în următorul funcţiei, cu privire la modul nu dreapta.
)

nesemnate caracter DS1302ReadByte (gol)
(
nesemnate caracter i;
for (i = 8; i> 0; i -) / / IOACC, ACC??for (i = 8; i> 0; i -) / / Adauga după fiecare IO pentru a citi cele mai înalte ACC, apoi a trimite un salt negativ, citiţi în continuare, în fiecare ACC este, de asemenea,
/ / Mutat de la o dreapta.
(
ACC ACC =>> 1;
GET_DS1302_IO ();
SETB_DS1302_SCLK ();
CLR_DS1302_SCLK ();
)
reveni (ACC);
)

nule DS1302SetAll (SYSTEMTIME * Ora)
(
SETB_DS1302_CE (); / / CE, DS1302 SETB_DS1302_CE (); / / ridică CE rând, DS1302 este gata pentru a funcţiona.
DS1302SetWP (WP_OFF); / / DS1302SetWP (WP_OFF); / / a opri protejat la scriere.
CLR_DS1302_CE (); / / CE, DS1302 CLR_DS1302_CE (); / / versiune CE linie, pentru a evita misoperation din DS1302.

SETB_DS1302_CE (); / / CE, DS1302 SETB_DS1302_CE (); / / ridică CE rând, DS1302 este gata pentru a funcţiona.
DS1302WriteByte (CLOCK_BURST_WRITE); / / izbucni Mode Scrie DS1302WriteByte (CLOCK_BURST_WRITE); / / intre izbucni Mode Scrie.
DS1302WriteByte (Ora-> În al doilea rând);
DS1302WriteByte (Ora-> minut);
DS1302WriteByte (Ora-> ora);
DS1302WriteByte (Ora-> Data);
DS1302WriteByte (Ora-> Luna);
DS1302WriteByte (Ora-> Săptămâna);
DS1302WriteByte (Ora-> an);
DS1302SetWP (WP_ON); / / DS1302SetWP (WP_ON); / / deschide un protejat la scriere.
CLR_DS1302_CE (); / / CE, DS1302????CLR_DS1302_CE (); / / versiune CE linie, pentru a evita misoperation din DS1302.
)

nule DS1302GetAll (SYSTEMTIME * Ora)
(
SETB_DS1302_CE (); / / CE, DS1302 SETB_DS1302_CE (); / / ridică CE rând, DS1302 este gata pentru a funcţiona.
DS1302WriteByte (CLOCK_BURST_READ); / / izbucni Mode citit?DS1302WriteByte (CLOCK_BURST_READ); / / intre izbucni Mode Citeşte.
Time-> În al doilea rând DS1302ReadByte = ();
Time-> Minut DS1302ReadByte = ();
Time-> Hour DS1302ReadByte = ();
Time-> Data = DS1302ReadByte ();
Time-> luna = DS1302ReadByte ();
Time-> Săptămâna = DS1302ReadByte ();
Time-> Anul DS1302ReadByte = ();
CLR_DS1302_CE (); / / CE?, DS1302 CLR_DS1302_CE (); / / versiune CE linie, pentru a evita misoperation din DS1302.
)

 

Welcome to EDABoard.com

Sponsor

Back
Top