欧美视频综合-欧美视频中文字幕-欧美视频在线观在线看-欧美视频在线观看网站-直接观看黄网站免费视频-正在播放久久

機電之家資源網
單片機首頁|單片機基礎|單片機應用|單片機開發|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發
培訓信息
贊助商
I2C 總線協議時序編程
I2C 總線協議時序編程
 更新時間:2010-2-2 15:50:14  點擊數:0
【字體: 字體顏色

I2C  總線協議時序編程 
                      --AT24C01---
              COPYRIGHT (c)   2008 BY bill.
                               --  ALL RIGHTS RESERVED  --
 
   File Name:       I2C.h
   Author:          bill
   Created:         2007/12/12
   Modified:        NO
   Revision:        keil v3.0

fose=12M

*************************************************/

#ifndef _I2C_H_
#define _I2C_H_

#include <intrins.h>

 

#define uint   unsigned int
#define uchar  unsigned char

 

  sbit Sda="P1"^0;
  sbit Scl="P1"^1;
  sbit Wp="P1"^2;
 
 
 
/************************** Start **********/
void  Start(void)
   {
    Sda="1";
    Scl="1";
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    Sda="0";
    _nop_();
    _nop_();
    _nop_();
    _nop_();
   }
  
  
/**************** Stop *****************/

void  Stop (void)
{  
    Sda="0";
    Scl="1";
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    Sda="1";
    _nop_();
    _nop_();
    _nop_();
    _nop_();
}


/***************** Ack **************************/

void  Ack (void)
{
    Sda="0";
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    Scl="1";
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    Scl="0";
}


/*************** No Ack  ***************************/

void  NoAck (void)
{
    Sda="1";
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    Scl="1";
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    Scl="0";
}


/***************** Send  a  char ***************************/

void Send(uchar Data)                             //發送數據子程序 Data  為發送的字符
{                                               
    uchar BitCount="8";                             //入口為要發送的字符 Data
    uchar temp;                                   //無返回值
    do
    {
        temp="Data";
        Scl="0";
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        if(temp&0x80)
            Sda="1";
        else
           Sda="0";
        Scl="1";
        temp="Data"<<1;
        Data="temp";
        BitCount--;
    }while(BitCount);
    Scl="0";
}


/***************************** Read  a char  *********************/

uchar Read(void)                               //無入口
{                                               //出口為讀出來的數據 temp
    uchar temp="0";
    uchar temp1=0;
    uchar BitCount="8";
    Sda="1";
    do{
        Scl="0";
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        Scl="1";
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        if(Sda)
            temp="temp|0x01";
        else
            temp="temp"&0xfe;
        if (BitCount-1)
     {
            temp1=temp<<1;
            temp="temp1";
     }
        BitCount--;
    }
    while(BitCount);
    return temp;
}


/*************************** Write a char to Rom ************************/ 

void WrRoROM (uchar Data[],uchar Address,uchar Num)   //寫多字節函數
{                                                     //入口 為  要寫的數組 Data[]
    uchar i="0";                                        //               地址 Address
    uchar *PData;                                     //              字節數 Num
    PData="Data";
    Start();
    Send(0xa0);
    Ack();
    Send (Address);
    Ack();
    for(i=0;i<Num;i++)
    {
        Send(*(PData)) ;
        Ack();
    }
    Stop();
}

 

/********************************** Read a char from ROM *************/

void RdFromROM (uchar Data[],uchar Address,uchar Num)      //讀字符串
{                                                          //入口 為要讀出的數據 Data
    uchar i="0";                                           //存放地址  Address
    uchar *PData;                                         //字節數  Num
    PData="Data";
    for(i=0;i<Num;i++)
    {
        Start();
        Send(0xa0);
        Ack();
        Send(Address+i);
        Ack();
        Start();
        Send(0xa1);
        Ack();
        *(PData+i)=Read();
        Scl="0";
        NoAck();
        Stop();
    }
}


#endif    

 

/*************************例子**************************
void main(void)
{
 uchar Number[4]={1,2,3,4};
 Wp=1;
 WrTOROM(Number,4,4);
 mdelay(20);
    while(1);
}

mdelay(uchar j)
{
 uint i;
    for(;j>0;j--)
    {for(i=0;i<125;i--)
    {;}
    }
}


參考鏈接:http://www.picavr.com/news/2008-01/2927.htm

  • 上一篇: 6位8段數碼管動態驅動電路原理圖及Keil C51驅動程序
  • 下一篇: 沒有了
  • 發表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網友評論:(只顯示最新5條。)
    關于我們 | 聯系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發消息66821730(技術支持)點擊這里給我發消息66821730(廣告投放) 點擊這里給我發消息41031197(編輯) 點擊這里給我發消息58733127(審核)
    本站提供的機電設備,機電供求等信息由機電企業自行提供,該企業負責信息內容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術支持

    主辦:杭州市高新區(濱江)機電一體化學會
    中國行業電子商務100強網站

    網站經營許可證:浙B2-20080178-1