#include "ds1302.h"
/* 傳送乙個位元組到ds1302通訊匯流排上 */
void ds1302bytewrite(unsigned char dat)
ds1302_io = 1; //最後確保釋放io引腳
}/* 由ds1302通訊匯流排上讀取乙個位元組 */
unsigned char ds1302byteread()
ds1302_ck = 1; //然後拉高時鐘
ds1302_ck = 0; //再拉低時鐘,完成乙個位的操作
}return dat; //最後返回讀到的位元組資料
}/* 用單次寫操作向某一暫存器寫入乙個位元組,reg-暫存器位址,dat-待寫入位元組 */
void ds1302singlewrite(unsigned char reg, unsigned char dat)
/* 用單次讀操作從某一暫存器讀取乙個位元組,reg-暫存器位址,返回值-讀到的位元組 */
unsigned char ds1302singleread(unsigned char reg)
/* 用突發模式連續寫入8個暫存器資料,dat-待寫入資料指標 */
void ds1302burstwrite(unsigned char *dat)
ds1302_ce = 0;
}/* 用突發模式連續讀取8個暫存器的資料,dat-讀取資料的接收指標 */
void ds1302burstread(unsigned char *dat)
ds1302_ce = 0;
}/* 獲取實時時間,即讀取ds1302當前時間並轉換為時間結構體格式 */
void getrealtime(struct stime *time)
/* 設定實時時間,時間結構體格式的設定時間轉換為陣列並寫入ds1302 */
void setrealtime(struct stime *time)
/* ds1302初始化,如發生掉電則重新設定初始時間 */
void initds1302(void)
;ds1302_ce = 0; //初始化ds1302通訊引腳
ds1302_ck = 0;
dat = ds1302singleread(0); //讀取秒暫存器
if ((dat & 0x80) != 0) //由秒暫存器最高位ch的值判斷ds1302是否已停止
}
51微控制器 時鐘
1.時鐘週期是機器週期的12倍 機器週期是晶振頻率的倒數 2.51微控制器1個機器週期 12個時鐘週期,頻率為12mhz,則乙個機器週期為1us,具體到定時器程式就是,假如你想定1ms,那麼微控制器每次加乙個一,就要過1us,那麼1ms就要加1000次,所以用65535 1000 64535 再把6...
微控制器時鐘管理
本章節談一下對微控制器時鐘管理上的一些認識,假如說我們拿到一款stm32f103c8t6的微控制器,設定的是外部晶振8m,然後設定分頻為不分頻,那麼執行時鐘就是72m,就是執行乙個指令週期的時間為1 72m,通過乙個指令的執行時間,我們算出了非常簡單的延時函式,比如 簡單的延時函式 void del...
51微控制器DS1302實時時鐘驅動程式
ds1302是低功耗實時時鐘晶元,它可以對年 月 日 周 時 分 秒進行計時,且具有閏年補償等多種功能。主要特點是採用序列資料傳輸,可為掉電保護電源提供可程式設計的充電功能,並且可以關閉充電功能。1.引腳分析 2.時序分析 1 寫位元組 第乙個位元組是位址位元組,第二個位元組是資料位元組。rst訊號...