微控制器時鐘程式(4)ds1302 c

2021-08-03 00:21:12 字數 1235 閱讀 9326

#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訊號...