日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式教程
[導讀]I2C的讀寫操作實驗

[實驗任務]
   利用24C08斷電以后存儲的數(shù)據(jù)不消失的特點,可以做一個斷電保護裝置。首先利用單片機做一個0-99秒的自動計時器。然后隨機關斷電源,在 通電以后計時器接著斷電前的狀態(tài)繼續(xù)計時。

[實驗原理]
    首先簡單的說明以下I2C總線,I2C總線是一種串行數(shù)據(jù)總線,只有二根信號線,一根是雙向的數(shù)據(jù)線SDA,另一根是時鐘線SCL。在 I2C總線上傳送的一個數(shù)據(jù)字節(jié)由八位組成??偩€對每次傳送的字節(jié)數(shù)沒有限制,但每個字節(jié)后必須跟一位應答位。數(shù)據(jù)傳送首先傳送最高位(MSB),數(shù)據(jù)傳送按圖1所示格式進行。首先由主機發(fā)出啟動信號“S”(SDA在SCL高電平期間由高電平跳變?yōu)榈碗娖?,然后由主機發(fā)送一個字節(jié)的數(shù)據(jù)。啟動信號后的第一個字節(jié)數(shù)據(jù)具有特殊含義:高七位是從機的地址,第八位是傳送方向位,0表示主機發(fā)送數(shù)據(jù)(寫),1表示主機接收數(shù)據(jù)(讀)。被尋址到的從機設備按傳送方向位設置為對應工作方式。標準I2C總線的設備都有一個七位地址,所有連接在I2C總線上的設備都接收啟動信號后的第一個字節(jié),并將接收到的地址與自己的地址進行比較,如果地址相符則為主機要尋訪的從機,應在第九位答時鐘脈沖時向SDA線送出低電平作為應答。除了第一字節(jié)是通用呼叫地址或十位從機地址之外第二字節(jié)開始即數(shù)據(jù)字節(jié)。數(shù)據(jù)傳送完畢,由主機發(fā)出停止信號“P”(SDA在SCL高電平期間由低電平跳變?yōu)楦唠娖?。
   AT24C系列串行E2PROM具有I2C總線接口功能,功耗小,寬電源電壓(根據(jù)不同型號2.5V~6.0V),工作電流約為3mA,靜態(tài)電流隨電源電壓不同為30μA~110μA,AT24C系列串行E2PROM參數(shù)如下
型 號    容 量   器件尋址字節(jié)(8位) 一次裝載字節(jié)數(shù) 
AT24C01  128×8   1010A2A1A0  R/W         4 
AT24C02  256×8   1010A2A1A0   R/W         8 
AT24C04  512×8   1010A2A1P0   R/W         16 
AT24C08  1024×8  1010A2P1P0   R/W         16 
AT24C16  2048×8  1010P2P1P0   R/W         16  
  由于I2C總線可掛接多個串行接口器件,在I2C總線中每個器件應有唯一的器件地址,按I2C總線規(guī)則,器件地址為7位數(shù)據(jù)(即一個I2C總線系統(tǒng)中理論上可掛接128個不同地址的器件),它和1位數(shù)據(jù)方向位構成一個器件尋址字節(jié),最低位D0為方向位(讀/寫)。器件尋址字節(jié)中的最高4位(D7~D4)為器件型號地址,不同的I2C總線接口器件的型號地址是廠家給定的,如AT24C系列E2PROM的型號地址皆為1010,器件地址中的低3位為引腳地址A2  A1  A0,對應器件尋址字節(jié)中的D3、D2、D1位,在硬件設計時由連接的引腳電平給定。 
  對AT24C系列 E2PROM的讀寫操作完全遵守I2C總線的主收從發(fā)和主發(fā)從收的規(guī)則。

[C語言源程序]
#include <AT89X52.H>
#include <stdio.h>
#include <absacc.h> 
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,
                         0x6d,0x7d,0x07, 0x7f,0x6f,}; 
unsigned char sec;        //定義計數(shù)值,每過1秒,sec加1 
unsigned int tcnt;        //定時中斷次數(shù)
bit  write=0;             //寫24C08的標志;
sbit gewei=P2^0;          //個位選通定義
sbit shiwei=P2^1;         //十位選通定義
/////////24C08讀寫驅動程序////////////////////
sbit scl=P3^4;   // 24c08 SCL
sbit sda=P3^5;  // 24c08 SDA
void delay1(unsigned char x)
{  unsigned int i;
  for(i=0;i<x;i++);
  ;}
void flash() 
{  ;  ; }
void x24c08_init()  //24c08初始化子程序
 {scl=1; flash(); sda=1; flash();}
void start()        //啟動I2C總線
{sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();}
void stop()         //停止I2C總線
{sda=0; flash(); scl=1; flash(); sda=1; flash();}
void writex(unsigned char j)  //寫一個字節(jié)
{  unsigned char i,temp;
   temp=j;
   for (i=0;i<8;i++)
   {temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; flash();}
   scl=0; flash(); sda=1; flash();
}
unsigned char readx()   //讀一個字節(jié)
{
   unsigned char i,j,k=0;
   scl=0;  flash();  sda=1;
   for (i=0;i<8;i++)
    {  
flash();  scl=1;  flash();
      if (sda==1) j=1;
      else j=0;
      k=(k<<1)|j; 
   scl=0;}
   flash();  return(k);
}
void clock()         // I2C總線時鐘
{
   unsigned char i=0;
   scl=1;  flash();
   while ((sda==1)&&(i<255))i++;
   scl=0; flash();
}
////////從24c02的地址address中讀取一個字節(jié)數(shù)據(jù)/////
unsigned char x24c08_read(unsigned char address)
{
   unsigned char i;
   start(); writex(0xa0);
   clock(); writex(address);
   clock(); start();
   writex(0xa1); clock();
   i=readx(); stop();
   delay1(10);
   return(i);
}
//////向24c02的address地址中寫入一字節(jié)數(shù)據(jù)info/////
void x24c08_write(unsigned char address,unsigned char info)
{
   EA=0;
   start(); writex(0xa0);
   clock(); writex(address);
   clock(); writex(info);
   clock(); stop();
   EA=1;
   delay1(50);
}[!--empirenews.page--]
/////////////24C08讀寫驅動程序完/////////////////////
void Delay(unsigned int tc)     //延時程序
{
 while( tc != 0 )   
    {unsigned int i;   
     for(i=0; i<100; i++); 
     tc--;}
}
void LED()                  //LED顯示函數(shù)
{
   shiwei=0; P0=table[sec/10]; Delay(8); shiwei=1;
   gewei=0;  P0=table[sec%10]; Delay(5); gewei=1;
}
void t0(void) interrupt 1 using 0  //定時中斷服務函數(shù)

TH0=(65536-50000)/256; //對TH0 TL0賦值
TL0=(65536-50000)%256; //重裝計數(shù)初值
tcnt++;        //每過250ust tcnt加一
if(tcnt==20)  //計滿20次(1秒)時
   { 
    tcnt=0;   //重新再計
    sec++;
    write=1;  //1秒寫一次24C08
    if(sec==100) //定時100秒,在從零開始計時
      {sec=0;} 
   } 
}
void main(void) 

TMOD=0x01;  //定時器工作在方式1
ET0=1;  EA=1; 
x24c08_init();        //初始化24C08
sec=x24c08_read(2);//讀出保存的數(shù)據(jù)賦于sec
TH0=(65536-50000)/256; //對TH0 TL0賦值
TL0=(65536-50000)%256; //使定時器0.05秒中斷一次
TR0=1;           //開始計時
 while(1) 
  {
  LED();
 if(write==1) //判斷計時器是否計時一秒
    {
  write=0;              //清零 
     x24c08_write(2,sec);  //在24c08的地址2中寫入數(shù)據(jù)sec
 }
   }
}

 

[硬件電路圖]

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據(jù)LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉