中文字幕无码不卡一区二区三区_少妇被又大又粗又爽毛片久久黑人_91精品国产在热久久无毒不卡_久久久久久亚洲综合网站

技術(shù)熱線: 4007-888-234

技術(shù)支持

I2C 24LC02 C語言例程

更新時間: 2019-03-23

十年專注單片機方案開發(fā)的方案公司英銳恩,分享I2C 24LC02 C語言例程。英銳恩現(xiàn)提供服務產(chǎn)品涉及主控芯片:8位單片機、16位單片機、32位單片機及各類運算放大器等。

/******************************************************************* 一、程序說明: 1, 24LC02器件地址是1010000R/W. 2, 數(shù)組寫入24LC02采取頁寫方式. 3, 數(shù)組code從24LC02讀出時采取自由讀方式. 4, 采用4.00M晶體。 5,采用軟件I2C。

二、硬件連接: 1, SDA------->23 pin.(當然你可以任意選擇腳位) 2, SCL------->18 Pin.(當然你可以任意選擇腳位) 3, PORTD----->外接8個LED,顯示讀出的數(shù)據(jù),在這里,讀出的剛好是一個閃動的流水燈狀態(tài)。

*******************************************************************/ #include "pic.h"

#define uchar unsigned char #define nop() asm("nop") #define SCL TRISC3 #define SDA TRISC4

void start_i2c(); void stop_i2c(); void send_byte(uchar c); uchar receive_byte(); void I_send_str(uchar sla,uchar suba,uchar *s,uchar no); void delay_250ms(); void i2c_error ();

uchar code[]={0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff}; uchar no,ack,c,data;

void main(void) { uchar i; TRISC=0Xff; //C口設為輸入 RC3為SCL線,RC4為SDA線。 PORTC=0X00; TRISD=0X00; //D口為輸出,顯示IC24LC02中讀出的內(nèi)容 PORTD=0X00; //初始顯示全亮 I_send_str(0xa0,0x00,code,9); //頁寫入code數(shù)組到24LC02,器件地址為0Xa0,子地址為0X00,共9個數(shù)。 delay_250ms(); ///////////開始讀出到D口進行顯示,根據(jù)Random read時序圖。 while (1) { for (i=0x00;i<0x09;i++) { start_i2c(); send_byte(0xa0); //發(fā)送器件地址,即DEVICE ADDRESS。 if (ack==0) i2c_error(); //如果24LC02無應答。則進入I2C ERROR錯誤指示。 send_byte(i); //發(fā)送字地址,即WORD ADDRESS。D口顯示數(shù)組。 if (ack==0) i2c_error(); start_i2c(); //重新啟動總線。 send_byte(0xa1); //發(fā)送讀命令和器件地址DEVICE ADDRESS。 if (ack==0) i2c_error(); data=receive_byte(); stop_i2c(); PORTD=data; delay_250ms(); } } }

/******************************************************************* 起動總線函數(shù)函數(shù)原型: void start_i2c(); Function: start on the I2C bus *******************************************************************/ void start_i2c() { SDA=1; //發(fā)送啟始條件的數(shù)據(jù)信號 nop(); SCL=1; 

nop();nop();nop();nop();nop(); //24LC02要求建立時間大于4,7S SDA=0; //發(fā)送起始信號 nop();nop();nop();nop();nop(); SCL=0; //鉗住I2C總線,準備發(fā)送數(shù)據(jù)或接收數(shù)據(jù) nop();nop(); }

/******************************************************************* 停止總線函數(shù)函數(shù)原型: void stop_i2c(); Function: stop the I2C bus 

*******************************************************************/ void stop_i2c() { SDA=0; //發(fā)送結(jié)束條件的數(shù)據(jù)信號 nop(); SCL=1; nop();nop();nop();nop();nop(); SDA=1; nop();nop();nop();nop(); }

/*================================================================= 字節(jié)數(shù)據(jù)傳送函數(shù)函數(shù)原型: void send_byte(uchar c); Function: 將數(shù)據(jù)C發(fā)送出去,可以是地址,也可以是數(shù)據(jù),發(fā)完后等待回應,并對此狀態(tài) 位進行操作(不應答或非應答都使ack=0 ),發(fā)送數(shù)據(jù)正常,ack=1;ack=0 表示被控器無應答或損壞。 ==================================================================*/ void send_byte(uchar c) { uchar bit_count; for (bit_count=0;bit_count<8;bit_count++) { if ((c<<bit_count)&0x80) {sda="1;}" scl="1;" sda="1;" (rc4="=1)" ack="0;" 用ask="1為有應答信號">

/*================================================================== 字節(jié)數(shù)據(jù)接收函數(shù)函數(shù)原型:uchar receive_byte(); FUNCTION: 用來接收從器件傳來的數(shù)據(jù),并判斷總線錯誤(不發(fā)應答信號), 發(fā)完后請用應答函數(shù)。 

===================================================================*/ uchar receive_byte() { uchar retc,bit_count; retc=0; SDA=1; for (bit_count=0;bit_count<8;bit_count++) { nop(); SCL=0; nop();nop();nop();nop();nop(); SCL=1; nop();nop(); retc=retc<<1; if (RC4==1) retc=retc+1; nop();nop(); } SCL=0; nop();nop(); return (retc); }

/*================================================================ 向有子地址器件發(fā)送多字節(jié)數(shù)據(jù)函數(shù)函數(shù)原型: bit I_send_str(uchar sla,uchar suba,uchar *s,uchar no); Function: 從啟動總線到發(fā)送地址,數(shù)據(jù),結(jié)束總線的全過程,從器件地址sla。如果 返回1表示操作成功,否則操作有誤。 =================================================================*/ void I_send_str(uchar sla,uchar suba,uchar *s,uchar no) { uchar i; start_i2c(); send_byte(sla); if (ack==0) i2c_error(); send_byte(suba); if (ack==0) i2c_error(); for (i=0;i<no;i++) (ack="=0)">

/***************************************************************** 延時函數(shù)函數(shù)原型: void delay_250ms(); FUNCTION: 延明250ms *****************************************************************/ void delay_250ms() { unsigned int d=24999; while (--d); }

/***************************************************************** 總線錯誤函數(shù)函數(shù)原型: void i2c_error(); Function: 通過RD7閃動8次表示總線操作失敗一次報警。 *****************************************************************/ void i2c_error () { uchar i; for (i=0;i<8;i++) { RD7=0; delay_250ms(); RD7=1; delay_250ms(); } } /**********END**************/ 

(文源網(wǎng)絡,侵刪)

404
返回首頁 |  返回上一頁
灌南县| 清丰县| 宜兰县| 莱阳市| 乃东县| 昌宁县| 东港市| 陇川县| 彭阳县| 揭东县| 曲水县| 西宁市| 晋中市| 岳普湖县| 塔河县| 博罗县| 长乐市| 宜春市| 无棣县| 海原县| 保德县| 南皮县| 齐齐哈尔市| 青海省| 嵩明县| 辽源市| 布拖县| 邻水| 横峰县| 中阳县| 胶南市| 达日县| 齐齐哈尔市| 治多县| 万安县| 嫩江县| 同心县| 西乌珠穆沁旗| 桦南县| 新巴尔虎左旗| 商洛市|