のインタフェースRTCの問題に8952のコード

S

southafrikanse

Guest
こんにちは

私はAT89S8252マイコンインタフェースと私にRTCをDS12887Aている使用します。

どのような液晶ない私私はインターフェイスを得て、話すのコードが必要、?

それをしないinicializeする必要がある私は?どのように送ることができる私は、RTCのライトにCを使用して?

これは歓迎任意です緊急です助け。

 
これはポイントから必要が良い:

http://www.edaboard.com/viewtopic.php?t=141839

限り初期化が懸念している場合は、..上の発振器を持ってに向ける..画像を参照してください添付

よろしくお願いいたします。
IanP
申¥し訳ありませんが、添付ファイルを、この必要があります表¥示するにはログインしての

 
ハイ

RTCは良い選択、良い

私は8052.comと思うの12887のCのコードを完全いた私はいくつか見つかりました

で8052.com ds12887で検索してください

よろしく
Nandhu

 
ds12887は可能¥性がありますobsulate。1307のような他を試してください。

 
を参照してのwww.Microchipc.comコントローラのにDS1307をのインタフェースコーディングサンプルです。

そのICの近くに結晶基板を確認のRTC。その精度を与える高等。

 
ここにしたいですあなたは

http://pdfserv.maxim-ic.com/en/an/app516.pdf

よろしく
Nandhu

 
masud58は書き込み:

ds12887は可能¥性がありますobsulate。
1307のような他を試してください。
 
親愛なる、
必要がcコードpossible.Thankyou場合ヘルプbook.Please mazdiのためのインターフェイス1288を与えられたコードの変更を8051.Lookingのunderstand.Anyコード、シンプルで使いやすい

 
ここではプログラムのビットはいくつかの、より大きいコードプルから。おそらくそこにビット役に立つかもしれないことも。一部では、等ビットをされていない関連、clocks/I2Cのようにただ勉強

の#pragma小/ /小メモリモデル

/ /グローバルに含まれるもの
#は<AT89S8253.h>含まれて
#は<stdio.h>含まれて
#は<stdlib.h>の含まれて
#が含まれます"delay.hに"
#が含まれます"lcd.h"

#0x02の|定義ResetWD()をWDTCON = WDTCON

/ /ビット出力
#はHighを定義々洞天P3_2 / /アクティブ
#は、低定義アクティブDinEnはP3_3 / /
P2_6をバックライト#定義
P2_5をExtSound#定義
P2_4をIntSound#定義
#P2_1 Spare2定義
P2_0をPrintOutを#定義

/ /ビット入力アクティブLow
P3_5をIP1を#定義
P3_6をip2は#定義
#P3_7 IP3が定義

#)を定義するデータSDAのP0_1(ピン/ /接続するために、SDAの
#)が定義SCLのP0_0は/クロック(/接続するためにSCL端子
#は、クロックを定義する設定P0_2 / /設定
#は、インクリメント/定義モーニングP0_3 /
#はデクリメント/定義ダウンP0_4 /

1 ACKを#定義
0 NO_ACK#を定義する
0xD0をスレーブ#定義
#は0x00のWRITE定義
0x01を読んで#定義
#は0x01を定義ERR_ACKの

[定数はunsigned char * DayStr 7] =(("日")、
("月")、
("火")、
("水")、
("木")、
("金")、
("土"));のconst unsigned char型* MonthStr [12] =(("01")、
("2月")、
("03")、
("4月")、
("5")、
("6月")、
("7月")、
("、08")
("9月")、
("10月")、
("11月")、
(")12月");/ /変数(グローバル)
char型のbuf [16]; / /液晶ディスプレイバッファ
unsigned char型データ、私は、p、分= 30、時間= 12、昼間= 3、日付= 15、月= 6、年= 9;
unsigned char型LcdMessage;
[7] RTC_ARR unsigned char型idata; / /バッファ年間秒、分,.....,
unsigned char型idataストア[82 ];//, RxBuf [16];
ビットは一体全体をキャンセル、PrintFlag旗;

////////////////////////////////////////////////// ////////////////////
/ /は、プロトタイプ
ボイドserial_init(ボイド);
)ReadRTCを(unsigned char型*バフ無効;
)WriteRTCを(unsigned char型*バフ無効;
char *をInt2Day(unsigned char型の日);
char *をInt2Month(unsigned char型月);
)無効に変換を(ボイド;
)無効WriteTimeを(ボイド;
)無効GetTimeを(ボイド;
)無効セッティメを(ボイド;
)無効TimeDelayを(ボイド;
)無効DisplayItを(ボイド;

////////////////////////////////////////////////// //////////////////////////////////////////////////
//-------------------------------
/ /変換は、バイト16進1 BCDの1バイトを
//-------------------------------
unsigned char型BCD2HEX(unsigned int型のBCD)

unsigned char型温度;
気温=((> BCDの>

<img src=¥"http://www.edaboard.com/images/smiles/icon_cool.gif¥" alt=¥"クール¥" border=¥"0¥" />

* 100)|は((> BCDの> 4)* 10)|(BCDの&0x0F)が;
戻り温度;



//-------------------------------
/ / I2Cを開始
//-------------------------------
)無効にスタート(ボイド

SDAは= 1;
SCLが= 1;
DelayMs(1); DelayMs(1);
SDAは= 0;
DelayMs(1); DelayMs(1);
SCLが= 0;
DelayMs(1); DelayMs(1);


//-------------------------------
/ / I2Cを停止する
//-------------------------------
)無効停止(無効

SDAは= 0;
DelayMs(1); DelayMs(1);
SCLが= 1;
DelayMs(1); DelayMs(1);
SDAは= 1;


//-------------------------------
/ /のI2C書く
//-------------------------------
データが無効WriteI2Cを(unsigned char型)

私はunsigned char型。
0(一=;私は<8;私 )

SDAは=(データ&0x80に)?1時00分;
SCLが= 1; SCLが= 0;
データ<<= 1;


SCLが= 1;
DelayMs(1); DelayMs(1);
SCLが= 0;



//-------------------------------
/ /のI2Cを読む
//-------------------------------
unsigned char型ReadI2C(ビットACK_Bit)


unsigned char型データ= 0、私;

SDAは= 1;
0(一=;私は<8;私 )

SCLが= 1;
データ<<= 1;
データ=(データ| SDA)の;
SCLが= 0;
DelayMs(1);


(もしACK_Bit == 1)
SDAは= 0; / / ACKを送信

SDAは= 1; / / ACKを送信なし

DelayMs(1); DelayMs(1);
SCLが= 1;
DelayMs(1); DelayMs(1);
SCLが= 0;

データを返します。


//-------------------------------
/ /読み取りRTCが(すべてのリアルタイム)
//-------------------------------
バフ無効ReadRTCを(unsigned char型*の)
()を起動します(;
WriteI2C(0xD0);
WriteI2C(0x00)を;

)を起動します(;
WriteI2C(825784);
*(バフ 0)= ReadI2C応答(ACK); / / 2番目
*(バフ 1)= ReadI2C応答(ACK); / /分
*(バフ 2)= ReadI2C応答(ACK); / /時間
*(バフ 3)= ReadI2C応答(ACK); / /日
*(バフ 4)= ReadI2C応答(ACK); / /日
*(バフ 5)= ReadI2C応答(ACK); / /月
*(バフ 6)= ReadI2C(NO_ACK); / /年
停止();


//-------------------------------
/ / RTCを書く
//-------------------------------
バフ無効WriteRTCを(unsigned char型*の)


)を起動します(;
WriteI2C(0xD0);
WriteI2C(0x00)を;
WriteI2C(*(バフ 0));
WriteI2C(*(バフ 1));
WriteI2C(*(バフ 2));
WriteI2C(*(バフ 3));
WriteI2C(*(バフ 4));
WriteI2C(*(バフ5));
WriteI2C(*(バフ 6));
停止();


//-------------------------------
(BCD)の文字列の日の日付を変換/ /
/ / 1 =サンデイ
/ / 2 =月曜日
/ /そしてように
//-------------------------------
char *をInt2Day(unsigned char型日)

戻りDayStr [日- 1];


//-------------------------------
(BCD)の文字列の今月先月変換/ /
/ / 0x01に= 1月
/ / 0x02の= 2月
/ / ...........
/ / 0x12 = 12月
/ /そしてように
//-------------------------------
char *をInt2Month(unsigned char型月)

戻りMonthStr [BCD2HEX(月)-1];

////////////////////////////////////////////////// //////////////////////////////////////////////////
)無効に変換を(ボイド

ResetWD();
価格場合(> 49&30分<60)価格=価格 ;
価格場合(> 39&24分<50)価格=価格 ;
価格場合(> 29&18分<40)価格=価格 ;
価格場合(> 19&12分<30)価格=価格 ;
価格場合(> 9&6分<20)価格=価格 ;

(もし時間> 19&&12時間<24)時間=時間の ;
(もし時間> 9&6時間<20)時間=時間の ;

18場合(日> 29)日付=日付 ;
(もし日付> 19&&日<30)日付=日付 12;
(もし日付> 9&日<20)日付=日付 6;

今月の場合(> 9&今月<13)月=月 6;

(もし年> 49&&年<60)年=年 30;
(もし年> 39&&年<50)年=年 24;
(もし年> 29&&年<40)年=年 18;
(もし年> 19&&年<30)年=年 12;
(もし年> 9&&年<20)年=年 6;

////////////////////////////////////////////////// ///////////////////////////////
////////////////////////////////////////////////// /////////////////////////////
)無効GetTimeを(ボイド

ReadRTC(&RTC_ARR [0]);

(もしPrintFlag == 0)

ResetWD();
SBUF研究所)(データ=場合(;研究所= 0;)
のprintf("%sが- "Int2Day(RTC_ARR [3]));
SBUF研究所)(データ=場合(;研究所= 0;)
のprintf("%の02bX /%s/20%02bX - "、RTC_ARR [4]、Int2Month(RTC_ARR [5])、RTC_ARR [6]);
SBUF研究所)(データ=場合(;研究所= 0;)
のprintf("%の02bX:%の02bX:%02bX ¥¥ r ¥¥ nを"RTC_ARR [2]、RTC_ARR [1]、RTC_ARR [0]);
SBUF研究所)(データ=場合(;研究所= 0;)
ResetWD();
のprintf("¥¥ rをする¥¥ n");
ResetWD();


(もしPrintFlag == 1)

lcd_goto(0x00)を;
ResetWD();
SBUF研究所)(データ=場合(;研究所= 0;)
のsprintf(bufは、"%の02bX /%の02bXは/%02bX%02bX:%の02bX"、RTC_ARR [4]、RTC_ARR [5]、RTC_ARR [6]、RTC_ARR [2]、RTC_ARR [1]);
SBUF研究所)(データ=場合(;研究所= 0;)
lcd_puts(bufが);
ResetWD();


)////////////////////////////////////////////////// //////////////////////////////
//-----------------------------------
/ /セットアップ時間を有効発振器
//-----------------------------------
)無効セッティメを(ボイド

PrintFlag = 1;
lcd_goto(0x00)を;
lcd_puts("分0-59");
DelayMs(255); DelayMs(255);
ResetWD();
DelayMs(255); DelayMs(255);
)中(セット== 0)(ResetWD(;)

(中にセット== 1)

ResetWD();
();};場合(モーニング== 0)分 ;中(モーニング== 0)(ResetWD
(もしダウン== 0)分- ;中(ダウン== 0)(ResetWD ();};
(もし分<1)価格= 59;
(もし分> 59)分= 1;
lcd_puts("");
のsprintf(bufは、"分:%の府"、分);
lcd_puts(bufが);
休憩する場合(設定== 0);


lcd_goto(0x00)を;
lcd_puts("時間0-24");
DelayMs(255); DelayMs(255);
ResetWD();
DelayMs(255); DelayMs(255);
)中(セット== 0)(ResetWD(;)

(中にセット== 1)

ResetWD();
();};場合(モーニング== 0)時間 ;中(モーニング== 0)(ResetWD
(もしダウン== 0)時間- ;中(ダウン== 0)(ResetWD ();};
時間が(時間<1)= 23;
時間が(時間> 23)= 1;
lcd_puts("");
のsprintf(bufは、"時間:%の府"、時間);
lcd_puts(bufが);
休憩する場合(設定== 0);


lcd_goto(0x00)を;
lcd_puts("日1-7日= 1");
DelayMs(255); DelayMs(255); DelayMs(255); DelayMs(255);
)中(セット== 0)(ResetWD(;)

(中にセット== 1)

ResetWD();
();};場合(モーニング== 0)日 ;中(モーニング== 0)(ResetWD
(もしダウン== 0)日- ;中(ダウン== 0)(ResetWD ();};
のsprintf(bufは、"日:%の府"、昼間);
7場合(日<1)日=;
場合は1(日> 7)日=;
lcd_puts("");
lcd_goto(0x00)を;
lcd_puts(bufが);
休憩する場合(設定== 0);


lcd_goto(0x00)を;
lcd_puts("日付1-31");
DelayMs(255); DelayMs(255); DelayMs(255); DelayMs(255);
)中(セット== 0)(ResetWD(;)

(中にセット== 1)

ResetWD();
();};場合(モーニング== 0)日付 ;中(モーニング== 0)(ResetWD
(もしダウン== 0)日- ;中(ダウン== 0)(ResetWD ();};
日付場合(<1)日= 31;
日付場合(> 31)日= 1;
lcd_puts("");
のsprintf(bufは、"日付:%の府"、日付);
lcd_puts(bufが);
休憩する場合(設定== 0);


lcd_goto(0x00)を;
lcd_puts("今月1-12");
DelayMs(255); DelayMs(255);
ResetWD();
DelayMs(255); DelayMs(255);
)中(セット== 0)(ResetWD(;)

(中にセット== 1)

ResetWD();
();};場合(モーニング== 0)今月 ;中(モーニング== 0)(ResetWD
(もしダウン== 0)月- ;中(ダウン== 0)(ResetWD ();};
今月の場合(<1)月= 12;
今月の場合(> 12)月= 1;
lcd_puts("");
のsprintf(bufは、"月:%の府"、月);
lcd_puts(bufが);
休憩する場合(設定== 0);


lcd_goto(0x00)を;
lcd_puts("年");
DelayMs(255); DelayMs(255); DelayMs(255); DelayMs(255);
)中(セット== 0)(ResetWD(;)

(中にセット== 1)

ResetWD();
の場合(最大== 0の年)が、中に(モーニング== 0)(ResetWD ();};
();};場合(ダウン== 0)年- ;中(ダウン== 0)(ResetWD
59場合(年<1)年=;
年場合(> 59)年= 1;
lcd_puts("");
のsprintf(bufは、"年:%の府"、年);
lcd_puts(bufが);
休憩する場合(設定== 0);


変換();
WriteTime();
lcd_goto(0x00)を;
lcd_puts("データ記録");
ResetWD();
DelayMs(255); DelayMs(255);
ResetWD();
PrintFlag = 1; getTime()が;
DelayMs(255); DelayMs(255);
ResetWD();
DelayMs(255); DelayMs(255);
ResetWD();
DelayMs(255); DelayMs(255);
ResetWD();
DelayMs(255); DelayMs(255);
ResetWD();
DelayMs(255); DelayMs(255);
ResetWD();
DelayMs(255); DelayMs(255);
ResetWD();
DelayMs(255); DelayMs(255);
ResetWD();
PrintFlag = 0;


////////////////////////////////////////////////// /////////////////////////
)無効WriteTimeを(ボイド

ResetWD();
ReadRTC(&RTC_ARR [0]);
RTC_ARR [0] = RTC_ARR [0]は&0x7Fの/ /(発振器を有効にするビット7 = 0)
RTC_ARR [1] =直前;
RTC_ARR [2] =時間/ / 24時間モード(ビット6 = 0)
RTC_ARR [3] =日/ /日= 1または日曜日
RTC_ARR [4] =日付;
RTC_ARR [5] =月;
RTC_ARR [6] =年;
WriteRTCは(&RTC_ARR [0]); / / RTCを設定

机能¥//////////////////////////////の///////////////// END //////////////追加秒後に43:申¥し訳ありませんが、と言うのを忘れて、それがDS1307です

 
ほしければ、これはヘルプができますany1動作していないですCコードで12887とのインターフェース8052ですか?
#は<reg51.h>含まれて
#は<absacc.h>含まれて
unsigned char型時間、分、秒。
ボイドbcdconv(unsigned char型mybyte);
ボイドシリアル(unsigned char型x)は;
sbitのRS = P2の^ 2;
sbitニンテンドーDS = P3は^ 7;
sbit RW1 = P3は^ 6;
ボイド印刷(unsigned char型* chを);
sbit RWの= P2の^ 3;
sbitメール= P2の^ 4;
)rsを無効(unsigned char型チャンネル、ビット置く。
)無効にクリア(無効;
ボイド遅延(unsigned int型);
無効表¥示();
ボイドは)initlcd(ボイド;
ボイド印刷(unsigned char型* chを);
)無効メイン(ボイド

遅延(200);
)initlcd(;
XBYTE [10] = 0x20の;
XBYTE [11] = 0x83の;
XBYTE [0] = 0x55;
XBYTE [2] = 0x58;
XBYTE [4] = 0x36;
XBYTE [7] = 0x19;
XBYTE [8] = 0x10を。
XBYTE [9] = 0x04を。
XBYTE [11] = 0x03に。

TMOD = 0x20の;
Th1細胞= 0xfdの;
SCON = 0x50が。
TR1の= 1;
/ /ディスプレイ();
)中(1

シリアル("RTCは");
時間= XBYTE [4];
bcdconv(時間);
シリアル(':');
分= XBYTE [2];
bcdconv(分);
シリアル(':');
秒= XBYTE [0];
bcdconv(秒);
)は、シリアルコード(0x0D;
)シリアル(アスキー;
ディスプレイ();
))
/ /ディスプレイ();

ボイドbcdconv(unsigned char型mybyte)

unsigned char型のx、y;
はx = mybyte &0XF0;
xが= × 0x30を件。
はy =はmybyte &0XF0;
イ= yは4>>;
イ= yは0x30を件。
)シリアル(イ;
シリアル(x)は;

ボイドシリアル(unsigned char型x)は

SBUF = ×;
(中日本TI == 0);
TIは= 0;

)rsを無効(unsigned char型チャンネル、ビット配置

メール= 1;
RWの= 0;
P0は=チャンネル;
のRS = rsの;
遅延(1);
メール= 0;
遅延(1);
RWの= 1;
戻り値;

)無効にクリア(ボイド

)プット(0x01は、0;
遅延(100);
戻り値;


ボイド遅延(unsigned int型のt)

unsigned int型のk、lの;
トン<のために(リットル= 0; lの;リットル )
(のk = 0; kの<975; kは );
戻り値;

ボイドは)initlcd(ボイド

遅延(250);
)プット(が採取、0;
遅延(250);
)プット(0x0Cは、0;
遅延(250);
)プット(0x0E、0;
遅延(250);
)プット(0x10を、0;
遅延(250);
)プット(0x01は、0;
遅延(250);
)プット(0x06と、0;
/ /遅延(250);
/ /)入れ(0x0Cは、0;
印刷("RTCは");
)クリア(;
遅延(100);
戻り値;

ボイドディスプレイ()

印刷("時間");
)置く時間を、1(;
)入れSBUF、1(;
遅延(100);
/ /クリア();
)プット(0xC0、0;
印刷("分");
)置く分、1(;
遅延(100);
/ /クリア();
)プット(0x94、0;
印刷("秒");
)プット(秒1;
遅延(100);
/ /クリア();

ボイド印刷(unsigned char型* chを)

)中(* chを

)置く* chを、1(;
/ /)入れ(0x10を、0;
チャンネル ;

戻り値;


 

Welcome to EDABoard.com

Sponsor

Back
Top