Problema su DS12887

D

DrWhoF

Guest
Aš bandymai su RTC DS12887, 87C52, 74LS373 ir DS12887 grandinė, ant vero-lenta.
Galiu naudotis registrais, sekundės, metai ir kontrolė: 0A, 0B ir 0C, bet aš negaliu prisijungti prie registrų minučių, valandų, dienų ir mėnesių.Jis atrodo taip: sekundės tikimės 00-59, tačiau nėra dėl minučių skaičiaus ir panašiai.
Gebu parašyti skaičių ir skaityti (00 iki 99) metų užsiregistruoti.
Aš išbandyti DS12887 kitoje grandinė ir jis yra OK.
Kodėl taip keistai elgesį ir whay gali būti priežastis?
Ačiū.
DrWho

 
Ar uou turi 2 šių DS12887?Jis neturi jokios prasmės ..
Ir, kas yra priežastis, jūs turite 74.373?
DS12877 jau built-in multipleksines DUOMENŲ / adresą ir autobusų Viskas ko jums reikia prisijungti yra ALE, RD, WR ir / ar IRQ signalus ..
Linkėjimai,
IanP

 
Turiu tik vieną DS12887 ir 27C512 išorės programa atmintis (74373 naudojama šiam tikslui).
DS12877 yra prijungtas prie AD autobusas su visais valdymo signalus vietoje.
Kaip sakiau galiu skaityti sekundžių ir valandų, ir aš galiu naudotis visais kontrolės registrų ir atminties vietose.
Ačiū.
DrWho

 
Jei pasakysi, kad DS12887 pats savaime nėra klaidingas tada tikriausiai turite programinės įrangos klaidas ..
Dukart patikrinkite kodo sekcijų, kur jūs skaitote metus, mėnesį, .., ir sekundes, o kur rodyti ar siųsti kažkur rezultatus ..arba, jei norite rašyti juos čia patikrinimo ..

Linkėjimai,
IanP

 
Tai kodą, kurį galiu naudoti skaityti iš DS12877:
Kodas

Skaitant DS12887MOV R0, # 0Ah

Palaukite: MOVX, @ R0

JB ACC.7 palauktiMOV R0, # 00h

MOVX, @ R0

MOV ms,

MOV R0, # 02h

MOVX, @ R0

MOV MMin,

MOV R0, # 04H

MOVX, @ R0

MOV MHour,

MOV R0, # 07h

MOVX, @ R0

MOV mday,

MOV R0, # 08h

MOVX, @ R0

MOV MMonth,

MOV R0, # 09h

MOVX, @ R0

MOV MYear,

 
Skaityti RTC kodas atrodo puikiai bauda ..
Tačiau kitų skyrių (mėnuo, diena, valanda ir minutė), kai:
ANL A, # 0Fh (žemesnės kandinėti)
jums reikia įkelti su R6 ir išsiųsti R6, kad, pavyzdžiui, mėnesį turėtų atrodyti taip:

Mėnuo: mov, MMonth
SWAP
ANL A, # 0Fh
MOV R6,
LCALL Send_R6
MOV, MMonth
ANL A, # 0FhMOV R6,LCALL Send_R6

..ir manau, kad yra jūsų trūksta Mėnesių, dienas, valandas ir minutes ..
Good Luck and Regards,
IanP

 
DrWhoF rašė:

Oho, tai veikia.

Ačiū labai, labai daug.

DrWho
 
Nemanau, kad bet koks kodas parašytas 8.051 ir DS12887 bus bet padėti Jums ..
Pirmiausia DS12887 naudoja multipleksines 8-bitų adreso duomenis autobusu, kuris yra gana įprasta 8.051 architektūra, tačiau "keista" už atsakingiesiems ..

Nuo IPS vartotojo požiūriu daug geresnis variantas yra RTC su I2C sąsaja, pavyzdžiui PCF8583 (http://www.amresearch.com/datasheets/pcf8583.pdf), arba DS1337 (http://www.maxim-ic.com / quick_view2.cfm/qv_pk/3128) ..

Regrads,
IanP

 
# include <reg51.h>
# include <absacc.h>
sbit RS = P1 ^ 2;
sbit RW = P1 ^ 3;
sbit E = P1 ^ 4;
tuščia įdėti (unsigned char ch, tiek RS);
tuščia vėlavimą (unsigned int t);
void init (void);
void main ()
(
int i = 0x00;
delsimas (500);
/ / P0 = 0xFF / / Įvedimo uostas
init ();
Put ( 'R', 1);
pateikti ( "T", 1);
pateikti ( "C", 1);
Put (0xC0, 0);
vėlavimą (2);
XBYTE [10] = 0x20;
XBYTE [11] = 0x83;
XBYTE [11] = 0x03;
XBYTE [0] = 41;
/ / XBYTE [11] = 0x03;
while (1)
(
Put (0xC0, 0);
for (i = 0x00; i <0x0A i )
(
/ / XBYTE [0] ;
įdėti ((XBYTE [0] <<0x0F) 0 x30, 1);
delsimas (500);
Put (0x94, 0);
įdėti ((XBYTE [10] <<0x0F) 0 x30, 1);
)
/ * if (XBYTE [0]> = 0x39)
XBYTE [0] = 0x30;
*
)
)
void init (void)
(
Put (0x3C, 0) / / Nustatykite sąsaja ilgis
Put (0x01, 0); / / Atviras kalbomis
Put (0x06, 0) / / Nustatykite žymeklį perkelti kryptis
Put (0x0E, 0) / / Enable ekrane kursorius
return;
)
tuščia įdėti (unsigned char ch, tiek RS)
(
E = 1;
SM = 0;
P2 = CH;
RS = RS;
nedelsiant (1);
E = 0;
nedelsiant (1);
SM = 1;
return;
)
tuščia vėlavimą (unsigned int t)
(Unsigned int k, l;
for (l = 0; L <T, L )
for (k = 0, k <900; k );
return;
)

 

Welcome to EDABoard.com

Sponsor

Back
Top