精品国产一区在线_av无码中文字幕无码王_天海翼三点刺激高潮不停_好硬好大好爽视频_欧美高清一区三区在线专区_香蕉黄色片

一口Linux
認證:優(yōu)質創(chuàng)作者
所在專題目錄 查看專題
SATA、mSATA、M.2、PCIe!SSD接口那點事
深入解析什么是磁盤陣列技術?常用的磁盤陣列有哪幾種?
家庭用電都是交流電,為何會有零線和火線的區(qū)別?
一分鐘讓你了解芯片工作的心臟——晶振
I2c通訊介紹及代碼演示
EEPROM存儲數(shù)據的原理
作者動態(tài) 更多
iptables -m connlimit導致內存不足
2星期前
為什么對技術人員的考核大多都只看加班時間?
3星期前
某通信公司筆試題,你會做幾道?
07-01 21:58
10種初學者最常見的c語言段錯誤實例及原因分析
05-30 12:13
linux系統(tǒng)監(jiān)控工具小神器:btop
05-17 17:37

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.應答與非應答

應答   非應答

Sda=0  Sda=1

Scl=1   Scl=1

Scl=1   Scl=0

/*
------------------------------------------------
應答IIC總線

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

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

4.發(fā)送與接收

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

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

數(shù)據       Scl=0

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

                            數(shù)據

/*
------------------------------------------------
發(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;
}
/*
------------------------------------------------
應答IIC總線

------------------------------------------------*/
void Ack(void)
{
Sda=0;
_nop_();
Scl=1;
_nop_();
Scl=0;
_nop_();
}
/*
------------------------------------------------
非應答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ù)模轉換值

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

------------------------------------------------*/
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ù)據
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;
}
/*
------------------------------------------------
應答IIC總線

------------------------------------------------*/
void Ack(void)
{
Sda=0;
_nop_();
Scl=1;
_nop_();
Scl=0;
_nop_();
}
/*
------------------------------------------------
非應答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ù)模轉換值

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

------------------------------------------------*/
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ù)據
Scl=0;
NoAck();
Stop();
return Data; //返回值
}

拿去套用就行

i2C總流程

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

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

------------------------------------------------*/
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ù)據
Scl=0;
NoAck();
Stop();
return Data; //返回值
}

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

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯(lián)系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 2
收藏 1
關注 181
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 黄色1级大片 | a级毛片毛片免费观看久潮 上司的丰满人妻 | 东北少妇不带套对白 | 久久青青草原国产精品最新片 | 无码人妻丰满熟妇啪啪网不卡 | 久久久久亚洲AV色欲AV | 免费一级欧美片在线观看 | 国产三区四区五区在线播放 | 这里只有精品国产 | 亚洲人成网在线播放 | 搞逼逼视频 | av网站亚洲 | 国产在线无码视频一区二区三区 | 精品视频在线免费看 | caoporn视频在线| 欧美ⅹxxxxxx | 男人阁久久| 成人练习生 | 久久日韩国产精品免费 | 亚洲欧美一区二区三区二厂 | 女特工42集连续剧免费观看 | 粉嫩极品国产在线无码 | 老司机精品福利视频 | 亚洲曰本AV在线天堂 | 无码成人精品视频在线观看 | 精品一区二区综合 | 乱人伦中文字幕在线 | 男人J桶女人P免费视频 | japanese精品少妇 | 国产色系视频在线观看 | 亚洲AV永久无码天堂网手机版 | 日本三级大片 | 色综合天天综合天天更新 | 国产大胸A在线观看 | 咕咚影院国语在线播放 | 99国产精品一区二区 | 国产中文欧美日韩在线 | 五月婷婷毛片 | chinesemature老熟妇高潮 | 亚洲精品偷拍影视在线观看 | 国产精选网站 |