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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13576|回復: 2
收起左側

總結IIC協議學習心得

[復制鏈接]
ID:59284 發表于 2014-2-26 19:16 | 顯示全部樓層 |閱讀模式
無論在51或者stm32的學習中,我們都會使用到IIC總線的數據傳送,從當初51到現在的stm32的學習。iic一直都是只會簡單的使用并未很仔細的去研究中間每一個過程或者時序。今天用了一天的時間去理解IIC。當然這都是建立在以往的學習經驗之中而得。一下都是我自己的一些理解和對照程序而寫的一些IIC的使用過程。PS:純屬本人手打,不喜勿碰!!!!iic總線時序理解:

24C04
引腳:
NC (1)VCC(8)
A1 (2)WP (7)
A2 (3)SCL(6)
GBD(4)SDA(5)
注:SCL
設置start信號和stop信號,由于此時是STM32對24c02發送信號,所以SCL和SDA設置為輸出狀態,即:SDA_OUT();
由時序圖可知:
START:SCL=1,SDA=1,delay(),SDA=0,delay(),SCL=0,//時鐘線為高,數據線從高到低的跳變
STOP :SCL=0,SDA=0,delay(),SCL=1,delay(),SDA=1,//時鐘線為高,數據線從低到高的跳變
STM32程序:
void IIC_Start(void)
{
SDA_OUT(); //sda線輸出
IIC_SDA=1;
IIC_SCL=1;
delay_us(4);
IIC_SDA=0;//START:when CLK is high,DATA change form high to low
delay_us(4);
IIC_SCL=0;//鉗住I2C總線,準備發送或接收數據
}
void IIC_Stop(void)
{
SDA_OUT();//sda線輸出
IIC_SCL=0;
IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
delay_us(4);
IIC_SCL=1;
IIC_SDA=1;//發送I2C總線結束信號
delay_us(4);
}
iic每成功傳送完一個字節后,接收器都必須產生一個應答信號,應答器件在第九個時鐘周期講SDA拉低,表示已經接
收到8位,此時對于24c02有兩種可能的工作方式,第一種是24c02工作于讀,另一種則是工作于寫。
@當工作于讀的方式時,SDA為輸入狀態,即:SDA_IN();此時24c02發送完一個8位數據之后,釋放SDA線,將SDA為輸出
狀態,即:SDA_OUT();并等待stm32發送一個應答信號,若接收到應答信號,則SDA又切換為輸入狀態,即:SDA_IN();
然后繼續發送下一個8位數據;若沒有接受到應答信號,則不切換SDA的工作方式。等待STM32發送停止信號。
@當工作于寫的方式時,則在每接收一個8位字節之后響應一個應答信號。
由時序圖可知:
產生應答信號:SCL=0;SDA_OUT();SDA=0,delay(),SCL=1,delay(),SCL=1;
STM32程序:
void IIC_Ack(void)//產生ACK應答
{
IIC_SCL=0;
SDA_OUT();
IIC_SDA=0;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
}
void IIC_NAck(void)//不產生ACK應答
{
IIC_SCL=0;
SDA_OUT();
IIC_SDA=1;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
}
當iic發送一個起始信號或者是發送一個寫操作時,我們必須要做出應答,因此便設計了應答查詢程序。目的
是為了查詢某一個操作以后通過是否應答來繼續下一步的操作。
應答程序主要是對SDA的讀操作,所以在讀之前必須設置SDA為輸入狀態,即:SDA_IN();
STM32程序:
u8 IIC_Wait_Ack(void)
{
u8 ucErrTime=0;
SDA_IN();
IIC_SDA=1;delay_us(1);
IIC_SCL=1;delay_us(1);
while(READ_SDA)
{
ucErrTime ;
if(ucErrTime>250)
{
IIC_Stop();
return 1;
}
}
IIC_SCL=0;//時鐘輸出0
return 0;
}
設置write信號,由于此時是STM32對24c02的發送信號,所以SCL和SDA設置為輸出狀態,即:SDA_OUT();
由時序圖可知:
write:在SCL跳變時,對SDA賦值即位寫數據,只需主要在一個周期內,SDA不許有電平變化,否則會認
為是開啟或停止信號。
STM32程序:
void IIC_Send_Byte(u8 txd)
{
u8 t;
SDA_OUT();
IIC_SCL=0;//拉低時鐘開始數據傳輸
for(t=0;t<8;t )
{
if((txd&0x80)>>7)
IIC_SDA=1;
else
IIC_SDA=0;
txd<<=1;
delay_us(2); //對TEA5767這三個延時都是必須的
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
delay_us(2);
}
}
設置Read信號,由于此時是24c02對STM32的發送信號,所以SCL設置為輸出狀態,SDA設置為輸入狀態,
即:SDA_IN();
由時序圖可知:
Read:在8個SCL周期內,讀取8個SDA的輸入,就可以知道一個字節的數據。要弄清楚的很,在發送完
之后弄清楚是否需要應答。
STM32程序:
u8 IIC_Read_Byte(unsigned char ack)
{
unsigned char i,receive=0;
SDA_IN();//SDA設置為輸入
for(i=0;i<8;i )
{
IIC_SCL=0;
delay_us(2);
IIC_SCL=1;
receive<<=1;
if(READ_SDA)receive ;
delay_us(1);
}
if (!ack)
IIC_NAck();//發送nACK
else
IIC_Ack(); //發送ACK
return receive;s
}
我們必須要知道芯片的器件地址:我用的是24C04:
1 0 1 0 A2 A1 a8 R/W(1/0)
A0 A1和A2對應器件的管腳1 2和3
a8 a9和a10對應存儲陣列地址字地址
弄清楚完整數據讀/寫過程:
起始信號->發送地址->讀/寫->應答->數據->應答->數據->應答->終止信號
STM32程序:
//在AT24CXX指定地址讀出一個數據
//ReadAddr:開始讀數的地址
//返回值 :讀到的數據
u8 AT24CXX_ReadOneByte(u16 ReadAddr)
{
u8 temp=0;
IIC_Start();
IIC_Send_Byte(0XA0 ((ReadAddr/256)<<1)); //發送器件地址0XA0,寫數據
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr%6); //發送低地址
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(0XA1); //進入接收模式
IIC_Wait_Ack();
temp=IIC_Read_Byte(0);
IIC_Stop();//產生一個停止條件
return temp;
}
//在AT24CXX指定地址寫入一個數據
//WriteAddr :寫入數據的目的地址
//DataToWrite:要寫入的數據
void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
{
IIC_Start();
IIC_Send_Byte(0XA0 ((WriteAddr/256)<<1)); //發送器件地址0XA0,寫數據
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr%6); //發送低地址
IIC_Wait_Ack();
IIC_Send_Byte(DataToWrite); //發送字節
IIC_Wait_Ack();
IIC_Stop();//產生一個停止條件
delay_ms(10);
}

回復

使用道具 舉報

ID:57736 發表于 2014-2-28 17:03 | 顯示全部樓層
挺好的~!謝謝分享
回復

使用道具 舉報

ID:139772 發表于 2016-10-21 16:44 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品久久香蕉国产线看观看亚洲 | 国产色网 | 国产精品久久毛片av大全日韩 | 蜜桃视频在线观看免费视频网站www | 四虎成人精品永久免费av九九 | av永久| 欧美综合国产精品久久丁香 | 成人在线观看免费视频 | 少妇一区二区三区 | www.伊人.com| 色综合久久久久 | 欧美综合国产精品久久丁香 | 亚洲国产成人av | 亚洲一区黄色 | 精品国产视频在线观看 | 天天爽夜夜骑 | 在线看av网址 | 成人免费片 | 超碰日韩 | 欧美 视频 | 国产精品久久久爽爽爽麻豆色哟哟 | 久久久国产精品视频 | 亚洲一区二区三区四区五区午夜 | 亚洲久久在线 | 久草视频在线播放 | 久在线 | 日韩中文字幕在线播放 | 91视频免费| 天天色综 | 欧美人妇做爰xxxⅹ性高电影 | 精品网 | 欧美成人h版在线观看 | 韩国精品在线 | 久久高清国产视频 | 国产欧美一区二区三区国产幕精品 | 久久久久中文字幕 | 特黄特色大片免费视频观看 | 91精品国产色综合久久不卡98口 | av中文字幕在线 | 亚洲a视频 | 成年人在线播放 |