SPI時鐘晶片DS1302的應用

2021-01-11 電子產品世界

DS1302 是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5V~5.5V。採用三線接口與CPU進行同步通信,並可採用突發方式一次傳送多個字節的時鐘信號或RAM數據。DS1302內部有一個31×8的用於臨時性存放數據的RAM寄存器。採用普通32.768kHz晶振!RST是復位/片選線,通過把RST輸入驅動置高電平來啟動所有的數據傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節或多字節數據的傳送手段。當RST為高電平時,所有的數據傳送被初始化,允許對DS1302進行操作。如果在傳送過程中RST置為低電平,則會終止此次數據傳送,I/O引腳變為高阻態。上電運行時,在Vcc≥2.5V之前,RST必須保持低電平。只有在SCLK為低電平時,才能將RST置為高電平。I/O為串行數據輸入輸出端(雙向),在控制指令字輸入後的下一個SCLK時鐘的上升沿時,數據被寫入DS1302,數據輸入從低位即位0開始。同樣,在緊跟8位的控制指令字後的下一個SCLK脈衝的下降沿讀出DS1302的數據,讀出數據時從低位0位到高位7。SCLK始終是輸入端。


//======================================驅動
sbit SDA_1302=P1^0;//數據輸入輸出腳
sbit SCL_1302=P1^1;//串行時鐘輸入
sbit RST =P1^2;//復位腳
void send_data(unsigned char ch)
{
unsigned char i;
SCL_1302=0;
_nop_();
RST=1;
for(i=0;i<8;i++)
{
SCL_1302=0;
SDA_1302=(bit)(ch&0x01);
SCL_1302=1;
ch=ch>>1;
}
SCL_1302=0;
RST=0;
}
unsigned char receive_data()
{
unsigned char i,data;
SCL_1302=0;
_nop_();
RST=1;
for(i=0;i<8;i++)
{
data>>=1;
SCL_1302=0;
if(SDA_1302) data|=0x80;
elsedata&=0x7f;
SCL_1302=1;
}
SCL_1302=0;
RST=0;
return data;
}
================================================//
//=======================================應用
sbit SDA_1302=P1^0;
sbit SCL_1302=P1^1;
sbit RST=P1^2;
#define WSEC0x80
#define RSEC0x81
#define WMIN0x82
#define RMIN0x83
#define WHOU0x84
#define RHOU0x85
#define WDAY0x86
#define RDAY0x87
#define WMON0x88
#define RMON0x89
#define WWEEK 0X8a
#define RWEEK 0X8b
#define WYEAR 0x8c
#define RYEAR 0x8d
#define EWOK0X8e //
#define EW0X8F //
#define CDOK0X90 // 涓流充電寫
#define CD0X91 // 讀

void delay(void)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void write_ds1302(unsigned char addr,unsigned char tempdata)
{
unsigned char i=0;
SCL_1302=0;
delay();
RST=1;
delay();
for(i=0;i<8;i++)
{
SCL_1302=0;
SDA_1302=(bit)(addr&0x01);
SCL_1302=1;
addr>>=1;
}
for(i=0;i<8;i++)
{
SCL_1302=0;
SDA_1302=(bit)(tempdata&0x01);
SCL_1302=1;
addr>>=1;
}
RST=0;
delay();
SCL_1302=0;
}
unsigned char read_ds1302(unsigned char addr)
{
unsigned char i=0;
unsigned char temp=0;
SCL_1302=0;
delay();
RST=1;
delay();
for(i=0;i<8;i++)
{
SCL_1302=0;
SDA_1302=(bit)(addr&0x01);
SCL_1302=1;
addr>>=1;
}
SDA_1302=1;
for(i=0;i<8;i++)
{
temp>>=1;
SCL_1302=1;
if(SDA_1302)
temp|=0x80;
else
temp&=0x7f;
SCL_1302=0;
}
RST=0;
delay();
SCL_1302=0;
return (temp);
}
void write_initial(void) //寫入初始時間 2009年 1月1日1時0分0秒
{
SCL_1302=0;
RST=0;
write_ds1302(EWOK,0x00);
write_ds1302(WSEC,0X00);
write_ds1302(WMIN,0X00);
write_ds1302(WHOU,0X81);
write_ds1302(WDAY,0X01);
write_ds1302(WMON,0X01);
write_ds1302(WWEEK,0X04);
write_ds1302(WYEAR,0X09);
}
void read(void)
{
DAY=read_ds1302(RDAY);
MONTH=read_ds1302(RMON);
YEAR=read_ds1302(RYEAR);
}


相關焦點

  • 淺談單片機c語言模塊化編程-附ds1302時鐘晶片驅動程序
    最終確定在ds1302_write_byte中。發現了一個很奇特的事情。錯誤是因為fou循環,我用for(i=0;i<8;i++)替換成為for(i=8;i>0;i--)解決了問題。extern可以置於變量或者函數前,以表示變量或者函數的定義在別的文件中,提示編譯器遇到此變量和函數時在其他模塊中尋找其定義。
  • DS1302時鐘晶片顯示時間C51程序
    /*程序效果:通過DS1302晶片顯示時間,本程序主要是要理解     DS1302晶片的協議,這樣便於編寫程序。     當然時間顯示也可以用單片機的定時器來控制,比起延時     子函數來說較精準。
  • 用ds1302製作一個精密的電子時鐘
    題目:用ds1302製作一個精密的電子時鐘感想:我看視頻的時候講的是DS12CR887這塊晶片,兩塊畢竟是不一樣的,所以,我只是看了他講怎樣看時序,之後的就沒再看了。我就拿著自己下載列印的DS1302數據手冊,研習,研習,再研習。還查了書上的,網上的,源程序。
  • 時鐘晶片接口分析與DS1302典型原理電路圖
    每個程序的運行都需要頻率這個東西來恆量,所以我們就會需要用到時鐘晶片,它才會產生時鐘頻率。時鐘晶片是日常生活中應用最為廣泛的消費類電子產品之一。它為人們提供精確的實時時間,可以對年、月、日、周日、時、分、秒進行計時,且具有閏年補償等多種功能;或者為電子系統提供精確的時間基準,目前實時時鐘晶片大多採用精度較高的晶體振蕩器作為時鐘源。
  • ds1302是什麼,ds1302引腳圖和寄存器詳解
    打開APP ds1302是什麼,ds1302引腳圖和寄存器詳解 發表於 2017-10-18 17:37:05   DS1302
  • ds1302引腳圖,ds1302引腳圖功能詳解
    打開APP ds1302引腳圖,ds1302引腳圖功能詳解 發表於 2017-10-19 15:39:22   DS1302是時鐘晶片
  • ds1302晶振不起振_ds1302晶振電路圖
    打開APP ds1302晶振不起振_ds1302晶振電路圖 發表於 2017-08-26 18:31:28   實時時鐘電路DS1302
  • Arduino提高篇22—實時時鐘DS1302
    很多電子愛好者都熱衷製作電子時鐘來練手,這些時鐘會使用數碼管、點陣屏、LCD液晶屏、OLED屏、TFT屏等顯示模塊,所使用的RTC時鐘晶片也各不相同,DS1302、DS3231、DS12C887等。通過單片機等MCU驅動RTC模塊,讀取時間數據並交給顯示模塊進行展示,還可以加入按鍵來調節時鐘,可以說是一個非常全面的練手項目。
  • LCD1602液晶顯示DS1302實時時鐘Proteus仿真
    LCD*******sbitLCDRS=P2^0; //LCD數據/命令選擇端sbitLCDRW=P2^1;sbitLCDEN=P2^2; //LCD使能新號端//******DS1302******sbitIO=P1^0; //1302數據線sbitSCLK=P1^1; //1302時鐘線
  • DS1302時鐘模塊的使用
    ds1302.h庫文件已經上傳,有需要的自行下載。注意ds1302.h要與zhy.h配合使用。接下來我詳細講解一下,ds1302.h庫文件的使用方法。uchar time_buf[8] = {0x20,0x10,0x06,0x01,0x23,0x59,0x55,0x02};//2010年6月1號23點59分55秒星期二注意,time_buf數組中只能為BCD碼,也就是只能為十進位,不能出現十六進位或者其它進位字符ds1302_init()函數是用來給DS1302進行初始化設置的
  • ds1302讀取數據問題分析及解決
    公司推出的具有涓細電流充電能力的低功耗實時時鐘晶片。SCLK為時鐘輸入端。   寄存器   DS1302有12個寄存器,其中有7個寄存器與日曆、時鐘相關,存放的數據位為BCD碼形式,其日曆、時間寄存器及其控制字見表1。   此外,DS1302 還有年份寄存器、控制寄存器、充電寄存器、時鐘突發寄存器及與RAM相關的寄存器等。時鐘突發寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內容。
  • 實時時鐘晶片DS1302
    DS1302是一種三線制的串行時鐘晶片,即CE(片選),SCLK(時鐘),I/O(雙向數據)。4.時鐘運行:秒寄存器的最高位(BIT7)是作為時鐘控制位,當為邏輯1時,時鐘停止,為0時鐘運行。所以如果要時鐘運行的話就必須將秒寄存器的最高位清05.12/24小時模式:小時寄存器的第7位(最高位)是選擇12小時制還是24小時制。當為邏輯1時選擇12小時,邏輯0選擇24小時。
  • ds1302帶鬧鐘功能的單片機控制的時鐘程序
    (uchar add,uchar date);uchar read_ds1302(uchar add);void read_rtc();void set_ds1302(uchar add,uchar time);void display();void init_ds1302();void main(){wela=1;P1=0xff
  • 基於STM32和DS1302設計的時鐘程序
    頭函數:#include"ds1302.h"函 數:在ds1302.h中有列舉;返回值:無;/*************************// ds1302,定時,**************************///#include#include"stm32f10x.h"
  • Arduino控制DS1302時鐘晶片(ds1302引腳圖及功能和應用電路)
    DS1302應用電路   應用電路一:   DS1302的電路一個重點就是時鐘電路,它所使用的晶振是一個32.768k的晶振,晶振外部也不需要額外添加其他的電容或者電阻電路了。時鐘的精度,首先取決於晶振的精度以及晶振的引腳負載電容。如果晶振不準或者負載電容過大過小,都會導致時鐘誤差過大。
  • DS1302時鐘晶片介紹_DS1302的使用技巧和特點詳解
    DS1302 是DALLAS 公司推出的涓流充電時鐘晶片,內含有一個實時時鐘/日曆和31 字節靜態RAM,通過簡單的串行接口與單片機進行通信。實時時鐘/日曆電路提供秒、分、時、日、日期、月、年的信息,每月的天數和閏年的天數可自動調整,時鐘操作可通過AM/PM 指示決定採用24 或12 小時格式。
  • ATMEGA16四線驅動LCD顯示時間-DS1302
    #include 本文引用地址:http://www.eepw.com.cn/article/201611/320229.htm#define uchar unsigned char#define uint unsigned int//定義LCD1602的埠應用#define
  • spi與i2c總線有什麼區別
    SPI,是一種高速的,全雙工,同步的通信總線,並且在晶片的管腳上只佔用四根線,節約了晶片的管腳,同時為PCB的布局上節省空間,提供方便,正是出於這種簡單易用的特性,如今越來越多的晶片集成了這種通信協議,比如AT91RM9200。
  • stm32與FPGA通信代碼實現方案spi
    dout轉成並行數據(注意沒個上升沿只能傳一位串行數據),經過數據位寬個spi_clk時鐘後(我們用的是32位)數據片選使能才會拉高//還是搞個always@(posedge clk )如同步復位的話就先清零spi_down_flag,else只是clk上升沿的話就再判斷if(spi_cs_data_reg1==0&&spi_cs_data_reg
  • FPGA設計應用實例——SPI主從端數據通信實現
    設計spi_slave模塊的測試平臺如【代碼18-2】所列。在373 ns時刻捕獲到SPI片選信號r_spi_cs的下沿,此時主、從端開始發送最高位數據0與1,在接下來的時鐘下降沿發送其餘的數據,同時在時鐘的上升沿接收數據。最後,從端接收到的數據w_ srx_data為00001001,該數據與主端發送的數據00001001一致,說明SPI從端實現了數據通信。