吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STK600之Atmega128硬件I2C 讀寫高精度時鐘芯片DS3231函數樣例

算法&編程學院 ? 來源:網絡整理 ? 作者:佚名 ? 2018-02-27 09:05 ? 次閱讀

STK600 之 Atmega128硬件I2C 讀寫高精度時鐘芯片DS3231函數

STK600 用于程序的下載 連接JTAG口至mega128目標板即可
//-----------------------------------------------------------------------------
unsigned char DS3231_DATA[19] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
unsigned char Date_Data[14] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00};
unsigned char Data_temp[6] = {0x00,0x00,0x00,0x00,0x00,0x00};
unsigned char Buffer_Data[20] = {0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,
0x2C,0x2D,0x2E,0x2F,0x30,0x31,0x32,0x33,0x34,};


void DS3221_initial(void)
{
DS3231_RESETH;
DS3231_RESETL;
delay_ms(300);
DS3231_RESETH;
}

void twi_start_state(void)
{
TWCR = TWCR | 0xA4;
twi_intcheck();
}

void twi_stop_state(void)
{
TWCR = TWCR | 0x94;
TWCR = TWCR | 0x84;
}


void twi_slaw(unsigned char address)
{
address = address << 1;
TWDR = address;
TWCR = TWCR & 0xDF;
TWCR = TWCR | 0x84;
}

void twi_slar(unsigned char address)
{
address = address << 1;
address = address | 0x01;
TWDR = address;
TWCR = TWCR & 0xDF;
TWCR = TWCR | 0x84;
}


void twi_wordadd_write(unsigned char address)
{
TWDR = address;
TWCR = TWCR & 0xDF;
TWCR = TWCR | 0x84;
}

void twi_datawrite(unsigned char data)
{
TWDR = data;
TWCR = TWCR | 0x84;
}

unsigned char twi_dataread(void)
{
unsigned char temp_a;

twi_intcheck();
temp_a = TWDR;
return temp_a;
}

void twi_MT(unsigned char sladdress,unsigned char wordaddress,unsigned char *ds3231data,unsigned char datalength)
{
unsigned char temp_a;
unsigned char temp_b;

twi_start_state();
twi_intcheck();
twi_slaw(sladdress);
twi_intcheck();
twi_wordadd_write(wordaddress);
twi_intcheck();

for(temp_a = 0;temp_a < datalength;temp_a++)
{
temp_b = *ds3231data;
twi_datawrite(temp_b);
++ds3231data;
twi_intcheck();
}
twi_intclear();
twi_stop_state();
}

void twi_MR(unsigned char sladdress,
unsigned char wordaddress,
unsigned char *ds3231data,
unsigned char datalength)
{
unsigned char temp_a;

twi_start_state();
twi_intcheck();
twi_slar(sladdress);
twi_intcheck();
twi_intclear();

for(temp_a = 0;temp_a < datalength;temp_a++)
{
*ds3231data = twi_dataread();
++ds3231data;
twi_intclear();
}
twi_stop_state();
}

void twi_MTR(unsigned char sladdress,
unsigned char wordaddress,
unsigned char *ds3231data,
unsigned char datalength)
{
unsigned char temp_a;

twi_start_state();
twi_intcheck();
twi_slaw(sladdress);
twi_intcheck();
twi_wordadd_write(wordaddress);
twi_intcheck();
twi_start_state();
twi_intcheck();
twi_slar(sladdress);
twi_intcheck();
twi_intclear();

for(temp_a = 0;temp_a < datalength;temp_a++)
{
*ds3231data = twi_dataread();
++ds3231data;
if(temp_a < (datalength - 1))
{
twi_intclear();
}
}
twi_intcheck();
TWCR = TWCR & 0xBF;
twi_stop_state();
TWCR = 0x44;
}


void twi_intcheck(void)
{
unsigned char temp_a;

temp_a = TWCR & 0x80;
while(temp_a == 0x00)
{
temp_a = TWCR & 0x80;
}
}


void twi_intclear(void)
{
TWCR = TWCR | 0x84;
}

void DS3231toDate(unsigned char *ds3231data,unsigned char *Datedata)
{
unsigned char temp_a;
for(temp_a = 0;temp_a < 7;temp_a++)
{
*Datedata = *ds3231data & 0x0F;
++Datedata;
*Datedata = *ds3231data >> 4;
++Datedata;
++ds3231data;
}
temp_a = 0;
}

void DS3231TD_set(unsigned char year,
unsigned char month,
unsigned char date,
unsigned char day,
unsigned char hour,
unsigned char minute,
unsigned char second,
unsigned char time_import,
unsigned char *ds3231data)
{
*ds3231data = second;
++ds3231data;
*ds3231data = minute;
++ds3231data;

if(time_import == Time12)
{
if(hour > 0x12)
{
hour = hour - 0x12;
}
else;
*ds3231data = hour | 0x40;
}
else
{
*ds3231data = hour & 0xBF;
}
++ds3231data;

*ds3231data = day;
++ds3231data;

*ds3231data = date;
++ds3231data;

*ds3231data = month;
++ds3231data;

*ds3231data = year;

twi_MT(DS3231address,0x00,&DS3231_DATA[0],7);
}

void temp_convert(unsigned char *temp_data,
unsigned char *ds3231data)
{
unsigned char temp_b;
temp_b = *ds3231data;
if((temp_b & 0x80) > 0)
{*temp_data = negative;}
else
{*temp_data = positive;}
temp_b = temp_b << 1; ?
temp_b = temp_b >> 1;
++temp_data;
*temp_data = temp_b / 100;
++temp_data;
*temp_data = (temp_b % 100) / 10;
++temp_data;
*temp_data = (temp_b % 100) % 10;
++ds3231data;
temp_b = *ds3231data;
temp_b = temp_b >> 6;
temp_b = temp_b * 25;
++temp_data;
*temp_data = temp_b / 10;
++temp_data;
*temp_data = temp_b % 10;
}

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • DS3231
    +關注

    關注

    2

    文章

    51

    瀏覽量

    23867
  • 時鐘芯片
    +關注

    關注

    2

    文章

    253

    瀏覽量

    39972
收藏 人收藏

    評論

    相關推薦

    I2C總線通信原理 如何設計I2C總線電路

    、高效的通信接口標準。I2C總線通信原理主要包括以下要點: 總線結構 : I2C總線僅使用兩條信號線,即串行數據線(SDA)和串行時鐘線(SCL)。 SDA線路用于傳輸實際的數據信息,而SCL線路則用于同步通信的
    的頭像 發表于 01-31 15:01 ?145次閱讀

    I2C總線與Arduino的接口示例

    基礎 I2C總線由兩條線組成:數據線(SDA)和時鐘線(SCL)。SDA用于傳輸數據,而SCL用于同步數據傳輸。I2C設備可以是主設備或從設備。主設備生成時鐘信號并啟動數據傳輸,從設備
    的頭像 發表于 01-17 15:34 ?225次閱讀

    I2C總線協議詳細解析

    總線以其簡單性、靈活性和低功耗而聞名,廣泛應用于嵌入式系統中。 2. I2C總線的基本組成 I2C總線由兩條線組成:數據線(SDA)和時鐘線(SCL)。SDA用于傳輸數據,而SCL用于
    的頭像 發表于 01-17 15:22 ?208次閱讀

    I2C總線故障排除技巧

    I2C總線是一種廣泛使用的串行通信協議,它允許多個設備在兩條線上(數據線SDA和時鐘線SCL)進行通信。由于其簡單性和靈活性,I2C總線在嵌入式系統中非常流行。然而,當I2C總線出現問
    的頭像 發表于 01-17 15:20 ?248次閱讀

    I2C總線應用實例分析

    I2C總線使用兩條線進行通信:數據線(SDA)和時鐘線(SCL)。這種雙線制設計使得I2C總線能夠在多個設備之間共享,而不需要為每個設備單獨布線。 應用實例:溫濕度傳感器 假設我們正在設計一個智能家居系統,需要實時監測室內的溫
    的頭像 發表于 01-17 15:09 ?194次閱讀

    怎么通過I2C或SPI讀寫AIC3254的寄存器?

    我看了AIC3254的數據手冊,沒有看沒明白怎么通過I2C或SPI讀寫AIC3254的寄存器,求大俠指點
    發表于 11-05 08:22

    RISC V的I2C操作

    system_i2c_0_io_scl_writeEnable = !system_i2c_0_io_scl_write;Interface配置示例I2C寄存器設置在I2C的設置中第
    的頭像 發表于 11-01 11:06 ?316次閱讀

    TLV320AIC3263 i2c無法進行通信,通過i2c讀寫函數讀寫寄存器失敗怎么解決?

    麻煩幫忙分析下以下問題的原因 1、i2c無法進行通信,通過i2c讀寫函數(系統提供),讀寫寄存器失敗: 寫寄存器,返回-5: 讀寄存
    發表于 10-28 07:32

    DS3231 RTC模塊的I2C通信失敗的原因?怎么解決?

    ;< 1)); if (!i2c_master_checkAck()) { os_printf(\"在 i2C 上寫入 DS3231 時出錯rn\"
    發表于 07-11 06:12

    ESP32C3 I2C no ack無應答怎么解決?

    (一)現象 我使用idf開發esp32c3,使用i2c外設時出現問題。I2C正常發送了出去,但從機沒有應答。 我此前使用過nxp的lpc55s69進行過測試,并將這兩次的波形使用邏輯分析儀采集出來
    發表于 06-14 07:31

    幾款高精度時鐘芯片的規格選型分析

    幾款高精度時鐘芯片,幾乎很多應用都需要精確的計時例如銀行系統,安全系統和電能表等。獲得高精度實時時鐘芯片
    發表于 05-13 11:50 ?0次下載

    請問使用HAL庫硬件I2C時如何設置器件地址?

    我使用的模塊是包含了DS1307的AT24C32兩個I2C通訊的芯片,開始準備啟用硬件I2C,但
    發表于 04-17 07:31

    如何根據時序圖編寫高效IO模擬I2C程序

    I2C讀寫字節是這么定義的:當時鐘線為低電平的時候,允許修改數據線的電平狀態,在時鐘線為高電平的時候讀取數據線的狀態。
    的頭像 發表于 04-06 03:05 ?4191次閱讀
    如何根據時序圖編寫高效IO模擬<b class='flag-5'>I2C</b>程序

    I2C接口稱重采集單元

    本周帶來的是一款稱重采集變送器單元WeightI2CUnit。該傳感器內部采用”STM32+HX711芯片”的方案,通過I2C通訊方式實現24位精度的重量測量。同時支持并聯多個設備到同
    的頭像 發表于 02-24 08:28 ?541次閱讀
    <b class='flag-5'>I2C</b>接口稱重采集單元

    GD32 MCU硬件I2C不可靠不如軟件I2C?來看看紅楓派開發版的硬件I2C驅動如何做到穩得一批

    在一個評論中,看到網友對硬件I2C的討論,硬件I2C Busy找不到原因、軟件I2C穩得一批。
    的頭像 發表于 02-23 09:37 ?2890次閱讀
    GD32 MCU<b class='flag-5'>硬件</b><b class='flag-5'>I2C</b>不可靠不如軟件<b class='flag-5'>I2C</b>?來看看紅楓派開發版的<b class='flag-5'>硬件</b><b class='flag-5'>I2C</b>驅動如何做到穩得一批
    百家乐游戏真钱游戏| 新锦江百家乐的玩法技巧和规则| 澳门百家乐官网心理| 新全讯网321| 百家乐的必赢术| 百家乐官网美女视频聊天| 大发888老虎机游戏| 百家乐赌博机怎么玩| 博天堂百家乐官网的玩法技巧和规则 | 百家乐网投注| 百家乐官网评级网站| 永登县| 德州扑克单机游戏| 百家乐网开服表| 信誉好百家乐平台| 罗盘24山图| 百家乐官网singapore| 豪门娱乐| 大发888游戏平台 df888ylcxz46| 什么百家乐九宫三路| 百家乐官网怎么赢博彩正网| 仙居县| 锦江国际娱乐| 百家乐赌场大全| 百家乐是否有路子| 真人百家乐网站接口| 百家乐中的概率| 百家乐官网园首选去澳| 百家乐官网庄家闲| 青鹏百家乐官网游戏币| 鄂托克旗| 百家乐官网最好的玩法| 百家乐官网庄闲几率| 全讯网hg33.com| 威尼斯人娱乐城老品牌值得信赖 | 百家乐官网娱乐城新闻| 阿拉善左旗| 博发百家乐官网游戏| 网上百家乐官网能作弊吗| 百家乐官网销售视频| 百家乐官网娱乐城赌场|