已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
I2C總線入門1) 最近學(xué)習(xí)51單片機(jī),學(xué)到A/D,D/A轉(zhuǎn)換的時(shí)候發(fā)現(xiàn)我板子上的轉(zhuǎn)換芯片不是書上所講的ADC0804和DAC0832而是PCF8591T,看了一下它的數(shù)據(jù)手冊(cè),發(fā)現(xiàn)它并不是書上所說(shuō)的并行傳輸數(shù)據(jù),是使用 I2C 總線傳輸?shù)?。搞了兩天才搞懂,寫出?lái)給大家分享一下,不足之處請(qǐng)務(wù)必不吝指出。以上是I2C總線的簡(jiǎn)單介紹。就比如說(shuō)AT24C02存儲(chǔ)芯片,和PCF8591數(shù)模模數(shù)轉(zhuǎn)換芯片都支持I2C端口。(如下圖) 2) 接下來(lái)看如何使用I2C總線進(jìn)行通信以上是I2C總線通信的格式。由上圖可以看出進(jìn)行通信需要以下幾個(gè)步驟a.初始化I2C總線就是把SDA和SCL都變成高電平。void init()/初始化SDA=1;delay();SCL=1;delay();delay()為延時(shí)函數(shù)void delay()/延時(shí)4-5個(gè)微秒;b.發(fā)送起始信號(hào)就是保持SCL為高電平,而SDA從高電平降為低電平(這是I2C總線的規(guī)定,別問(wèn)我為什么)void start()/起始信號(hào)SDA=1;delay();SCL=1;delay();SDA=0;delay();c.發(fā)送地址字(芯片的硬件地址)(8591的數(shù)據(jù)手冊(cè)) 前四位對(duì)同一種芯片來(lái)說(shuō)是固定的,不同的芯片之間不同。就像pcf8591是1001而at24c02是1010 接下來(lái)三位A0,A1,A2是可編程的三個(gè)地址位,這里說(shuō)說(shuō)的編程并不是通過(guò)軟件編程,而是把A0,A1,A2三個(gè)引腳接不同的電壓來(lái)確定數(shù)值。接VCC表示1,接GND表示0。為什么要有這三個(gè)呢?因?yàn)橛锌赡苣阍贗2C總線上“并聯(lián)”了不止一個(gè)相同的元件(比如說(shuō)接了三個(gè)8591),那你如何來(lái)分辨你要操作的是哪一個(gè)芯片呢,就是通過(guò)設(shè)置A0,A1,A2的數(shù)值,來(lái)區(qū)別??删幊痰牡刂芬粋€(gè)有三位,也就是說(shuō)最多可以接8個(gè)相同的芯片在同一個(gè)I2C總線上。 最后一位是 讀/寫 位,1為讀,0為寫。如何寫數(shù)據(jù)寫數(shù)據(jù)只需要按照時(shí)序圖1.先將SCL置0(只有它為0的時(shí)候SDA才允許變化)2.改變SDA是數(shù)值(就是你當(dāng)前要穿的一位是0還是1)3.把SCL置1(此時(shí)芯片就會(huì)讀取總線上的數(shù)據(jù))下面是代碼#define uchar unsigned char#define uint unsigned intvoid write_byte(uchar date)/寫一字節(jié)數(shù)據(jù)uchar i,temp;temp=date;for(i=0;i8;i+)temp=temp1;/左移一位 移出的一位在CY中SCL=0;/只有在scl=0時(shí)sda能變化值delay();SDA=CY;delay();SCL=1;delay();SCL=0;delay();SDA=1;delay();發(fā)送地址的時(shí)候只需把地址傳給該函數(shù)即可。 d.應(yīng)答(ACK) 每接受或發(fā)送一字節(jié)數(shù)據(jù)后都需要發(fā)送一位應(yīng)答,來(lái)表是否收到了前面一個(gè)字節(jié)的數(shù)據(jù)。void respons()/應(yīng)答 相當(dāng)于一個(gè)智能的延時(shí)函數(shù)uchar i;SCL=1;delay();while(SDA=1)&(i250)/沒(méi)收到應(yīng)答,我等!i+;/等了250次沒(méi)收到就不管他了,就當(dāng)他收到了-_- /其實(shí)沒(méi)收到的話可以結(jié)束程序的SCL=0;delay();e.發(fā)送/接受數(shù)據(jù)(取決于前面地址字的最后一位讀/寫位)發(fā)送數(shù)據(jù)和上面的發(fā)送地址調(diào)用同一個(gè)函數(shù),只要穿給他數(shù)據(jù)即可。 接收數(shù)據(jù)其實(shí)和發(fā)送數(shù)據(jù)差不多,只不過(guò)要把接收到的數(shù)據(jù)一位一位拼裝成一字節(jié)數(shù)據(jù),看代碼uchar read_byte()uchar i,k;SCL=0;delay();SDA=1;delay();for(i=0;i8;i+)SCL=1;delay();k=(k1)|SDA;/先左移一位,再在最低位接受當(dāng)前位SCL=0;delay();return k;f.應(yīng)答g.如此循環(huán),直到數(shù)據(jù)一個(gè)字一個(gè)字的發(fā)完h.發(fā)送終止信號(hào) 就是SCL在高電平的時(shí)候SDA由低電平變成高電平void stop()/停止信號(hào)SDA=0;delay();SCL=1;delay();SDA=1;delay();以上就是整個(gè)數(shù)據(jù)傳輸?shù)倪^(guò)程了 為了更好的掌握I2C總線我在此放兩個(gè)例子,一個(gè)是書上(郭天祥的,你們懂的)EPROM存儲(chǔ)定時(shí)時(shí)間的例子,還有就是用PCF8591進(jìn)行D/A轉(zhuǎn)換的例子。1.EPROM存儲(chǔ)定時(shí)時(shí)間/JP10(P0)接JP12/我發(fā)現(xiàn)數(shù)據(jù)手冊(cè)(電路圖pdf)上錯(cuò)了 SCL連的是P21 而SDA連的P20/程序功能:在數(shù)碼管上顯示數(shù)字,每隔1s增加1/ 但是每次復(fù)位或者掉電程序都會(huì)把當(dāng)前數(shù)值存儲(chǔ)到AT24C02中,并在下次啟動(dòng)時(shí)讀取#include #define uchar unsigned char#define uint unsigned intbit write=0;/寫24c02的標(biāo)志sbit SCL=P21; /串行時(shí)鐘輸入端sbit SDA=P20; /串行數(shù)據(jù)輸入端sbit LS138A=P22;/138譯碼器的3位 控制數(shù)碼管的 sbit LS138B=P23;sbit LS138C=P24;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/數(shù)顯管字模uchar second,tempt;/second用來(lái)計(jì)秒數(shù) ,tempt用來(lái)臨時(shí)存放0.05s的次數(shù) 滿20即1s寫入void delay()/延時(shí)4-5個(gè)微秒;void delay_1ms(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void start()/起始信號(hào)SDA=1;delay();SCL=1;delay();SDA=0;delay();void stop()/停止信號(hào)SDA=0;delay();SCL=1;delay();SDA=1;delay();void respons()/應(yīng)答 相當(dāng)于一個(gè)智能的延時(shí)函數(shù)uchar i;SCL=1;delay();while(SDA=1)&(i250)/沒(méi)收到應(yīng)答,我等!i+;/等了250次沒(méi)收到就不管他了,就當(dāng)他收到了-_- /其實(shí)沒(méi)收到的話可以結(jié)束程序的SCL=0;delay();void init()/初始化SDA=1;delay();SCL=1;delay();void write_byte(uchar date)/寫一字節(jié)數(shù)據(jù)uchar i,temp;temp=date;for(i=0;i8;i+)temp=temp1;/左移一位 移出的一位在CY中SCL=0;/只有在scl=0時(shí)sda能變化值delay();SDA=CY;delay();SCL=1;delay();SCL=0;delay();SDA=1;delay();uchar read_byte()uchar i,k;SCL=0;delay();SDA=1;delay();for(i=0;i8;i+)SCL=1;delay();k=(k=100)second=0;TMOD=0x01;/定時(shí)器工作方式1ET0=1;EA=1;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;/開(kāi)始計(jì)時(shí)while(1)display(second/10,second%10);if(write=1)write=0;write_add(2,second);void t0() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;tempt+;if(tempt=20)tempt=0;second+;write=1;if(second=100)second=0;這是電路圖為了更好的掌握I2C總線我在此放兩個(gè)例子,一個(gè)是書上(郭天祥的,你們懂的)EPROM存儲(chǔ)定時(shí)時(shí)間的例子,還有就是用PCF8591進(jìn)行D/A轉(zhuǎn)換的例子。1.EPROM存儲(chǔ)定時(shí)時(shí)間/I2C總線很強(qiáng)大/程序功能:通過(guò)DA轉(zhuǎn)換把輸出電壓逐漸增大,使加在上面的發(fā)光二級(jí)管慢慢變亮/ 到最亮后再變暗,如此循環(huán)#include #define uchar unsigned char#define uint unsigned int#define PCF8591 0x90 /PCF8591 地址sbit SCL=P21; /串行時(shí)鐘輸入端sbit SDA=P20; /串行數(shù)據(jù)輸入端void delay()/延時(shí)4-5個(gè)微秒;void delay_1ms(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void start()/開(kāi)始信號(hào)SDA=1;delay();SCL=1;delay();SDA=0;delay();void stop()/停止信號(hào)SDA=0;delay();SCL=1;delay();SDA=1;delay();void respons()/應(yīng)答 相當(dāng)于一個(gè)智能的延時(shí)函數(shù)uchar i;SCL=1;delay();while(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國(guó)智慧養(yǎng)老服務(wù)行業(yè)商業(yè)模式創(chuàng)新戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國(guó)汽車后市場(chǎng)行業(yè)開(kāi)拓第二增長(zhǎng)曲線戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國(guó)控制線纜組件行業(yè)資本規(guī)劃與股權(quán)融資戰(zhàn)略制定與實(shí)施研究報(bào)告
- 收看《反腐為人民》心得體會(huì):弘揚(yáng)清風(fēng)正氣筑牢廉潔根基
- 年產(chǎn)xxx新型建材新型墻體材料項(xiàng)目可研報(bào)告模板
- 廣西河池市環(huán)江縣2021-2022學(xué)年五年級(jí)上學(xué)期英語(yǔ)期末試卷
- 商品加工知識(shí)培訓(xùn)課件
- 學(xué)校消防安全知識(shí)培訓(xùn)
- 債券價(jià)格的敏感性第五章
- 二零二五年度外墻內(nèi)保溫工程進(jìn)度匯報(bào)與審批合同3篇
- 中國(guó)郵政儲(chǔ)蓄銀行員工違規(guī)行為處理辦法
- 2023年長(zhǎng)沙市中考數(shù)學(xué)真題試卷及答案
- 《電力設(shè)備消防典型準(zhǔn)則》(DL5027-2022)
- 米吳科學(xué)漫畫奇妙萬(wàn)象篇
- 河南省鄭州市金水區(qū)2022-2023學(xué)年三年級(jí)上學(xué)期期末數(shù)學(xué)試卷
- XXX酒店開(kāi)辦費(fèi)POB預(yù)算
- Z矩陣、Y矩陣、A矩陣、S矩陣、T矩陣定義、推導(dǎo)及轉(zhuǎn)換公式
- 中美歐規(guī)范樁基承載力計(jì)算設(shè)計(jì)對(duì)比
- 外科洗手操作考核評(píng)分表
- 復(fù)旦大學(xué)外國(guó)留學(xué)生入學(xué)申請(qǐng)表
- 長(zhǎng)安汽車發(fā)動(dòng)機(jī)水溫高故障案例分析處置
評(píng)論
0/150
提交評(píng)論