單片機技術(shù)與項目訓(xùn)練 課件 第9章 單片機串行總線通信設(shè)計_第1頁
單片機技術(shù)與項目訓(xùn)練 課件 第9章 單片機串行總線通信設(shè)計_第2頁
單片機技術(shù)與項目訓(xùn)練 課件 第9章 單片機串行總線通信設(shè)計_第3頁
單片機技術(shù)與項目訓(xùn)練 課件 第9章 單片機串行總線通信設(shè)計_第4頁
單片機技術(shù)與項目訓(xùn)練 課件 第9章 單片機串行總線通信設(shè)計_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

單片機串行總線通信設(shè)計第9章在單片機的通信技術(shù)中,串行通信扮演著重要的角色。除串口數(shù)據(jù)通信之外,單片機與外部的通信還有常用的I2C總線、SPI總線等,它們都是標(biāo)準(zhǔn)的串行總線通信技術(shù),有的單片機內(nèi)部已經(jīng)包含了這些接口硬件設(shè)計。然而,也有很多芯片、設(shè)備并不具備標(biāo)準(zhǔn)的串行總線接口,而是提供了接口的協(xié)議和控制時序,需要單片機通過I/O口來模擬產(chǎn)生時序邏輯控制脈沖對這些設(shè)備進行讀/寫控制。引言目錄單片機I/O口時序控制方法1DS18B20數(shù)字溫度傳感器通信2本章小結(jié)6項目訓(xùn)練一:溫度采集系統(tǒng)設(shè)計3項目訓(xùn)練二:精準(zhǔn)數(shù)字鐘設(shè)計5行業(yè)PPT模板/hangye/DS1302時鐘芯片通信49.1單片機I/O時序控制方法9.1.1并行轉(zhuǎn)串行單片機內(nèi)部的存儲數(shù)據(jù)通常以字節(jié)為單位,而單片機與外圍設(shè)備的通信需要通過I/O口將單片機內(nèi)部的字節(jié)數(shù)據(jù)發(fā)送出來,這就需要經(jīng)過并行到串行的數(shù)據(jù)轉(zhuǎn)換,把8位數(shù)據(jù)按位展開,一位接一位地把數(shù)據(jù)順序傳送出去,即把并行數(shù)據(jù)轉(zhuǎn)為串行數(shù)據(jù)。在通信接口的設(shè)計中,除需要一根數(shù)據(jù)線外,通常還需要一根時鐘線(并不是必需的)作為數(shù)據(jù)的時間基準(zhǔn)。9.1.1并行轉(zhuǎn)串行圖1一種并行轉(zhuǎn)串行的時序9.1.1并行轉(zhuǎn)串行1時鐘輸出

時鐘的波形是一個方波,方波的輸出在第5章介紹過,可以用定時器來實現(xiàn)。但是這里的方波需要和數(shù)據(jù)輸出進行配合,定時器的輸出方式不適合這樣的操作。因此,可以采用延時的方式來實現(xiàn),延時的時間根據(jù)時序參數(shù)的要求設(shè)定即可。2串行數(shù)據(jù)的輸出串行數(shù)據(jù)的輸出是重點,它是把1字節(jié)的數(shù)據(jù)變?yōu)?位的數(shù)據(jù)順序輸出,需要用到的算法如下。設(shè)要傳輸?shù)臄?shù)據(jù)為0x56,其二進制數(shù)是01010110,要把這些二進制數(shù)由低位到高位拆分出來,需要用到與運算和移位運算。算法解釋如下。(1)把數(shù)據(jù)和0x01進行與運算(2)把數(shù)據(jù)右移一位,得到00101011,再和00000001進行與算法,得到00000001,把它送到I/O口,I/O口上得到的數(shù)據(jù)為“1”。(3)以此類推,最后即可把一字節(jié)的數(shù)據(jù)按位拆開送到I/O口,從而實現(xiàn)數(shù)據(jù)由并行轉(zhuǎn)串行的操作。程序算法通過一條語句來實現(xiàn):

DATA=(send_data>>i)&0x1; //i從0到7遞增9.1.1并行轉(zhuǎn)串行3合并操作把時鐘產(chǎn)生和串行數(shù)據(jù)輸出合并在一起,就可以實現(xiàn)類似圖1的時序控制要求,即先把時鐘置1(初始為0),產(chǎn)生上升沿脈沖并延時;然后做與運算和移位運算和與運算,把結(jié)果輸出并延時;最后把時鐘置0,并延時,延時的時間根據(jù)實際要求而定。主要的算法示例程序如下:for(i=0;i<8;i++){ CLK=1;//時鐘上升沿延時; DATA=(send_data>>i)&0x1; //將send_data的第i位賦DATA

延時; CLK=0; //時鐘下降沿 延時;}9.1.2串行轉(zhuǎn)并行1時鐘上升沿檢測程序中是通過while(1)來循環(huán)檢測CLK的狀態(tài)的,當(dāng)檢測到上一次的CLK的狀態(tài)clk_history為0,并且當(dāng)前的CLK狀態(tài)clk_get為1時,即認(rèn)為檢測到一個時鐘上升沿。while(1){ clk_get=CLK; //在一次while循環(huán)中,只采樣一次CLK端口

if((clk_history==0)&&(clk_get==1)) //時鐘上升沿

{...(略)//起始位檢測及有效數(shù)據(jù)的讀取

} clk_history=clk_get;}后面的起始位檢測及有效數(shù)據(jù)的讀取均在檢測到時鐘上升沿時進行。9.1.2串行轉(zhuǎn)并行2起始位檢測使用一個關(guān)鍵變量state來表示單片機程序當(dāng)前的工作狀態(tài),當(dāng)state為0時,表示當(dāng)前處于起始位檢測狀態(tài);當(dāng)state為1時,表示當(dāng)前處于有效數(shù)據(jù)的讀取狀態(tài)。state的初始值為0,當(dāng)檢測到CLK上升沿有效且DATA的數(shù)據(jù)為0時,認(rèn)為檢測到起始位,將state置1。9.1.2串行轉(zhuǎn)并行3有效數(shù)據(jù)讀取當(dāng)state為1時,進行有效數(shù)據(jù)的讀取。通過變量cnt來表示當(dāng)前讀取的串行數(shù)據(jù)位是接收數(shù)據(jù)data_receive的第幾位,cnt的數(shù)值為0~7。從I/O口讀進來的數(shù)據(jù)是一個接一個的二進制數(shù),需要把它們組合到一起,形成1字節(jié)的數(shù)據(jù),這里需要用到左移和或運算。算法原理是:在時鐘信號CLK上升沿到來時讀取一位I/O口(DATA)的數(shù)據(jù)(data_get),左移cnt(cnt初始值為0)位后,將其和存放最終結(jié)果的變量data_receive進行或運算,并將結(jié)果存放到data_receive中,依次循環(huán)執(zhí)行類似操作,便可將串行的位數(shù)據(jù)組合或1字節(jié)數(shù)據(jù)。算法實現(xiàn)如下:data_receive|=(data_get<<cnt);當(dāng)有效數(shù)據(jù)全部采集完后(CLK上升沿有效,state為1,cnt為7),將cnt置0、state置0,并將最終采集的并行數(shù)據(jù)賦給P0口顯示。9.1.2串行轉(zhuǎn)并行課堂練習(xí)

參考例9-1和例9-2,搭建一個并行轉(zhuǎn)串行和串行轉(zhuǎn)并行系統(tǒng),并編寫單片機程序,實現(xiàn)串行通信。9.2

DS18B20數(shù)字溫度傳感器通信9.2.1DS18B20基本知識圖2DS18B20的封裝與引腳DS18B20數(shù)字溫度傳感器是DALLAS公司生產(chǎn)的單總線器件(1-Wire),具有線路簡單。體積小的特點。因此用它組成一個測溫系統(tǒng)具有線路簡單的優(yōu)點。在一根通信線上,可以掛很多這樣的數(shù)字溫度傳感器。而且它輸出的是數(shù)字信號,與單片機接口連接非常方便,不需要經(jīng)過A/D轉(zhuǎn)換。9.2.1DS18B20基本知識1DS18B20產(chǎn)品結(jié)構(gòu)特點只要求一個端口即可實現(xiàn)通信。其中的每個器件上都有獨一無二的序列號。實際應(yīng)用中不需要外部任何元器件即可實現(xiàn)測溫。測量溫度范圍為-55~+125℃。用戶可以從9位到12位選擇其分辨率。內(nèi)部有溫度上、下限

告警設(shè)置。9.2.1DS18B20基本知識2.DS18B20的4個主要的數(shù)據(jù)部件(1)64位序列號編碼:可用來區(qū)分多個連接在同一總線上的DS18B20器件。(2)溫度數(shù)值:最高12位,用16位符號擴展的二進制補碼讀數(shù)形式提供,以0.0625℃/LSB的形式表達,其中S為符號位,其格式如圖3所示。二進制序列中的前面5位是符號位,如果測得的溫度值大于0,那么這5位為0,只要將測得的數(shù)值乘以0.0625即可得到實際溫度;如果測得的溫度值小于0,那么這5位為1,測得的數(shù)值需要取反加1再乘以0.0625,這樣可得到實際溫度值。圖3

DS18B20的溫度值格式9.2.1DS18B20基本知識(3)配置寄存器。如圖4所示,該字節(jié)各位的意義:低5位一直都是1,TM是測試模式位,用于設(shè)置DS18B20是在工作模式下還是在測試模式下。在DS18B20出廠時,該位被設(shè)置為0,用戶不要改動。R1和R0用來設(shè)置分辨率。圖4配置寄存器數(shù)據(jù)格式9.2.1DS18B20基本知識(4)存儲器。DS18B20數(shù)字溫度傳感器的內(nèi)部存儲器包括一個高速暫存RAM和一個非易失性的且可電擦除的EEPROM,高速暫存RAM由9字節(jié)組成,其分布如表1所示。寄存器內(nèi)容字節(jié)地址溫度值低位(LSByte)0溫度值高位(MSByte)1高溫限值(TH)2低溫限值(TL)3配置寄存器4保留5保留6保留7CRC校驗值8表1DS18B20的高速暫存RAM分布9.2.1DS18B20基本知識3DS18B20控制指令(1)復(fù)位。根據(jù)DS18B20的通信協(xié)議,主機(單片機)控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過3個步驟。①每次讀/寫前都要對DS18B20進行復(fù)位操作。②復(fù)位成功后發(fā)送一條ROM指令。③發(fā)送RAM指令。9.2.1DS18B20基本知識(2)寫時序voidWR_Bit(biti){DQ=0; //總線拉低,產(chǎn)生寫時序_nop_();_nop_(); //總線拉低持續(xù)時間要長于1μsDQ=i; //寫數(shù)據(jù)delayxus15(3); //延時45μs,等待DS18B20采樣讀取DQ=1; //拉高釋放總線}圖5DS18B20寫操作時序9.2.1DS18B20基本知識(3)讀時序unsignedcharRead_Bit(){unsignedcharreadb;DQ=0; //拉低總線_nop_();_nop_();DQ=1; //釋放總線_nop_();_nop_();_nop_();_nop_();readb=DQ; //讀時隙產(chǎn)生7μs后讀取總線數(shù)據(jù)

delayxus15(3); //延時45μs,滿足讀時隙的時間要求

DQ=1; //釋放總線

returnreadb; //返回讀取的數(shù)據(jù)}9.2.1DS18B20基本知識圖6DS18B20讀操作時序9.2.2單片機與計算機的串行通信虛擬串口軟件VSPD圖7虛擬串口軟件界面9.3項目訓(xùn)練一:溫度采集系統(tǒng)設(shè)計9.3.1項目要求利用數(shù)字溫度傳感器DS18B20實現(xiàn)溫度的采集,并將采集的數(shù)據(jù)發(fā)送給計算機,要求每秒傳送一次。計算機可以根據(jù)不同的溫度情況對單片機進行控制,從而實現(xiàn)計算機和單片機的通信與控制。要求利用Proteus仿真軟件來模擬實現(xiàn)。9.3.2項目分析溫度采集系統(tǒng)包含數(shù)字溫度傳感器DS18B20,單片機將DS18B20采集的溫度數(shù)據(jù)發(fā)送給計算機,要求每秒種傳送一次。這里的每秒可以用軟件延時來實現(xiàn),也可以用硬件延時來實現(xiàn),這里采用軟件延時來實現(xiàn)。單片機通過串口與計算機進行通信時,需要注意雙方串口的模式及波特率要一致,可考慮將單片機串口設(shè)置為工作方式1,波特率為2400bit/s。計算機通過串口對單片機進行控制,可以采用LED顯示出來。9.3.3原理圖設(shè)計圖8

溫度采集系統(tǒng)電路原理圖9.3.4編寫單片機與計算機串行通信的程序圖9軟件總體流程9.3.5調(diào)試程序圖10

COMPIN屬性設(shè)置打開串口調(diào)試助手,修改串口為COM1,波特率為2400bit/s,無奇偶校驗位,數(shù)據(jù)位8位,停止位為1位,如圖10所示。用Proteus打開仿真電路文件,先設(shè)置AT89C51的屬性,晶振為12MHz。打開串口COMPIN的屬性對話框,Physicalport選擇COM2,波特率為2400,校驗位為None,數(shù)據(jù)位8,停止位為l。如果需要用到波特率9600bit/s,則需要將晶振改為11.0592MHz。9.4DS1302時鐘芯片通信9.4.1DS1302基本知識DS1302是DALLAS公司推出的一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5~5.5V。它采用三線接口與CPU進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個31×8字節(jié)的用于臨時存放數(shù)據(jù)的RAM。DS1302是DS1202的升級產(chǎn)品,與DS1202兼容,但增加了主電源/后背電源雙電源引腳,同時提供了對后背電源進行涓細電流充電的能力。圖11

DS1302的引腳功能圖和應(yīng)用電路圖9.4.2DS1302的控制字節(jié)DS1302的控制字節(jié)如圖12所示??刂谱止?jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入DS1302。位6如果為0,則表示存取日歷時鐘數(shù)據(jù);為1表示存取RAM數(shù)據(jù)。位5至位1指示操作單元的地址。最低有效位(位0)如果為0,則表示要進行寫操作;為1表示進行讀操作。控制字節(jié)總是從最低位開始輸出的。圖12

DS1302的控制字節(jié)9.4.3DS1302的寄存器READWRITEBIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0RANGE81

H80HCH10SecondsSeconds00~5983H82H

10MinutesMinutes00~5985H84H0:241:12010HourHour1~12/0~230:AM1:PM87H86H0010DateDate1~3189H88H00010MonthMonth1~128BH8AH00000Day1~78DH8CH10YearYear00~998FH8EHWP0000000—91H90HTCSTCSTCSTCSDSDSRSRS—表2DS1302的寄存器9.4.4DS1302的讀寫時序圖13

DS1302的讀寫時序9.5項目訓(xùn)練二:精準(zhǔn)數(shù)字鐘設(shè)計9.5.1項目要求與項目分析利用單片機讀取DS1302的時鐘數(shù)據(jù),并將其時、分、秒數(shù)據(jù)顯示在8位數(shù)碼管上。單片機通過SPI接口與DS1302時鐘芯片進行通信,由于8051單片機片內(nèi)部沒有SPI硬件接口,所以需要通過I/O口模擬來實現(xiàn)SPI時序。數(shù)字鐘需要將其時、分、秒數(shù)據(jù)顯示在8位數(shù)碼管上,一般采用的是動態(tài)掃描顯示方法。9.5.2原理圖設(shè)計圖14

精準(zhǔn)數(shù)字鐘電路圖9.5.3編寫精準(zhǔn)數(shù)字鐘的程序voidDs1302Write(ucharaddr,uchardat){ ucharn; CE=0; _nop_(); SCLK=0;//將SCLK置低電平

_nop_(); CE=1;//將CE(CE)置高電平

_nop_(); for(n=0;n<8;n++)//開始傳送8位地址指令

{ DSIO=addr&0x01;//數(shù)據(jù)從低位開始傳送

addr>>=1; SCLK=1;//數(shù)據(jù)在上升沿時,DS1302讀取數(shù)據(jù)

_nop_();SCLK=0;_nop_(); } for(n=0;n<8;n++) //寫入8位數(shù)據(jù)

{ DSIO=dat&0x01; dat>>=1; SCLK=1; //數(shù)據(jù)在上升沿時,DS1302讀取數(shù)據(jù)

_nop_(); SCLK=0; _nop_(); }

CE=0; //傳送數(shù)據(jù)結(jié)束

_nop_();}1向DS1302寫指令(地址+數(shù)據(jù))9.5.3編寫精準(zhǔn)數(shù)字鐘的程序ucharDs1302Read(ucharaddr){ ucharn,dat,dat1; CE=0; _nop_(); SCLK=0;//將SCLK置低電平

_nop_(); CE=1; //將CE(CE)置高電平

_nop_(); for(n=0;n<8;n++)//開始傳送8位地址指令

{ DSIO=addr&0x01;//數(shù)據(jù)從低位開始傳送

addr>>=1;SCLK=1; //數(shù)據(jù)在上升沿時,DS1302讀數(shù)據(jù)

nop_(); SCLK=0; //DS1302下降沿時,放置數(shù)據(jù)

_nop_(); } _nop_(); for(n=0;n<8;n++) //讀取8位數(shù)據(jù)

{ dat1=DSIO; //

溫馨提示

  • 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

提交評論