RTC-8564N の制御 1.RTC の初期化 引数:なし InitRTC( ) IIC2 初期化 iic2_init(0xA2) aCtrReg={0x00, 0x11} DefDate={13,1,1,12,0,0} aAlmReg={0x80,0x80,0x80,0x80,0x00,0x02,0x01} StaCnt=0x82 Seconds レジスタ読み込み Read1_IIC(0x02, &byData) byData 内の VL ビットをチェック VL = 0 YES 制御レジスタ1,2設定 WriteP_IIC(0x00, 2, aCtrReg) FALSE YES 日時設定 RTC_TimeSet(DefDate) FALSE YES アラーム・タイマ制御設定 WriteP_IIC(0x09, 7, aAlmReg) FALSE YES タイマカウント開始 WriteP_IIC(0x0E, 1, &StaCnt) FALSE 1秒フラグセット bSecIntFlg = TRUE YES 注:bSecIntFlg はグローバル 変数です。 IRQ0 割り込みイネーブル FALSE で戻る TRUE で戻る 1 2.IRQ0 割り込み処理 Int_IRQ0( ) IRR1.IRRI0 をチェック IRR1.IRRI0 = 0 YES IRR1.IRRI0 = 0 1秒フラグセット bSecIntFlg = TRUE 戻る 3.RTC にバイナリで日時を設定する 引数:pbyDtime = YYMMDD-hhmmss の順 (各バイナリ) RTC_TimeSet(pbyDtime) pbyDtime の日時を BCD に変換して並び替 える abyBuff[ ] = ssmmhhDDwwMMYY の順 ダミーの曜日セット abyBuff[4] =ダミー曜日 byStop =0x20 byStart=0x00 時計カウント停止 Write1_IIC(0x00, &byStop) 日付・時刻設定 WriteP_IIC(0x02, 7, abyBuff) 時計カウント開始 Write1_IIC(0x00, &byStart) 戻る 2 4.RTC から日時を読み出す 引数:pbyDtime = 日時を格納するアドレス WW-YYMMDD-hhmmss の順に格納(各 BCD) ※WW は無効値 RTC_TimeRead(pbyDtime) 日時読み出し ReadP_IIC(0x02, 7, abyBuff) FALSE YES abyBuff の日時を逆順に並び替える (pbyDtime)=wwYYMMDDhhmmss の順 TRUE で戻る FALSE で戻る 5.現在日時を得る 引数:pDtime = 日時格納アドレス WW-YYMMDD-hhmmss の順に格納(各バイナリ) ※WW は無効値 GetDtime(pDtime) RTC から日時読み込み RTC_TimeRead(abyDtime) FALSE YES (abyDtime)をバイナリに変換する (pDTime) = バイナリ日時 戻る 6.アラーム設定「時分」を読み出す 引数:pbyHour =アラーム設定「時分」を格納するアドレス GetAlarmTime(pbyHour) アラーム設定読み出し ReadP_IIC(0x09, 4, abyBuff) FALSE YES (abyBuff)の時分をバイナリに変換する (pbyHour) = バイナリの時 (pbyHour+1) = バイナリの分 戻る 3 7.アラーム設定「時分」を設定する 引数:bEnable = TRUE でアラーム割り込みを許可 pbyHour = アラーム設定「時分」のアドレス ※「時分」はバイナリ. PutAlarmTime(bEnable, pbyHour) (abyBuff)に'時分を BCD でセットする abyBuff[0] = (pbyHour+1)を BCD に 変換(分) abyBuff[1] = (pbyHour)を BCD に 変換(時) abyBuff[2] = 0x80(日は不問) abyBuff[3] = 0x80(曜は不問) コントロールレジスタ2を読み込む Read1_IIC(0x01, &byCTR2) FALSE YES アラーム設定書き込み WriteP_IIC(0x09, 4, abyBuff) byCTR2 の AF ビットを'0'にする byCTR2 = byCTR2 & 0xF7 bEnable=FALSE YES byCTR2 の AIE ビットを'1'にする byCTR2 = byCTR2 | 0x02 コントロールレジスタ2を書き込む Write1_IIC(0x01, &byCTR2) 戻る 4 8.アラーム割り込みの許可・禁止状態を読み込む 引数:なし GetAlarmInt( ) コントロールレジスタ2を読み込む Read1_IIC(0x01, &byCTR2) FALSE YES (byCTR2 & 0x02) = 0 か =0 YES TRUE で戻る FALSE で戻る 許可状態 禁止状態 9.アラーム割り込みの許可・禁止を書き込み 引数:bEnable =TRUE でアラーム割り込み許可 SetAlarmInt(bEnable) コントロールレジスタ2を読み込む Read1_IIC(0x01, &byCTR2) FALSE bEnable=TRUE YES YES byCTR2 = byCTR2 & 0xFD byCTR2 = byCTR2 | 0x02 コントロールレジスタ2を書き込む Write1_IIC(0x01, &byCTR2) FALSE YES TRUE で戻る FALSE で戻る 5 10.割り込み発生フラグを読み込む 引数:なし GetRTCIntFlag( ) コントロールレジスタ2を読み込む Read1_IIC(0x01, &byCTR2) FALSE YES AF,TF ビットを'0'にする byWrk = byCTR2 & 0xF3 コントロールレジスタ2を書き込む Write1_IIC(0x01, &byWrk) byCTR2 = byCTR2 & 0x0F 0x00 で戻る byCTR2 で戻る 戻値:b0=TIE(周期割り込み有効) b1=AIE(アラーム割り込み有効) b2= TF(周期割り込みあり) b3= AF(アラーム割り込みあり) 11.1秒フラグを読み込む ChkSecIntFlg( ) 引数:なし 割り込みマスク 1秒フラグ読み込み bFlag = bSecIntFlg 1秒フラグクリア bSecIntFlg = FALSE 割り込みマスク復帰 bFlag で戻る 6
© Copyright 2024 ExpyDoc