久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1916|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

IIC通信程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:300027 發(fā)表于 2018-4-3 10:03 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include "Global.h"

#define SDA                                P3_1       
#define SCL                                P3_0       

#define SET_SDA                        (SDA        = 1)
#define CLR_SDA                        (SDA        = 0)

#define SET_SCL                        (SCL        = 1)
#define CLR_SCL                        (SCL        = 0)

#define SDA_INPUT                {P3M1 &= ~(BIT1);SET_SDA;}
#define SDA_OUTPUT                {P3M1 |= (BIT1);}

#define SCL_INPUT                {P3M1 &= ~(BIT0);SET_SCL;}
#define SCL_OUTPUT                {P3M1 |= (BIT0);}

#define Device_Addr                0xA0
#define DELAN_TIM                30

//------------------------------------------
void DelanNop(u8 Count)
{
        do
        {
                Count--;
        } while (Count != 0);
}

//**********************************
//I2C start signal
//**********************************
void i2cStart(void)
{
        SDA_OUTPUT;                                        //set SDA as output
        SCL_OUTPUT;                                        //set SCL as output
        SET_SDA; DelanNop(DELAN_TIM);                //SDA=1
        SET_SCL; DelanNop(DELAN_TIM);                //SCL=1
        CLR_SDA; DelanNop(DELAN_TIM);                //SDA=0
        CLR_SCL; DelanNop(DELAN_TIM);                //SCL=0
}

//**********************************
//I2C stop signal
//**********************************
void i2cStop(void)
{
        SDA_OUTPUT;                        //set SDA as output
        SCL_OUTPUT;                        //set SCL as output
        CLR_SDA; DelanNop(DELAN_TIM);//SDA=0
        SET_SCL; DelanNop(DELAN_TIM);//SCL=1
        SET_SDA; DelanNop(DELAN_TIM);//SDA=1
        CLR_SCL; DelanNop(DELAN_TIM);//SCL=0

}
//**********************************
//ACK(0) signal
//**********************************
void Ack(void)
{
        SDA_OUTPUT;//set SDA as output
        SCL_OUTPUT;//set SCL as output
        CLR_SDA; DelanNop(DELAN_TIM);//SDA=0
        SET_SCL; DelanNop(DELAN_TIM);//SCL=1
        CLR_SCL; DelanNop(DELAN_TIM);//SCL=0
        SET_SDA; DelanNop(DELAN_TIM);//SDA=1
}
//**********************************
//NoAck(1) signal
//**********************************
void NoAck(void)
{
        SDA_OUTPUT;//set SDA as output
        SCL_OUTPUT;//set SCL as output
        SET_SDA; DelanNop(DELAN_TIM);//SDA=1
        SET_SCL; DelanNop(DELAN_TIM);//SCL=1
        CLR_SCL; DelanNop(DELAN_TIM);//SCL=0
}
//**********************************
//master check ack signal
//0:ACK complete1 no complete
//**********************************
bl TestAck(void)
{
        bl Ack_Bit;                //define ack bit
        SDA_INPUT;                //set SDA as input
        SCL_OUTPUT;                //set SCL as output
        //SDA=1;_delay(30);//SDA=1
        SET_SCL;         DelanNop(DELAN_TIM);//SCL=1
        Ack_Bit = SDA; DelanNop(DELAN_TIM);//read back ACK
        CLR_SCL; DelanNop(DELAN_TIM);//SCL=0
        SDA_OUTPUT;
        Ack_Bit = 1;
        if (!Ack_Bit)
        {
                DelanNop(DELAN_TIM);
                DelanNop(DELAN_TIM);
                Ack_Bit = 1;
        }
        return Ack_Bit;
}
//**********************************
//master write data
//**********************************
void i2cWrite(u8 Data)
{
        u8 count = 8;
        SDA_OUTPUT;                                        //set SDA as output
        SCL_OUTPUT;                                        //set SCL as output
        while (count--)
        {
                SDA = (bl)(Data & 0x80);        //bit7 sent to SDA pin
                DelanNop(DELAN_TIM);
                SET_SCL; DelanNop(DELAN_TIM);        //sent clock
                CLR_SCL; DelanNop(DELAN_TIM);
                Data = Data << 1;                //Data shift left 1 bit
        }
}
//**********************************
//master read data
//**********************************
u8 i2cRead(void)
{
        u8 count = 8, Data;
        SDA_INPUT;//set SDA as input
        SCL_OUTPUT;//set SCL as output
        do
        {
                SET_SCL; DelanNop(DELAN_TIM);
                Data = Data << 1;                                //Data shift left 1 bit
                if (SDA){ Data |= BIT0; }
                CLR_SCL;
                DelanNop(DELAN_TIM);
                count--;
        } while (count);
        return(Data);
}
//---------------------------------------------------------------------------------IIC 發(fā)送數(shù)據(jù)
void SendI2cData(void)
{
        u8 I;
        i2cStart();
        i2cWrite(Device_Addr);
        TestAck();
        DelanNop(DELAN_TIM);
        for (I = 0; I < sizeof(SendBuf); I++)
        {
                i2cWrite(SendBuf[I]);
                TestAck();
        }
        i2cStop();
}

//---------------------------------------------------------------------------------IIC 接收數(shù)據(jù)
bl FlagBuzOk;

void ReceveI2cData(void)
{
        u8 I, CKM;

        i2cStart();
        i2cWrite(Device_Addr + 1);
        TestAck();
        DelanNop(DELAN_TIM);
        for (I = 0; I < sizeof(ReadBuf); I++)
        {
                ReadBuf[I] = i2cRead();
                Ack();
        }
        NoAck();
        i2cStop();


}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久综合影院 | 特级黄一级播放 | 亚洲性人人天天夜夜摸 | 四虎精品在线 | 国产在线第一页 | 亚洲国产精品美女 | 国产精品毛片一区二区三区 | 色呦呦在线 | 久久av一区二区三区 | 久久久久综合 | 欧美日韩亚洲一区 | 久久久蜜臀国产一区二区 | 不卡欧美 | 91资源在线观看 | 欧美一级毛片久久99精品蜜桃 | 一级在线毛片 | 怡红院成人在线视频 | 国产欧美精品区一区二区三区 | 成人国产一区二区三区精品麻豆 | av在线播放国产 | 中文字幕精品一区二区三区精品 | 国产一区二区在线视频 | 毛片一区二区三区 | 99免费精品视频 | 久久久久久蜜桃一区二区 | 久久久久久久一区 | 少妇一级淫片免费放播放 | 久婷婷| 欧美日韩精品一区二区三区四区 | 亚洲 成人 在线 | 999观看免费高清www | 日韩一区二区三区视频 | 一区二区三区在线 | 日韩中文一区二区三区 | 久久se精品一区精品二区 | 亚洲国产一区二区三区四区 | 91精品国产综合久久久久 | 青青操91 | 亚洲一区在线观看视频 | 成人免费一区二区三区牛牛 | 美女爽到呻吟久久久久 |