99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

一口Linux
認(rèn)證:優(yōu)質(zhì)創(chuàng)作者
所在專題目錄 查看專題
SATA、mSATA、M.2、PCIe!SSD接口那點事
深入解析什么是磁盤陣列技術(shù)?常用的磁盤陣列有哪幾種?
家庭用電都是交流電,為何會有零線和火線的區(qū)別?
一分鐘讓你了解芯片工作的心臟——晶振
I2c通訊介紹及代碼演示
EEPROM存儲數(shù)據(jù)的原理
作者動態(tài) 更多
某通信公司筆試題,你會做幾道?
3天前
10種初學(xué)者最常見的c語言段錯誤實例及原因分析
05-30 12:13
linux系統(tǒng)監(jiān)控工具小神器:btop
05-17 17:37
有沒有權(quán)貴開后門讓子女做軟件開發(fā)人員?
05-10 23:36
一文包你學(xué)會網(wǎng)絡(luò)數(shù)據(jù)抓包
03-15 09:26

I2c通訊介紹及代碼演示

I2c通訊介紹及代碼演示

1.啟動和停止波形圖

2.程序

就SDA有區(qū)別

啟動   停止

Sda=1 Sda=0

Scl=1  Scl=1

Sda=1  Sda=1

Scl=0  Scl=0

?

/*
------------------------------------------------
啟動IIC總線

------------------------------------------------*/
void Start(void)
{
Sda=1;
_nop_();
Scl=1;
_nop_();
Sda=0;
_nop_();
Scl=0;
}
/*
------------------------------------------------
停止IIC總線

------------------------------------------------*/
void Stop(void)
{
Sda=0;
_nop_();
Scl=1;
_nop_();
Sda=1;
_nop_();
Scl=0;
}

3.應(yīng)答與非應(yīng)答

應(yīng)答   非應(yīng)答

Sda=0  Sda=1

Scl=1   Scl=1

Scl=1   Scl=0

/*
------------------------------------------------
應(yīng)答IIC總線

------------------------------------------------*/
void Ack(void)
{
Sda=0;
_nop_();
Scl=1;
_nop_();
Scl=0;
_nop_();
}
/*
------------------------------------------------
非應(yīng)答IIC總線

------------------------------------------------*/
void NoAck(void)
{
Sda=1;
_nop_();
Scl=1;
_nop_();
Scl=0;
_nop_();
}

4.發(fā)送與接收

發(fā)送數(shù)據(jù)  接收數(shù)據(jù)

Scl=0      Sda=1(執(zhí)行1次)

數(shù)據(jù)       Scl=0

Scl=1(執(zhí)行1次)   Scl=1

                            數(shù)據(jù)

/*
------------------------------------------------
發(fā)送一個字節(jié)

------------------------------------------------*/
void Send(unsigned char Data)
{
unsigned char BitCounter=8;
unsigned char temp;
do
{
temp=Data;
Scl=0;
_nop_();
if((temp&0x80)==0x80)
Sda=1;
else
Sda=0;
Scl=1;
temp=Data<<1;
Data=temp;
BitCounter--;
}
while(BitCounter);
Scl=0;
}
/*
------------------------------------------------
讀入一個字節(jié)并返回

------------------------------------------------*/
unsigned char Read(void)
{
unsigned char temp=0;
unsigned char temp1=0;
unsigned char BitCounter=8;
Sda=1;
do
{
Scl=0;
_nop_();
Scl=1;
_nop_();
if(Sda)
temp=temp|0x01;
else
temp=temp&0xfe;
if(BitCounter-1)
{
temp1=temp<<1;
temp=temp1;
}
BitCounter--;
}
while(BitCounter);
return(temp);
}

5.i2C總體程序

sbit Sda=P2^0; //定義總線連接端口
sbit Scl=P2^1;
/*
------------------------------------------------
啟動IIC總線

------------------------------------------------*/
void Start(void)
{
Sda=1;
_nop_();
Scl=1;
_nop_();
Sda=0;
_nop_();
Scl=0;
}
/*
------------------------------------------------
停止IIC總線

------------------------------------------------*/
void Stop(void)
{
Sda=0;
_nop_();
Scl=1;
_nop_();
Sda=1;
_nop_();
Scl=0;
}
/*
------------------------------------------------
應(yīng)答IIC總線

------------------------------------------------*/
void Ack(void)
{
Sda=0;
_nop_();
Scl=1;
_nop_();
Scl=0;
_nop_();
}
/*
------------------------------------------------
非應(yīng)答IIC總線

------------------------------------------------*/
void NoAck(void)
{
Sda=1;
_nop_();
Scl=1;
_nop_();
Scl=0;
_nop_();
}
/*
------------------------------------------------
發(fā)送一個字節(jié)

------------------------------------------------*/
void Send(unsigned char Data)
{
unsigned char BitCounter=8;
unsigned char temp;
do
{
temp=Data;
Scl=0;
_nop_();
if((temp&0x80)==0x80)
Sda=1;
else
Sda=0;
Scl=1;
temp=Data<<1;
Data=temp;
BitCounter--;
}
while(BitCounter);
Scl=0;
}
/*
------------------------------------------------
讀入一個字節(jié)并返回

------------------------------------------------*/
unsigned char Read(void)
{
unsigned char temp=0;
unsigned char temp1=0;
unsigned char BitCounter=8;
Sda=1;
do
{
Scl=0;
_nop_();
Scl=1;
_nop_();
if(Sda)
temp=temp|0x01;
else
temp=temp&0xfe;
if(BitCounter-1)
{
temp1=temp<<1;
temp=temp1;
}
BitCounter--;
}
while(BitCounter);
return(temp);
}
/*
------------------------------------------------
寫入DA數(shù)模轉(zhuǎn)換值

------------------------------------------------*/
void DAC(unsigned char Data)
{
Start();
Send(AddWr); //寫入芯片地址
Ack();
Send(0x40); //寫入控制位,使能DAC輸出
Ack();
Send(Data); //寫數(shù)據(jù)
Ack();
Stop();
}
/*
------------------------------------------------
讀取AD模數(shù)轉(zhuǎn)換的值,有返回值

------------------------------------------------*/
unsigned char ReadADC(unsigned char Chl)
{
unsigned char Data;
Start(); //寫入芯片地址
Send(AddWr);
Ack();
Send(0x40|Chl);//寫入選擇的通道,本程序只用單端輸入,差分部分需要自行添加
//Chl的值分別為0、1、2、3,分別代表1-4通道
Ack();
Start();
Send(AddRd); //讀入地址
Ack();
Data=Read(); //讀數(shù)據(jù)
Scl=0;
NoAck();
Stop();
return Data; //返回值
}

5.i2C總體程序

sbit Sda=P2^0; //定義總線連接端口
sbit Scl=P2^1;
/*
------------------------------------------------
啟動IIC總線

------------------------------------------------*/
void Start(void)
{
Sda=1;
_nop_();
Scl=1;
_nop_();
Sda=0;
_nop_();
Scl=0;
}
/*
------------------------------------------------
停止IIC總線

------------------------------------------------*/
void Stop(void)
{
Sda=0;
_nop_();
Scl=1;
_nop_();
Sda=1;
_nop_();
Scl=0;
}
/*
------------------------------------------------
應(yīng)答IIC總線

------------------------------------------------*/
void Ack(void)
{
Sda=0;
_nop_();
Scl=1;
_nop_();
Scl=0;
_nop_();
}
/*
------------------------------------------------
非應(yīng)答IIC總線

------------------------------------------------*/
void NoAck(void)
{
Sda=1;
_nop_();
Scl=1;
_nop_();
Scl=0;
_nop_();
}
/*
------------------------------------------------
發(fā)送一個字節(jié)

------------------------------------------------*/
void Send(unsigned char Data)
{
unsigned char BitCounter=8;
unsigned char temp;
do
{
temp=Data;
Scl=0;
_nop_();
if((temp&0x80)==0x80)
Sda=1;
else
Sda=0;
Scl=1;
temp=Data<<1;
Data=temp;
BitCounter--;
}
while(BitCounter);
Scl=0;
}
/*
------------------------------------------------
讀入一個字節(jié)并返回

------------------------------------------------*/
unsigned char Read(void)
{
unsigned char temp=0;
unsigned char temp1=0;
unsigned char BitCounter=8;
Sda=1;
do
{
Scl=0;
_nop_();
Scl=1;
_nop_();
if(Sda)
temp=temp|0x01;
else
temp=temp&0xfe;
if(BitCounter-1)
{
temp1=temp<<1;
temp=temp1;
}
BitCounter--;
}
while(BitCounter);
return(temp);
}
/*
------------------------------------------------
寫入DA數(shù)模轉(zhuǎn)換值

------------------------------------------------*/
void DAC(unsigned char Data)
{
Start();
Send(AddWr); //寫入芯片地址
Ack();
Send(0x40); //寫入控制位,使能DAC輸出
Ack();
Send(Data); //寫數(shù)據(jù)
Ack();
Stop();
}
/*
------------------------------------------------
讀取AD模數(shù)轉(zhuǎn)換的值,有返回值

------------------------------------------------*/
unsigned char ReadADC(unsigned char Chl)
{
unsigned char Data;
Start(); //寫入芯片地址
Send(AddWr);
Ack();
Send(0x40|Chl);//寫入選擇的通道,本程序只用單端輸入,差分部分需要自行添加
//Chl的值分別為0、1、2、3,分別代表1-4通道
Ack();
Start();
Send(AddRd); //讀入地址
Ack();
Data=Read(); //讀數(shù)據(jù)
Scl=0;
NoAck();
Stop();
return Data; //返回值
}

拿去套用就行

i2C總流程

/*
------------------------------------------------
寫入DA數(shù)模轉(zhuǎn)換值

------------------------------------------------*/
void DAC(unsigned char Data)
{
Start();
Send(AddWr); //寫入芯片地址
Ack();
Send(0x40); //寫入控制位,使能DAC輸出
Ack();
Send(Data); //寫數(shù)據(jù)
Ack();
Stop();
}
/*
------------------------------------------------
讀取AD模數(shù)轉(zhuǎn)換的值,有返回值

------------------------------------------------*/
unsigned char ReadADC(unsigned char Chl)
{
unsigned char Data;
Start(); //寫入芯片地址
Send(AddWr);
Ack();
Send(0x40|Chl);//寫入選擇的通道,本程序只用單端輸入,差分部分需要自行添加
//Chl的值分別為0、1、2、3,分別代表1-4通道
Ack();
Start();
Send(AddRd); //讀入地址
Ack();
Data=Read(); //讀數(shù)據(jù)
Scl=0;
NoAck();
Stop();
return Data; //返回值
}

這個是我ad四路掃描程序部分

聲明:本內(nèi)容為作者獨立觀點,不代表電子星球立場。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請聯(lián)系:editor@netbroad.com
覺得內(nèi)容不錯的朋友,別忘了一鍵三連哦!
贊 2
收藏 1
關(guān)注 181
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 亚洲同性男gv网站search | 日韩精品免费一区二区三区竹菊 | 欧美激情精品久久 | 欧美精品亚洲一区 | 免费无码国产V片在线观看 久久久激情网 | 无限看片的视频高清在线 | 色婷婷在线精品国自产拍 | 日本不卡免费一区二区三区综合久久 | 日韩不卡中文字幕 | 69xxxx视频| 99久久综合国产精品二区国产 | 日本免费三片在线播放 | 国产乱码精品一区二区三区忘忧草 | 波多野结衣伦理在线观看 | 日韩欧美在 | 欧美性猛交xxxx乱大交免费看 | 15p亚洲| 99福利资源久久福利资源 | 欧美亚洲日本 | 国产日本在线视频 | 久久久国产精品 | 强辱丰满人妻hd中文字幕 | 中国亚州女人69内射少妇 | 亚洲一区二区在线视频观看 | 超碰在线98 | 日韩高清av片 | 欧美性开放情侣网站 | 爱看久久 | 中文无字幕一区二区三区 | 久精品久久 | 午夜影院在线午夜影院在线观看 | www.久久 | 国模av在线 | 中国国语毛片免费观看视频 | avtt天堂网人妻系列 | 国产精品久久久久久久久久了 | 亚洲爆乳中文字幕无码专区网站 | 精品一二三区久久aaa片 | 男人疯狂进入女人下部动态图 | 国产精品午夜无码A体验区 国产精品无码AV不卡 | 欧美老妇视频热 |