利用PIC單片機串口模塊實現(xiàn)SPI及I2C總線通信_第1頁
利用PIC單片機串口模塊實現(xiàn)SPI及I2C總線通信_第2頁
利用PIC單片機串口模塊實現(xiàn)SPI及I2C總線通信_第3頁
利用PIC單片機串口模塊實現(xiàn)SPI及I2C總線通信_第4頁
利用PIC單片機串口模塊實現(xiàn)SPI及I2C總線通信_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、利用PIC單片機串口模塊實現(xiàn)SPI及I2C總線通信黃亞中國礦業(yè)大學(xué)信息與電氣工程學(xué)院,江蘇徐州(221008E-mail:huangya1210摘要:本文介紹如何利用PIC單片機的USART模塊模擬實現(xiàn)SPI和I2C總線通信。其中SPI總線通信實現(xiàn)過程較為簡單,本文只給予扼要介紹,對于用USART模塊來實現(xiàn)I2C總線通信是本文的重點,除了介紹實現(xiàn)的方法外,還給出了具體實例。關(guān)鍵詞:串口,SPI總線,I2C總線1. 引言在現(xiàn)代的電子電路設(shè)計中SPI 和I2C兩種串行總線應(yīng)用越來越廣泛,對于硬件上不支持這兩種總線的單片機(如AT89C51來說,要想實現(xiàn)這兩種總線與電路中其它芯片的通信往往采取軟件模

2、擬的辦法來實現(xiàn)。對于PIC系列單片機來說,由于片上的串口模塊支持同步通信,利用這個功能實現(xiàn)SPI 和I2C總線通信會變得更加容易。本文用到的單片機為PIC16F6902,當(dāng)其片上的USART模塊工作在同步通信主模式時通過適當(dāng)?shù)能浖幊碳纯蓪崿F(xiàn)SPI和I2C方式通信。I2C和SPI通信都是高位數(shù)據(jù)先傳送,而USART模塊的通信方式與之相反,所以在數(shù)據(jù)傳送時需調(diào)整。為便于理解,本文用到了SPI接口芯片MCP32023和I2C接口芯片AT24C044,下面分別予以闡述。2. MCP3202 和AT24C04介紹以及操作時序MCP3202是12位分辨率的A/D轉(zhuǎn)換芯片,采用SPI總線接口與單片機通信。

3、圖1是該芯片管腳圖,共有兩個模擬信號輸入通道。2和3管腳分別是模擬輸入通道0和1,而5和6管腳分別是數(shù)據(jù)輸入和數(shù)據(jù)輸出管腳,7管腳是時鐘輸入管腳,4管腳為接地端,1管腳是片選(CS低電平有效,圖3為MCP3202操作時序圖。當(dāng)在DI引腳上出現(xiàn)起始位1時, A/D轉(zhuǎn)換即開始,緊接著在DI引腳上輸入的3位是控制命令:SGL/DIFF為單端/差分輸入選擇。第二位是通道選擇,MSBF為數(shù)據(jù)輸出高位/低位在先格式選擇,當(dāng)控制位輸入全部結(jié)束后,下一個時鐘到來時A/D輸出結(jié)果從DOUT管腳輸出,其中第一個數(shù)據(jù)為引導(dǎo)位0,往后的12位數(shù)據(jù)才是A/D轉(zhuǎn)換的結(jié)果。1 圖1 MCP3202管腳圖圖2 A T24C0

4、4管腳圖 圖3 MCP3202操作時序圖AT24C04是一個EEPROM存儲芯片容量為4Kbit采用I2C總線與控制芯片相連。圖2是該芯片管腳圖,其中A2,A1和A0管腳為芯片地址選擇引腳,其中A0未用到而是作為片內(nèi)地址選擇,7管腳WP為硬件寫保護,5和6管腳分別是串口通信的數(shù)據(jù)和時鐘線,通過上拉電阻分別與單片機的數(shù)據(jù)和時鐘線連接即可。43. SPI和I2C方式通信的具體實現(xiàn)3.1 利用USART模塊模擬SPI 時序?qū)崿F(xiàn)與MCP3202的通信由圖3知MCP3202數(shù)據(jù)輸出管腳在A/D轉(zhuǎn)換完成前為高阻態(tài),而轉(zhuǎn)換完成后其輸入引腳可為任意數(shù)據(jù),故單片機對MCP3202的操作可以看作是半雙工通信,在硬

5、件電路上只需將MCP3202的5和6管腳短接并與單片機USART模塊的數(shù)據(jù)管腳相連,兩者的時鐘管腳再相連即可。MCP32023在接收數(shù)據(jù)時,5管腳的輸入數(shù)據(jù)應(yīng)在時鐘下降沿準(zhǔn)備好,在時鐘上升沿輸入芯片內(nèi)部,MCP32023在完成A/D轉(zhuǎn)換時,轉(zhuǎn)換的結(jié)果在時鐘的下降沿出現(xiàn)在數(shù)據(jù)輸出管腳,在接著的時鐘上升沿數(shù)據(jù)送入單片機3,從以上分析并結(jié)合USART模塊的數(shù)據(jù)傳送時序可知當(dāng)單片機發(fā)送起始位及命令時只要USART工作在同步通信主模式的數(shù)據(jù)發(fā)送方式即可,命令發(fā)送完成后將USART模塊工作方式改為數(shù)據(jù)接收方式,從而將A/D轉(zhuǎn)換結(jié)果讀入單片機。程序上實現(xiàn)很簡單,故在此省略。下面著重介紹如何實現(xiàn)I2C方式的通

6、信。3.2利用USART模塊模擬I2C 時序?qū)崿F(xiàn)與AT24C04的通信當(dāng)USART工作在同步通信主模式方式下,硬件電路實現(xiàn)如圖4所示,AT24C04字節(jié)寫操作時序如圖5所示。 圖4 PIC16F690與A T24C04的硬件接口電路 圖5 A T24C04字節(jié)寫時序圖 起始位的產(chǎn)生:由于或門的原因,只要使單片機的RC0引腳輸出置1從而使AT24C04的時鐘輸入端為高電平,此時單片機只要發(fā)送數(shù)據(jù)0x7F(發(fā)送的數(shù)據(jù)已經(jīng)調(diào)整即可實現(xiàn)起始信號的產(chǎn)生。發(fā)送數(shù)據(jù):此時使RC0引腳輸出低電平,確保AT24C04的時鐘輸入管腳能夠接收到正常的時鐘信號,單片機的BAUDCTL寄存器的SCKP位置1這樣就能保證

7、發(fā)送的時序符合AT24C04的通信時序。注意在發(fā)送數(shù)據(jù)前應(yīng)將數(shù)據(jù)進行調(diào)整以保證AT24C04能夠接收到正確的地址或數(shù)據(jù)信息。接收數(shù)據(jù):此時使RC0引腳輸出低電平并清零BAUDCTL寄存器的SCKP位,同時對接收的數(shù)據(jù)應(yīng)進行調(diào)整,以確保單片機收到正確數(shù)據(jù)。應(yīng)答位的接收與產(chǎn)生:無論接收或發(fā)送應(yīng)答信號,都應(yīng)暫時禁止USART功能,用軟件模擬實現(xiàn)。停止位的產(chǎn)生:首先置位RC0引腳使AT24C04的時鐘輸入端為高電平,然后單片機只要發(fā)送數(shù)據(jù)0x80即可實現(xiàn)停止信號的產(chǎn)生。4. 利用USART模塊實現(xiàn)I2C通信程序設(shè)計限于篇幅所限以下只給出用字節(jié)寫方式寫入AT24C04一個字節(jié)數(shù)據(jù)的程序。對于其它操作方式

8、如讀取單字節(jié)或連續(xù)寫入多字節(jié)數(shù)據(jù)程序稍微改動就可實現(xiàn)。以下程序?qū)崿F(xiàn)的功能是向AT24C04中以0x04為地址的單元中寫入數(shù)據(jù)0xaa。start ;起始位產(chǎn)生程序banksel portcbsf portc,0movlw 0x7fmovwf txregreturnstop ;停止位產(chǎn)生程序banksel portcbsf portc,0movlw 0x80movwf txregreturnwritebyte ;字節(jié)寫子程序movwf txregbankslel txstabsf txsta,txenbtfss txsta,trmt ;通過查詢trmt標(biāo)志位的狀態(tài)判斷發(fā)送是否結(jié)束goto $-1

9、returnack ;接收應(yīng)答子程序banksel rcstabcf rcsta,7bansel trisbbcf trisb,7banksel portbbsf portb,7nopnopbtfsc portb,5goto errreturnerr ;未接受到應(yīng)答信號錯誤處理略maincall usartinitial ;調(diào)用USART模塊初始化程序略call startbanksel portcbcf portc,0movlw 0x05 ;發(fā)送器件地址和寫操作命令0xa0,注意數(shù)據(jù)已經(jīng)調(diào)整call writebyte ;調(diào)用字節(jié)寫子程序banksel baudctlbcf baudctl

10、,sckpcall ackcall usartinitial ;當(dāng)串口功能重新使能時應(yīng)進行初始化movlw 0x20 ;發(fā)送字地址04h,注意數(shù)據(jù)同樣進行了調(diào)整call writebytebanksel baudctlbcf baudctl ,sckpcall ackcall usartinitialmovlw 0x55 ;發(fā)送數(shù)據(jù)0aah,由于USART低位數(shù)據(jù)先發(fā),數(shù)據(jù)調(diào)整為0x55call writebytebanksel baudctlbcf baudctl ,sckpcall ackcall usartinitialcall stopgoto $end5. 結(jié)論對于沒有SPI和 I2

11、C總線硬接口的單片機來說,實現(xiàn)這兩種方式的通信,一般都是采取軟件模擬的辦法實現(xiàn),而本文則給出一新方法:即通過USART模塊實現(xiàn)。對于PIC單片機來說其片上的USART模塊具有同步通信功能,通過適當(dāng)編程即可簡單實現(xiàn)SPI和I2C總線通信。以上程序在實驗中已調(diào)試通過,希望能給讀者一些啟發(fā)。參考文獻1張明峰.PIC單片機入門與實戰(zhàn)M.北京:北京航空航天大學(xué)出版社,2004.2Microchip Technology Inc.PIC16F690 Date SheetDB/OL. .2006.3Microchip Technology Inc.MCP3202 Date SheetDB/OL. .2006

12、.4Atmel Corporation.A T24C04 Data SheetDB/OL.http:/ .2007.Using serial port of PIC microcontroller to Implement SPIand I2C bus communicationsHuang YaInformation and Electrical Engineering,CUMT,Xuzhou,Jiangsu (221008AbstractThis paper introduces how to use USART module of PIC microcontroller to achive SPI bus and I2C bus communications.Achiving SPI bus communication is si

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論