單片機(jī)技術(shù)與項(xiàng)目訓(xùn)練 課件 第9章 單片機(jī)串行總線通信設(shè)計(jì)_第1頁(yè)
單片機(jī)技術(shù)與項(xiàng)目訓(xùn)練 課件 第9章 單片機(jī)串行總線通信設(shè)計(jì)_第2頁(yè)
單片機(jī)技術(shù)與項(xiàng)目訓(xùn)練 課件 第9章 單片機(jī)串行總線通信設(shè)計(jì)_第3頁(yè)
單片機(jī)技術(shù)與項(xiàng)目訓(xùn)練 課件 第9章 單片機(jī)串行總線通信設(shè)計(jì)_第4頁(yè)
單片機(jī)技術(shù)與項(xiàng)目訓(xùn)練 課件 第9章 單片機(jī)串行總線通信設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩39頁(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)介

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

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

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

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

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

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

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

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

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

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

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

DQ=1; //釋放總線

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

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

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

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

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

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

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

{ dat1=DSIO; //

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論