版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、-. z.I2C總線入門1 最近學習51單片機,學到A/D,D/A轉換的時候發(fā)現(xiàn)我板子上的轉換芯片不是書上所講的ADC0804和DAC0832而是PCF8591T,看了一下它的數(shù)據(jù)手冊,發(fā)現(xiàn)它并不是書上所說的并行傳輸數(shù)據(jù),是使用 I2C 總線傳輸?shù)摹8懔藘商觳鸥愣?,寫出來給大家分享一下,缺乏之處請務必不吝指出。以上是I2C總線的簡單介紹。就比方說AT24C02存儲芯片,和PCF8591數(shù)模模數(shù)轉換芯片都支持I2C端口。如下列圖2 接下來看如何使用I2C總線進展通信以上是I2C總線通信的格式。由上圖可以看出進展通信需要以下幾個步驟a.初始化I2C總線就是把SDA和SCL都變成高電平。void i
2、nit()/初始化SDA=1;delay();SCL=1;delay();delay為延時函數(shù)void delay()/延時4-5個微秒;b.發(fā)送起始信號就是保持SCL為高電平,而SDA從高電平降為低電平這是I2C總線的規(guī)定,別問我為什么void start()/起始信號SDA=1;delay();SCL=1;delay();SDA=0;delay();c.發(fā)送地址字芯片的硬件地址8591的數(shù)據(jù)手冊 前四位對同一種芯片來說是固定的,不同的芯片之間不同。就像pcf8591是1001而at24c02是1010 接下來三位A0,A1,A2是可編程的三個地址位,這里說說的編程并不是通過軟件編程,而是把
3、A0,A1,A2三個引腳接不同的電壓來確定數(shù)值。接VCC表示1,接GND表示0。為什么要有這三個呢?因為有可能你在I2C總線上并聯(lián)了不止一個一樣的元件比方說接了三個8591,那你如何來分辨你要操作的是哪一個芯片呢,就是通過設置A0,A1,A2的數(shù)值,來區(qū)別??删幊痰牡刂芬粋€有三位,也就是說最多可以接8個一樣的芯片在同一個I2C總線上。 最后一位是 讀/寫 位,1為讀,0為寫。如何寫數(shù)據(jù)寫數(shù)據(jù)只需要按照時序圖1.先將SCL置0只有它為0的時候SDA才允許變化2.改變SDA是數(shù)值就是你當前要穿的一位是0還是13.把SCL置1此時芯片就會讀取總線上的數(shù)據(jù)下面是代碼#define uchar unsi
4、gned 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時sda能變化值delay();SDA=CY;delay();SCL=1;delay();SCL=0;delay();SDA=1;delay();發(fā)送地址的時候只需把地址傳給該函數(shù)即可。 d.應答ACK 每承受或發(fā)送一字節(jié)數(shù)據(jù)后都需要發(fā)送一位應答,來表是否收到了前面一個字節(jié)的數(shù)據(jù)。void respons(
5、)/應答 相當于一個智能的延時函數(shù)uchar i;SCL=1;delay();while(SDA=1)&(i250)/沒收到應答,我等!i+;/等了250次沒收到就不管他了,就當他收到了-_- /其實沒收到的話可以完畢程序的SCL=0;delay();e.發(fā)送/承受數(shù)據(jù)取決于前面地址字的最后一位讀/寫位發(fā)送數(shù)據(jù)和上面的發(fā)送地址調用同一個函數(shù),只要穿給他數(shù)據(jù)即可。接收數(shù)據(jù)其實和發(fā)送數(shù)據(jù)差不多,只不過要把接收到的數(shù)據(jù)一位一位拼裝成一字節(jié)數(shù)據(jù),看代碼uchar read_byte()uchar i,k;SCL=0;delay();SDA=1;delay();for(i=0;i8;i+)SCL=1;d
6、elay();k=(k1)|SDA;/先左移一位,再在最低位承受當前位SCL=0;delay();return k;f.應答g.如此循環(huán),直到數(shù)據(jù)一個字一個字的發(fā)完h.發(fā)送終止信號 就是SCL在高電平的時候SDA由低電平變成高電平void stop()/停頓信號SDA=0;delay();SCL=1;delay();SDA=1;delay();以上就是整個數(shù)據(jù)傳輸?shù)倪^程了 為了更好的掌握I2C總線我在此放兩個例子,一個是書上郭天祥的,你們懂的EPROM存儲定時時間的例子,還有就是用PCF8591進展D/A轉換的例子。1.EPROM存儲定時時間/JP10P0接JP12/我發(fā)現(xiàn)數(shù)據(jù)手冊電路圖pdf
7、上錯了 SCL連的是P21 而SDA連的P20/程序功能:在數(shù)碼管上顯示數(shù)字,每隔1s增加1/ 但是每次復位或者掉電程序都會把當前數(shù)值存儲到AT24C02中,并在下次啟動時讀取#include #define uchar unsigned char#define uint unsigned intbit write=0;/寫24c02的標志sbit SCL=P21; /串行時鐘輸入端sbit SDA=P20; /串行數(shù)據(jù)輸入端sbit LS138A=P22;/138譯碼器的3位 控制數(shù)碼管的 sbit LS138B=P23;sbit LS138C=P24;uchar code table=0*
8、3f,0*06,0*5b,0*4f,0*66,0*6d,0*7d,0*07,0*7f,0*6f;/數(shù)顯管字模uchar second,tempt;/second用來計秒數(shù) ,tempt用降臨時存放0.05s的次數(shù) 滿20即1s寫入void delay()/延時4-5個微秒;void delay_1ms(uint z)uint *,y;for(*=z;*0;*-)for(y=110;y0;y-);void start()/起始信號SDA=1;delay();SCL=1;delay();SDA=0;delay();void stop()/停頓信號SDA=0;delay();SCL=1;delay(
9、);SDA=1;delay();void respons()/應答 相當于一個智能的延時函數(shù)uchar i;SCL=1;delay();while(SDA=1)&(i250)/沒收到應答,我等!i+;/等了250次沒收到就不管他了,就當他收到了-_- /其實沒收到的話可以完畢程序的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
10、;/只有在scl=0時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=0*01;/定時器工作方式1ET0=1;EA=1;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;/開場計時while(1)display(second/10,secon
11、d%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總線我在此放兩個例子,一個是書上郭天祥的,你們懂的EPROM存儲定時時間的例子,還有就是用PCF8591進展D/A轉換的例子。1.EPROM存儲定時時間/I2C總線很強大/程序功能:通過DA轉換把輸出電壓逐漸增大,使加
12、在上面的發(fā)光二級管慢慢變亮/ 到最亮后再變暗,如此循環(huán)#include #define uchar unsigned char#define uint unsigned int#define PCF8591 0*90 /PCF8591 地址sbit SCL=P21; /串行時鐘輸入端sbit SDA=P20; /串行數(shù)據(jù)輸入端void delay()/延時4-5個微秒;void delay_1ms(uint z)uint *,y;for(*=z;*0;*-)for(y=110;y0;y-);void start()/開場信號SDA=1;delay();SCL=1;delay();SDA=0;delay();void stop()/停頓信號SDA=0;delay();SCL=1;delay();SDA=1;delay();void respons()/應答 相當于一個智能
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版新能源產(chǎn)品銷售合同標準模板
- 2025年度熱鍍鋅鋼管銷售合同范本2篇
- 二零二五年度企業(yè)財務報表編制與分析合同范本3篇
- 2025年度體育場館教練個人聘用合同示例4篇
- 2025年度二手房全款買賣合同房產(chǎn)交易風險提示協(xié)議
- 2025年度城市綜合體商業(yè)空間租賃及品牌入駐協(xié)議
- 跨領域的安全逃生技巧探索
- 綠色能源在農(nóng)業(yè)機械中的運用前景
- 智能家居時代下的家用醫(yī)療設備選擇
- 2025版新能源產(chǎn)業(yè)信托借款合同范本系列3篇
- 2025年人民教育出版社有限公司招聘筆試參考題庫含答案解析
- 康復醫(yī)學治療技術(士)復習題及答案
- 完整版100以內(nèi)加減法混合運算4000道100
- 2024年產(chǎn)權管理部年終工作總結例文(3篇)
- 《血管性血友病》課件
- 高三日語一輪復習日語助詞「に」和「を」的全部用法課件
- 機場地勤勞動合同三篇
- 2024年山東省高考政治試卷真題(含答案逐題解析)
- 《用銳角三角函數(shù)解決問題(3)》參考課件
- 訂婚協(xié)議書手寫模板攻略
- 風水學的基礎知識培訓
評論
0/150
提交評論