《8051單片機(jī)原理及應(yīng)用》 課件 郭玲 第7、8章 I2C總線開發(fā)、SPI總線開發(fā)_第1頁(yè)
《8051單片機(jī)原理及應(yīng)用》 課件 郭玲 第7、8章 I2C總線開發(fā)、SPI總線開發(fā)_第2頁(yè)
《8051單片機(jī)原理及應(yīng)用》 課件 郭玲 第7、8章 I2C總線開發(fā)、SPI總線開發(fā)_第3頁(yè)
《8051單片機(jī)原理及應(yīng)用》 課件 郭玲 第7、8章 I2C總線開發(fā)、SPI總線開發(fā)_第4頁(yè)
《8051單片機(jī)原理及應(yīng)用》 課件 郭玲 第7、8章 I2C總線開發(fā)、SPI總線開發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩78頁(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)介

網(wǎng)絡(luò)空間安全學(xué)院網(wǎng)絡(luò)安全基礎(chǔ)技術(shù)應(yīng)用第七章I2C總線開發(fā)目錄CONTENT7.1.I2C總線標(biāo)準(zhǔn)7.2.GPIO模擬I2C總線協(xié)議的開發(fā)技術(shù)7.3.STC單片機(jī)I2C功能模塊開發(fā)技術(shù)7.1.I2C總線標(biāo)準(zhǔn)I2C總線只有兩根雙向信號(hào)線:一根是數(shù)據(jù)線SDA,另一根是時(shí)鐘線SCL,通常用于芯片和芯片之間的數(shù)據(jù)交換,是串行總線半雙工通信。I2C器件的應(yīng)用優(yōu)點(diǎn):減少了電路間連線,減小了電路板尺寸,標(biāo)準(zhǔn)化通信過(guò)程,降低了硬件成本,并提高了系統(tǒng)可靠性。7.1.1.I2C總線基本概念I(lǐng)2C是一種串行總線,是在微電子通信控制領(lǐng)域廣泛采用的一種總線標(biāo)準(zhǔn)。它是同步通信的一種特殊形式,具有接口線少,控制方式簡(jiǎn)化,器件封裝形式小,通信速率較高等優(yōu)點(diǎn)。圖7.1-1展示了I2C總線傳輸過(guò)程,Master是主機(jī),Slave是從機(jī),根據(jù)各器件的功能角色可劃分發(fā)送端、接收端,根據(jù)各器件的主從地位又可劃分為主器件、從器件。I2C總線只有兩根雙向信號(hào)線:一根是數(shù)據(jù)線SDA,另一根是時(shí)鐘線SCL,在主從通信中,可以有多個(gè)I2C總線器件同時(shí)接到I2C總線上,通過(guò)地址來(lái)識(shí)別通信對(duì)象。圖7.1-1I2C總線基本概念7.1.1.I2C總線基本概念發(fā)送端:發(fā)送數(shù)據(jù)到總線上的器件。接收器:從總線上接收數(shù)據(jù)的器件。主機(jī):為啟動(dòng)數(shù)據(jù)傳送(START指令)、產(chǎn)生時(shí)鐘(SCL)信號(hào)并中止數(shù)據(jù)傳送(STOP指令)的器件,也稱主控端,SCL信號(hào)必須由主控端發(fā)送,主控端是發(fā)送端或接收端。從機(jī):被主器件尋址的器件。從屬端可以扮演接收端或發(fā)送端的角色。當(dāng)發(fā)送端器件可以主動(dòng)將數(shù)據(jù)放到總線,稱為主控發(fā)送端;若可以回應(yīng)主控端的要求,稱為從屬發(fā)送端。當(dāng)接收端器件可以主動(dòng)接收數(shù)據(jù)時(shí),稱為主控接收端;若依照主控端要求而接收,稱為從屬接收端。7.1.2.I2C總線結(jié)構(gòu)I2C總線上數(shù)據(jù)的傳輸速率在標(biāo)準(zhǔn)模式下可達(dá)100kbit/s,在快速模式下可達(dá)400kbit/s,在高速模式下可達(dá)3.4Mbit/s,典型的I2C總線結(jié)構(gòu)見圖7.1-2,所有I2C設(shè)備上的串行數(shù)據(jù)SDA都接到總線的SDA上,各設(shè)備的時(shí)鐘線SCL接到總線的SCL上。在總線上至少必須有一個(gè)主控端,在圖7.1-2中,主控端可以是單片機(jī)A或是單片機(jī)B。圖7.1-2I2C總線結(jié)構(gòu)7.1.2.I2C總線結(jié)構(gòu)SDA和SCL都是雙向線路,I2C總線需通過(guò)上拉電阻接正電源,當(dāng)總線空閑時(shí),兩根線均為高電平,總線上任一器件輸出的低電平,都將使總線的信號(hào)變低,即各器件的SDA及SCL都是線與關(guān)系,見圖7.1-3。所謂“線與”是指連接到總線的器件輸出級(jí)是漏極開路或集電極開路,此時(shí)只要有一個(gè)器件輸出低電平,總線就被拉低。圖7.1-3I2C總線電路原理圖7.1.2.I2C總線結(jié)構(gòu)如圖7.1-4所示,在I2C總線系統(tǒng)中,CPU是核心,I2C總線由CPU電路引出,其他被控對(duì)象均掛接在I2C總線上。CPU是主機(jī),掛接在總線上的設(shè)備是從機(jī),SCL上的時(shí)鐘信號(hào)始終由主機(jī)產(chǎn)生。圖7.1-4CPU和被控對(duì)象的連接方式每個(gè)接到I2C總線上的器件都有唯一的地址。主機(jī)與其它器件間的數(shù)據(jù)傳送可以是由主機(jī)發(fā)送數(shù)據(jù)到其它器件,這時(shí)主機(jī)即為發(fā)送器。由總線上接收數(shù)據(jù)的器件則為接收器。在單片機(jī)應(yīng)用系統(tǒng)的串行總線擴(kuò)展中,我們經(jīng)常遇到的是以單片機(jī)為主機(jī),其它接口器件為從機(jī)的單主機(jī)情況。7.1.3.I2C總線的通信格式圖7.1-5是I2C總線的時(shí)序圖:SCL是節(jié)拍周期Clock;SDA是數(shù)據(jù)位。每個(gè)節(jié)拍上都有一個(gè)數(shù)據(jù)位在傳輸。發(fā)送器給出起始位,每發(fā)出一個(gè)字節(jié),接收器都要應(yīng)答一次,給出ACK信號(hào)。發(fā)送器的數(shù)據(jù)發(fā)送完畢后,發(fā)出停止位。圖7.1-5I2C時(shí)序圖7.1.3.I2C總線的通信格式I2C總線時(shí)序圖關(guān)鍵描述如下:起始START信號(hào):當(dāng)SCL=1階段中,在SDA上有一個(gè)下降沿跳變,標(biāo)識(shí)著數(shù)據(jù)傳輸啟動(dòng)。停止STOP信號(hào):當(dāng)SCL=1階段中,在SDA上有一個(gè)上升沿跳變,標(biāo)識(shí)著數(shù)據(jù)傳輸停止。應(yīng)答ACK信號(hào):SDA=0,表示接收成功,否則是接收失敗,或者無(wú)應(yīng)答。最后一個(gè)字節(jié)接收器可以不應(yīng)答。在數(shù)據(jù)傳輸?shù)倪^(guò)程中必須通過(guò)ACK信號(hào)來(lái)保證數(shù)據(jù)的有效性。I2C總線進(jìn)行數(shù)據(jù)傳送時(shí),時(shí)鐘信號(hào)為高電平期間,數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定,只有在時(shí)鐘線上的信號(hào)為低電平期間,數(shù)據(jù)線上的高電平或低電平狀態(tài)才允許變化,見圖7.1-6所示。圖7.1-6數(shù)據(jù)位傳輸?shù)臅r(shí)序7.1.3.I2C總線的通信格式從圖7.1-1到圖7.1-6主機(jī)和從機(jī)都共享一根SDA、SCL,為了說(shuō)清楚一個(gè)字節(jié)中SDA的控制情況,圖7.1-7中用了2根SDA示意了主機(jī)SDA和從機(jī)SDA的信號(hào)情況——主機(jī)是發(fā)送端,前8個(gè)時(shí)鐘都由主機(jī)控制SDA的電平狀態(tài),第9個(gè)時(shí)鐘由從機(jī)控制SDA的電平。主機(jī)傳送完畢一個(gè)字節(jié),從機(jī)可以不應(yīng)答,稱為“非應(yīng)答”,SDA保持高電平不變,說(shuō)明字節(jié)接收不成功;從機(jī)“應(yīng)答”,則從機(jī)把SDA拉低,表示字節(jié)接收成功。圖7.1-7一個(gè)字節(jié)的傳輸演示7.1.3.I2C總線的通信格式圖7.1-8給出了起始、終止、應(yīng)答、非應(yīng)答的時(shí)間標(biāo)準(zhǔn)。在程序編寫時(shí),需要注意各個(gè)信號(hào)的最小持續(xù)時(shí)間要求。例如,起始信號(hào)S中SDA的高電平保持時(shí)間需大于4.7微秒,若此過(guò)程中SDA跳變?yōu)榈碗娖胶?,則SCL信號(hào)大于4微秒后才能變化為低電平,從另一個(gè)角度看,即SDA數(shù)據(jù)建立時(shí)間需大于4微秒才能滿足I2C的時(shí)間標(biāo)準(zhǔn)。圖7.1-8數(shù)據(jù)傳輸位的時(shí)間標(biāo)準(zhǔn)7.2.GPIO模擬I2C總線協(xié)議的開發(fā)技術(shù)I2C總線簡(jiǎn)單方便,是芯片間通信經(jīng)常使用的一種總線,很多芯片都具有I2C接口。當(dāng)MCU沒(méi)有I2C功能模塊時(shí),可利用通用輸入輸出管腳模擬I2C總線協(xié)議。7.2.1.GPIO模擬I2C總線的驅(qū)動(dòng)函數(shù)對(duì)照?qǐng)D7.1-7、圖7.1-8時(shí)序圖,書寫I2C總線單字節(jié)讀寫函數(shù),放置在i2c.c文件中,文件中的函數(shù)說(shuō)明如表7.2-1所示。序號(hào)函數(shù)名函數(shù)說(shuō)明1voidi2c_delay(unsignedchari)I2C總線延時(shí)2voidi2c_start(void)I2C總線起始信號(hào)S,在SCL是高電平期間,SDA從高電平變低,該下降沿意味著傳輸?shù)钠鹗肌?voidi2c_stop(void)I2C總線終止信號(hào)P,在SCL是高電平期間,SDA從低電平變高,該上升沿意味著傳輸?shù)慕Y(jié)束。4voidi2c_sendbyte(unsignedcharbyt)總線發(fā)送函數(shù),函數(shù)輸入?yún)?shù)是發(fā)送內(nèi)容。5unsignedchari2c_waitack(void)總線等待應(yīng)答函數(shù),返回值是從機(jī)應(yīng)答位。6unsignedchari2c_receivebyte(void)總線接收函數(shù),返回值是接收內(nèi)容。7voidi2c_sendack(unsignedcharackbit)總線發(fā)送應(yīng)答函數(shù),函數(shù)輸入?yún)?shù)是應(yīng)答位電平。表7.2-1GPIO模擬I2C總線的驅(qū)動(dòng)函數(shù)7.2.1.GPIO模擬I2C總線的驅(qū)動(dòng)函數(shù)i2c.c文件見二維碼7.2-1。二維碼7.2-1GPIO模擬I2C總線驅(qū)動(dòng)程序7.2.2.GPIO模擬I2C總線訪問(wèn)PCF8591數(shù)模轉(zhuǎn)換ADC芯片PCF8591是單片、單電源低功耗8位ADC芯片,具有4個(gè)模擬輸入、一個(gè)輸出和一個(gè)串行I2C總線接口,采用8位逐次逼近式AD轉(zhuǎn)換,主要應(yīng)用于電池供電、汽車、音響等模擬數(shù)據(jù)采集。ADC的最大轉(zhuǎn)換速率取決于I2C總線的最高速率。PCF8591采用I2C總線接口與CPU交換數(shù)據(jù),它將采集到的模擬量轉(zhuǎn)換成二進(jìn)制數(shù)值,輸出到I2C總線上。圖7.2-1是PCF8591芯片管腳圖,圖7.2-2表明器件的通道3連接電位器,電位器電壓可調(diào),圖7.2-3是PCF8591的工作電路圖,PCF8591通過(guò)I2C總線(P20、P21)與上位機(jī)MCU通信。圖7.2-1圖PCF8591器件管腳圖

圖7.2-2

通道3電位器電壓采集7.2.2.GPIO模擬I2C總線訪問(wèn)PCF8591數(shù)模轉(zhuǎn)換ADC芯片圖7.2-3圖

PCF8591工作電路圖7.2.2.GPIO模擬I2C總線訪問(wèn)PCF8591數(shù)模轉(zhuǎn)換ADC芯片1.寫時(shí)序:寫時(shí)序如圖7.2-4所示,這個(gè)過(guò)程是單片機(jī)寫數(shù)據(jù)到ADC器件。由起始信號(hào)S、PCF8591器件地址(Address)、控制字節(jié)(ControlByte)、N個(gè)數(shù)據(jù)字節(jié)(DataByte),以及停止位組成。每寫完一個(gè)字節(jié),單片機(jī)都要釋放總線,接收來(lái)自PCF8591的應(yīng)答。圖7.2-4PCF8591的寫時(shí)序圖7.2-5是ADC器件地址編碼,高四位固定1001,低四位可編程,最后一位表示讀寫方向,“1”表示讀器件,“0”表示寫器件。圖7.2-5ADC器件的地址編碼7.2.2.GPIO模擬I2C總線訪問(wèn)PCF8591數(shù)模轉(zhuǎn)換ADC芯片圖7.2-6是控制字節(jié),規(guī)定了PCF8591的工作方式,控制字節(jié)每個(gè)位的定義:D1D0:A/D通道編號(hào)。00——通道0;01——通道1;10——通道2;11——通道3。D2:自動(dòng)增益選擇,當(dāng)該位是“1”時(shí)表示自動(dòng)增益,否則手動(dòng)增益。D5D4:模擬量輸入方式,00——四路單端輸入;01——三路差分輸入;10——兩兩單端與一路差分;11——兩路差分。D6:模擬輸出使能。當(dāng)AD模擬-數(shù)字轉(zhuǎn)換時(shí)該位是“0”,當(dāng)DA數(shù)字-模擬轉(zhuǎn)換時(shí)該位“1”。圖7.2-6PCF8591的控制寄存器7.2.2.GPIO模擬I2C總線訪問(wèn)PCF8591數(shù)模轉(zhuǎn)換ADC芯片按照?qǐng)D7.2-4書寫單片機(jī)初始化ADC器件的代碼如下:voidinit_pcf8591(void){ i2c_start(); i2c_sendbyte(0x90);//器件地址 i2c_waitack(); i2c_sendbyte(0x03);//控制字節(jié),ADC通道3模擬量輸入 i2c_waitack(); i2c_stop(); }7.2.2.GPIO模擬I2C總線訪問(wèn)PCF8591數(shù)模轉(zhuǎn)換ADC芯片2.讀時(shí)序:圖7.2-7是PCF8591的讀時(shí)序,這個(gè)過(guò)程是單片機(jī)獲取ADC數(shù)據(jù)的時(shí)序,由起始位(S)、器件地址(Address)、N個(gè)轉(zhuǎn)換數(shù)據(jù)及停止位構(gòu)成。首先單片機(jī)寫器件地址,然后等待來(lái)自PCF8591的應(yīng)答,接著PCF8591發(fā)送內(nèi)容到總線,每發(fā)送一個(gè)字節(jié),主機(jī)都應(yīng)答一次,如果主機(jī)不應(yīng)答(發(fā)送1),主機(jī)隨后發(fā)送停止位。圖7.2-7PCF8591的讀時(shí)序7.2.2.GPIO模擬I2C總線訪問(wèn)PCF8591數(shù)模轉(zhuǎn)換ADC芯片按照?qǐng)D7.2-7書寫獲取ADC轉(zhuǎn)換數(shù)值的函數(shù)。unsignedcharadc_pcf8591(void){ unsignedchartemp; i2c_start(); i2c_sendbyte(0x91);//器件地址 i2c_waitack(); temp=i2c_receivebyte();//讀取ADC轉(zhuǎn)換數(shù)值 i2c_sendack(1); i2c_stop(); returntemp;7.2.2.GPIO模擬I2C總線訪問(wèn)PCF8591數(shù)模轉(zhuǎn)換ADC芯片 returntemp;}令模數(shù)轉(zhuǎn)換器PCF8591連接電位器電壓如圖7.2-2所示,GPIO模擬I2C總線讀取電位器電壓,圖7.2-8是電壓顯示界面,二維碼7.2-2展示了開發(fā)示范過(guò)程。圖7.2-8電壓顯示界面7.2.2.GPIO模擬I2C總線訪問(wèn)PCF8591數(shù)模轉(zhuǎn)換ADC芯片二維碼7.2-2GPIO模擬I2C總線電壓采集程序?qū)崿F(xiàn)7.3.STC單片機(jī)I2C功能模塊開發(fā)技術(shù)單片機(jī)模擬I2C總線需要自己書寫I2C總線驅(qū)動(dòng)函數(shù),開發(fā)工作量大。STC8x、STC32x系列單片機(jī)內(nèi)部集成了一個(gè)I2C串行總線控制器,通過(guò)配置寄存器就可以實(shí)現(xiàn)I2C通信。使用單片機(jī)I2C功能模塊的步驟是:首先規(guī)定I2C功能管腳,其次配置I2C功能模塊工作方式,最后讀出I2C模塊的寄存器數(shù)據(jù)。7.3.1.I2C管腳切換STC8x、STC32x系列單片機(jī)提供I2C總線管腳切換功能,可將SCL和SDA切換到不同的I/O口上,以方便用戶分時(shí)復(fù)用I2C總線。(1)P_SW2:寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0P_SW2BAHEAXFR-I2C_S[1:0]CMPQ_SS4_SS3_SS2_SI2C_S[1:0]:I2C功能腳選擇位I2C_S[1:0]SCLSDA00P1.5P1.401P2.5P2.410P7.7P7.611P3.2P3.37.3.2.I2C控制寄存器STC系列單片機(jī)提供的I2C總線提供了兩種操作模式:主機(jī)模式(SCL為輸出口,發(fā)送同步時(shí)鐘信號(hào)),和從機(jī)模式(SCL為輸入口,接收同步時(shí)鐘信號(hào))1.I2C配置寄存器寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0I2CCFG7EFE80HENI2CMSSLMSSPEED[5:0]ENI2C:I2C功能使能控制位。0:禁止I2C功能;1:允許I2C功能。MSSL:I2C功能模式選擇位。0:從機(jī)模式;1:主機(jī)模式。MSSPEED[5:0]:I2C總線速度(等待時(shí)鐘數(shù)),I2C總線速度=SYSCAK/2/(MSSPEED*2+4)。只有當(dāng)I2C模塊工作在主機(jī)模式時(shí),MSSPEED參數(shù)設(shè)置的等待參數(shù)才有效。7.3.2.I2C控制寄存器2.I2C控制寄存器(1)I2C主機(jī)控制寄存器EMSI:主機(jī)模式中斷使能控制位。0:關(guān)閉主機(jī)模式的中斷;1:允許主機(jī)模式的中斷。MSCMD[3:0]主機(jī)命令。寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0I2CMSCR7EFE8HEMSI---MSCMD[3:0]7.3.2.I2C控制寄存器MSCMD[3:0]命令說(shuō)明0000待機(jī),無(wú)動(dòng)作0001起始命令,發(fā)送START信號(hào)0010發(fā)送數(shù)據(jù)命令,SCL產(chǎn)生8個(gè)時(shí)鐘,并將I2CTXD內(nèi)容按位送到SDA0011接收ACK信號(hào)0100接收數(shù)據(jù)命令,SCL產(chǎn)生8個(gè)時(shí)鐘,按位讀取SDA數(shù)據(jù)0101發(fā)送ACK命令0110停止命令,發(fā)送STOP信號(hào)0111保留1000保留1001起始命令+發(fā)送數(shù)據(jù)命令+接收ACK命令,0001+0010+0011組合。1010發(fā)送數(shù)據(jù)命令+接收ACK命令,0010+0011組合1011接收數(shù)據(jù)命令+發(fā)送ACK(0)命令1100接收數(shù)據(jù)命令+發(fā)送NAK(1)命令7.3.2.I2C控制寄存器(2)I2C從機(jī)控制寄存器寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0I2CSLCRFE83H-ESTAIERXIETXIESTOI--SLRSTESTAI:從機(jī)模式時(shí)接收到START信號(hào)中斷允許位。0:禁止中斷;1:使能中斷。ERXI:從機(jī)模式時(shí)接收到1字節(jié)數(shù)據(jù)后中斷允許位。0:禁止中斷;1:使能中斷。ETXI:從機(jī)模式時(shí)發(fā)送完成1字節(jié)數(shù)據(jù)后中斷允許位。0:禁止中斷;1:使能中斷。ESTOI:從機(jī)模式時(shí)接收到STOP信號(hào)中斷允許位。0:禁止中斷;1:使能中斷。SLRST:復(fù)位從機(jī)模式。7.3.2.I2C控制寄存器3.I2C狀態(tài)寄存器(1)I2C主機(jī)狀態(tài)寄存器寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0I2CMSSTFE82HMSBUSYMSIF----MSACKIMSACKOMSBUSY:主機(jī)模式時(shí)I2C控制器狀態(tài)位(只讀)。0:控制器處于空閑狀態(tài);1:控制器處于忙碌狀態(tài)。MSIF:主機(jī)模式的中斷請(qǐng)求位(中斷標(biāo)志位)。當(dāng)處于主機(jī)模式的I2C控制器執(zhí)行完成寄存器I2CMSCR中MSCMD命令后產(chǎn)生中斷信號(hào),硬件自動(dòng)將此位置1,向CPU發(fā)出中斷請(qǐng)求,響應(yīng)中斷后MSIF位必須用軟件清零。MSACKI:主機(jī)模式時(shí),發(fā)送“0011”命令到I2CMSCR的MSCMD位后所接收到的ACK數(shù)據(jù)。MSACKO:主機(jī)模式時(shí),準(zhǔn)備將要發(fā)送出去的ACK信號(hào)。當(dāng)發(fā)送“0101”命令到I2CMSCR的MSCMD位后,控制器會(huì)自動(dòng)讀取此位的數(shù)據(jù)當(dāng)做ACK發(fā)送到SDA。7.3.2.I2C控制寄存器(2)I2C從機(jī)狀態(tài)寄存器寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0I2CSLSTFE84HSLBUSYSTAIFRXIFTXIFSTOIF-SLACKISLACKOSLBUSY:從機(jī)模式時(shí)I2C控制器狀態(tài)位(只讀)。0:控制器處于空閑狀態(tài);1:控制器處于忙碌狀態(tài)。STAIF:從機(jī)模式時(shí)接收到START信號(hào)后的中斷請(qǐng)求位。從機(jī)模式的I2C控制器接收到START信號(hào)后,硬件會(huì)自動(dòng)將此位置1,并向CPU發(fā)中斷請(qǐng)求,響應(yīng)中斷后STAIF位必須用軟件清零。RXIF:從機(jī)模式時(shí)接收到1字節(jié)的數(shù)據(jù)后的中斷請(qǐng)求位。RXIF必須由軟件清零。TXIF:從機(jī)模式時(shí)發(fā)送完成1字節(jié)數(shù)據(jù)后的中斷請(qǐng)求位。TXIF也必須由軟件清零。STOIF:從機(jī)模式時(shí)接收到STOP信號(hào)后的中斷請(qǐng)求位。STOIF也必須由軟件清零。SLACKI:從機(jī)模式時(shí),接收到到的ACK數(shù)據(jù)。SLACKO:從機(jī)模式時(shí),準(zhǔn)備將要發(fā)送出去的ACK信號(hào)7.3.2.I2C控制寄存器4.I2C數(shù)據(jù)寄存器寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0I2CTXDFE86HI2CRXDFE87HI2CTXD:I2C發(fā)送數(shù)據(jù)寄存器,存放將要發(fā)送的I2C數(shù)據(jù);I2CRXD:I2C接收數(shù)據(jù)寄存器,存放接收完成的I2C數(shù)據(jù)。7.3.3.I2C主機(jī)模式訪問(wèn)AT24C02AT24C系列是電可擦寫存儲(chǔ)器EEPROM,數(shù)據(jù)的存儲(chǔ)和取出采用I2C總線實(shí)現(xiàn),AT24C系列產(chǎn)品有以下幾種:AT24C01:128字節(jié)(128×8位);AT24C02:256字節(jié)(256×8位);AT24C04:512字節(jié)(512×8位)AT24C08:1K字節(jié)(1K×8位);AT24C16:2K字節(jié)(2K×8位);以AT24C02為例它的讀取時(shí)序有如下規(guī)定。7.3.3.I2C主機(jī)模式訪問(wèn)AT24C021.單字節(jié)的寫——寫數(shù)據(jù)到存儲(chǔ)單元圖7.3-1是單字節(jié)的讀時(shí)序,此處省略了SCL時(shí)鐘線,SDALine的每個(gè)小方塊都和SCL時(shí)鐘周期節(jié)拍對(duì)應(yīng),一個(gè)小方塊就是一個(gè)時(shí)鐘周期。小方塊對(duì)應(yīng)一個(gè)二進(jìn)制數(shù)值0或1。整個(gè)過(guò)程的時(shí)序由五部分組成,這五部分分別是:起始START位、器件地址(DeviceAddress)、存儲(chǔ)單元地址(WordAddress)、要存儲(chǔ)的數(shù)據(jù)(Data)、結(jié)束STOP位。在兩個(gè)地址、一個(gè)數(shù)據(jù)之后都有ACK應(yīng)答,ACK來(lái)自從機(jī)。圖7.3-1單字節(jié)的寫時(shí)序7.3.3.I2C主機(jī)模式訪問(wèn)AT24C022.單字節(jié)的讀——從存儲(chǔ)單元讀數(shù)據(jù)圖7.3-2是EEPROM單字節(jié)讀時(shí)序,時(shí)序中有2個(gè)START,第一個(gè)是假寫,說(shuō)明I2C總線要訪問(wèn)的器件和存儲(chǔ)單元地址,第二個(gè)是真的讀,給出器件地址,然后把數(shù)據(jù)讀出來(lái),圖中打箭頭指示的地方都是來(lái)自從機(jī)的應(yīng)答信號(hào)。圖7.3-2單字節(jié)的隨機(jī)讀時(shí)序7.3.3.I2C主機(jī)模式訪問(wèn)AT24C023.連續(xù)字節(jié)的寫——CPU將多個(gè)字節(jié)寫入存儲(chǔ)塊圖7.3-3是連續(xù)字節(jié)寫時(shí)序,在單片機(jī)在總線上發(fā)出器件地址和存儲(chǔ)地址后,連續(xù)寫入數(shù)據(jù),在連續(xù)寫的過(guò)程中從機(jī)自動(dòng)將存儲(chǔ)地址指向下一個(gè)單元。對(duì)于AT24C01和AT24C02一次裝載的字節(jié)數(shù)是8,AT24C04、AT24C08、AT24C16芯片一次裝載的字節(jié)數(shù)是16。圖7.3-3連續(xù)字節(jié)的寫時(shí)序7.3.3.I2C主機(jī)模式訪問(wèn)AT24C02按照?qǐng)D7.3-3的時(shí)序,對(duì)應(yīng)程序如下:voidWriteNbyte(u8addr,u8*p,u8number)/*WordAddress,FirstDataAddress,Bytelenth*/{Start();//發(fā)送起始命令SendData(SLAW);//發(fā)送設(shè)備地址+寫命令RecvACK();SendData(addr);//發(fā)送存儲(chǔ)地址RecvACK();do7.3.3.I2C主機(jī)模式訪問(wèn)AT24C02{SendData(*p++);RecvACK();}while(--number);Stop();//發(fā)送停止命令}7.3.3.I2C主機(jī)模式訪問(wèn)AT24C024.連續(xù)字節(jié)的讀——CPU將存儲(chǔ)塊的數(shù)據(jù)讀出來(lái)圖7.3-4是連續(xù)字節(jié)讀時(shí)序,和單字節(jié)的讀一樣,也有一個(gè)“假寫”過(guò)程,然后是真的讀。圖中箭頭的地方都是主機(jī)發(fā)出的應(yīng)答信號(hào)。圖7.3-4連續(xù)字節(jié)的讀時(shí)序在讀的過(guò)程中,主機(jī)應(yīng)答(0),存儲(chǔ)器持續(xù)將下一個(gè)地址里的數(shù)據(jù)送到SDA上,當(dāng)最后一個(gè)字節(jié)數(shù)據(jù)讀完后,單片機(jī)應(yīng)返回“非應(yīng)答”(電平1),并發(fā)出終止信號(hào)以結(jié)束讀出操作。主機(jī)回復(fù)應(yīng)答信號(hào)后,要令SDA為1,釋放總線,以便開展下一次通信。7.3.3.I2C主機(jī)模式訪問(wèn)AT24C02按照?qǐng)D7.3-4時(shí)序圖,對(duì)應(yīng)程序如下:voidReadNbyte(u8addr,u8*p,u8number)/*WordAddress,FirstDataAddress,Bytelenth*/{Start();//發(fā)送起始命令SendData(SLAW);//發(fā)送設(shè)備地址+寫命令RecvACK();SendData(addr);//發(fā)送存儲(chǔ)地址RecvACK();Start();//發(fā)送起始命令SendData(SLAR);//發(fā)送設(shè)備地址+讀命令7.3.3.I2C主機(jī)模式訪問(wèn)AT24C02RecvACK();do{*p=RecvData();p++;if(number!=1)SendACK();//sendACK}while(--number);SendNAK();//sendnoACK Stop();//發(fā)送停止命令}任務(wù)1.I2C功能模塊應(yīng)用開發(fā)任務(wù)要求:在第七屆藍(lán)橋杯單片機(jī)決賽試題中要求選手將測(cè)量到的電壓波動(dòng)事件記錄到EEPROM中,當(dāng)設(shè)備重新上電后,能夠從EEPROM里獲取事件發(fā)生時(shí)間、事件類型、電壓上限、電壓下限等參數(shù)和數(shù)據(jù)。為了簡(jiǎn)化,本任務(wù)對(duì)EEPROM里任意4個(gè)存儲(chǔ)單元讀寫,內(nèi)容顯示在數(shù)碼管。具體要求如下:1.初始化AT24C02第1~4單元的內(nèi)容。2.當(dāng)按鍵P34按下后,記錄按鍵次數(shù)。3.為了對(duì)比和調(diào)試,將讀取到的數(shù)據(jù)同時(shí)發(fā)送到單片機(jī)USB虛擬串口。任務(wù)資訊:AT24CX(X=02,04,08,16,等)是串行E2PROM芯片,圖7.3-5是AT24C02連接電路圖。圖7.3-5AT24C02的連接電路圖圖7.3-6按鍵電路任務(wù)1.I2C功能模塊應(yīng)用開發(fā)采用單片機(jī)自身I2C總線模塊進(jìn)行程序開發(fā),其開發(fā)步驟是:1.設(shè)置P2.4、P2.5是I2C總線;2.設(shè)置I2C功能模塊是主機(jī)模式;3.按照AT24C02的寫時(shí)序,依次發(fā)送起始信號(hào)、寫器件地址、寫單元地址、寫數(shù)據(jù)命令。4.按照AT24C02的讀時(shí)序,依次發(fā)送起始信號(hào)、寫器件地址、寫單元地址、發(fā)送起始信號(hào)、發(fā)送讀信號(hào)、讀取數(shù)據(jù)。任務(wù)1.I2C功能模塊應(yīng)用開發(fā)任務(wù)參考主要代碼:/*************本地函數(shù)聲明**************/voidWriteNbyte(u8addr,u8*p,u8number);voidReadNbyte(u8addr,u8*p,u8number);voidDelay1ms(u8ms);voidDisplayScan(void);voidmain(void){P_SW2=0x90;//使能XFR訪問(wèn),I2C選擇P2.4,P2.5I2CCFG=0xe0;//使能I2C主機(jī)模式I2CMSST=0x00;/*設(shè)置USB虛擬串口*/任務(wù)1.I2C功能模塊應(yīng)用開發(fā)P3M0&=~0X03;//USB數(shù)據(jù)線 P3M1|=0X03; IRC48MCR=0x80; while(!(IRC48MCR&0x01)); USBCLK=0X00; USBCON=0X90; usb_init(); IE2|=0x80; while(DeviceState!=DEVSTATE_CONFIGURED); /*顯示EEPROM初始值*/ for(i=0;i<4;i++)//顯示EEPROM初值 {任務(wù)1.I2C功能模塊應(yīng)用開發(fā) dspbuf[2*i]=datam[i]&0x0f;//顯示數(shù)字小于16,個(gè)位數(shù) dspbuf[2*i+1]=datam[i]>>4&0x0f;//顯示數(shù)字小于16,十位數(shù) } while(1){if(key1==0){Delay1ms(10);//按鍵去抖 while(key1==0);//等待按鍵釋放 key_cnt++; datam[0]=key_cnt; //第一個(gè)單元存儲(chǔ)按鍵次數(shù)任務(wù)1.I2C功能模塊應(yīng)用開發(fā) dspbuf[2*i]=datam[i]&0x0f;//顯示數(shù)字小于16,個(gè)位數(shù) dspbuf[2*i+1]=datam[i]>>4&0x0f;//顯示數(shù)字小于16,十位數(shù) } while(1){if(key1==0){Delay1ms(10);//按鍵去抖 while(key1==0);//等待按鍵釋放 key_cnt++; datam[0]=key_cnt; //第一個(gè)單元存儲(chǔ)按鍵次數(shù)WriteNbyte(AT_addr,datam,4); //寫數(shù)據(jù)到eeprom存儲(chǔ)單元 Delay1ms(2);任務(wù)1.I2C功能模塊應(yīng)用開發(fā) ReadNbyte(AT_addr,datam,4);//讀EEPROM內(nèi)容, //顯示EEPROM讀出值 for(i=0;i<4;i++) { dspbuf[2*i]=datam[i]&0x0f;//顯示數(shù)字小于16,個(gè)位數(shù) dspbuf[2*i+1]=datam[i]>>4&0x0f;//顯示數(shù)字小于16,十位數(shù) } //虛擬串口同步顯示EEPROM數(shù)據(jù) USB_SendData(datam,4); } if(bUsbOutReady){usb_OUT_done();//接收應(yīng)答(固定格式)} }}7.2.1.GPIO模擬I2C總線的驅(qū)動(dòng)函數(shù)任務(wù)23開發(fā)過(guò)程見二維碼7.3-1。二維碼7.3-1STC單片機(jī)I2C功能模塊應(yīng)用程序結(jié)論:在上面的程序中,由于單片機(jī)內(nèi)部集成了一個(gè)I2C串行總線控制器,I2C總線的起始信號(hào)、停止信號(hào)、讀寫信號(hào)都是通過(guò)配置I2C串行總線控制器的寄存器實(shí)現(xiàn),相比7.2節(jié)的開發(fā),省去了編寫I2C總線底層驅(qū)動(dòng)函數(shù),本程序相對(duì)簡(jiǎn)單明了。謝謝&提問(wèn)網(wǎng)絡(luò)空間安全學(xué)院網(wǎng)絡(luò)安全基礎(chǔ)技術(shù)應(yīng)用第八章SPI總線開發(fā)目錄CONTENT8.1.SPI總線的基本概念8.2.GPIO模擬SPI總線的開發(fā)技術(shù)8.3.STC單片機(jī)SPI功能模塊開發(fā)技術(shù)8.1.SPI總線的基本概念SPI接口是SerialPeripheralInterface的縮寫,顧名思義就是串行外圍設(shè)備接口。SPI接口是Motorola公司首先提出的全雙工同步串行接口通信協(xié)議,采用主從模式架構(gòu),支持多從設(shè)備應(yīng)用,一般只支持單主設(shè)備。SPI總線一般有4根信號(hào)線:MOSI,MISO,SCK,SS。在使用的時(shí)候,時(shí)鐘由主設(shè)備控制,數(shù)據(jù)在時(shí)鐘脈沖下按位傳輸,高位在前低位在后,SPI接口有2根單向數(shù)據(jù)線,可以實(shí)現(xiàn)全雙工通信,數(shù)據(jù)速率可達(dá)幾Mbps。8.1.1.SPI總線結(jié)構(gòu)SPI的四根總線分別是串行數(shù)據(jù)輸出線、輸入線、時(shí)鐘線、設(shè)備選擇線。MOSI:MasterOutputSlaveInput主器件數(shù)據(jù)輸出,從器件數(shù)據(jù)輸入。MISO:MasterInputSlaveOutput主器件數(shù)據(jù)輸入,從器件數(shù)據(jù)輸出。SCK:時(shí)鐘信號(hào),由主設(shè)備控制發(fā)出。/SS:從設(shè)備選擇信號(hào),由主設(shè)備控制。有些器件也用“CS”表示。8.1.1.SPI總線結(jié)構(gòu)圖8.1-1展示了主機(jī)和從機(jī)之間的連接關(guān)系。主機(jī)(也稱主設(shè)備)和從機(jī)(也稱從設(shè)備)的MOSI、MISO、SCK管腳互相連接,主設(shè)備的SS接VCC,從設(shè)備的SS接地。因?yàn)橹挥幸粋€(gè)從設(shè)備,所以從設(shè)備的SS接地,意味著從設(shè)備始終都處于通信狀態(tài)。因此在只有一個(gè)從設(shè)備的情況下會(huì)省略SS,SPI總線變成三線制。SCK是時(shí)鐘脈沖,由主機(jī)控制,沿著SCK的上升沿或者下降沿,MOSI、MISO的數(shù)據(jù)串行輸出,實(shí)現(xiàn)數(shù)據(jù)交換。

圖8.1-1主機(jī)和從機(jī)的電路連接8.1.2.SPI總線的傳輸模式根據(jù)時(shí)鐘極性(CPOL)及相位(CPHA)不同可以組合成4種工作模式:SPI0,SPI1,SP2,SP3。其中使用的最為廣泛的是SPI0和SPI3方式。(1)SPI0:CPOL=0,CPHA=0(2)SPI1:CPOL=0,CPHA=1(3)SPI2:CPOL=1,CPHA=0(4)SPI3:CPOL=1,CPHA=1時(shí)鐘極性(CPOL)定義了時(shí)鐘空閑狀態(tài)電平:CPOL=0:時(shí)鐘空閑狀態(tài)為低電平。CPOL=1:時(shí)鐘空閑狀態(tài)為高電平。時(shí)鐘相位(CPHA)定義數(shù)據(jù)的采樣時(shí)間:CPHA=0:在時(shí)鐘的第一個(gè)跳變沿(上升沿或下降沿)進(jìn)行數(shù)據(jù)采樣。CPHA=1:在時(shí)鐘的第二個(gè)跳變沿(上升沿或下降沿)進(jìn)行數(shù)據(jù)采樣。8.1.2.SPI總線的傳輸模式SPI接口有四種不同的數(shù)據(jù)傳輸時(shí)序,取決于CPOL和CPHA這兩位的組合。圖8.1-2中表現(xiàn)了這四種時(shí)序,從圖中也可以看出CPHA=0與CHPA=1,采樣和輸出先后順序正好相反。。圖8.1-2SPI總線的工作模式8.2.GPIO模擬SPI總線的開發(fā)技術(shù)SPI總線把接收和發(fā)送分成了兩根線,通信速度快,和I2C總線一樣,通常用于芯片間通信。很多芯片都具有SPI接口,當(dāng)MCU沒(méi)有SPI功能模塊時(shí),利用通用輸入輸出管腳模擬SPI總線協(xié)議。8.2.1.GPIO模擬SPI總線的驅(qū)動(dòng)函數(shù)對(duì)照?qǐng)D8.1-2時(shí)序圖,書寫SPI總線單字節(jié)讀寫函數(shù),讀寫的時(shí)候低位在前,高位在后。以SPI0工作模式為例,SCK默認(rèn)狀態(tài)是低電平,在上升沿采樣,在下降沿輸出,SPI是全雙工通信,所以發(fā)送和接收是同時(shí)進(jìn)行的。(1)SPI0模式下主機(jī)的讀寫函數(shù):主機(jī)在MOSI總線上寫數(shù)據(jù),在MISO總線上讀數(shù)據(jù)。unsignedcharSPIMaster_RWByte(unsignedchardata){unsignedchari;for(i=0;i<8;i++){sck=0;MOSI=data&0x01;//數(shù)據(jù)的低位輸出到MOSIdata>>=1;//數(shù)據(jù)右移,高位移到低位8.2.1.GPIO模擬SPI總線的驅(qū)動(dòng)函數(shù)sck=1;//拉高SCKdata|=(MISO<<8);//讀MISO到data最高位,補(bǔ)充data低位空缺。sck=0;}return(data);//返回讀出的字節(jié)數(shù)據(jù)}(2)SPI0模式下從機(jī)的讀寫函數(shù):從機(jī)在MOSI總線讀數(shù)據(jù),在MISO總線寫數(shù)據(jù)unsignedcharSPISlave_RWByte(unsignedchardata){unsignedchari;for(i=0;i<8;i++){8.2.1.GPIO模擬SPI總線的驅(qū)動(dòng)函數(shù)if(sck==0){ MISO=data&0x01;//從機(jī)數(shù)據(jù)的低位輸出到MISO}while(sck==0);data<<=1;If(sck==1){data|=(MOSI<<8);//從機(jī)讀MOSI到data最高位,補(bǔ)充data高位空缺。while(sck==1);}}return(data);}8.2.2.GPIO模擬SPI總線訪問(wèn)DS1302日歷芯片DS1302是DALLAS公司推出的日歷芯片,內(nèi)含有一個(gè)實(shí)時(shí)時(shí)鐘/日歷和31字節(jié)靜態(tài)RAM,利用簡(jiǎn)化的SPI總線與單片機(jī)通信。DS1302提供秒、分、時(shí)、日、周、月、年的信息,每月的天數(shù)和閏年自動(dòng)調(diào)整,時(shí)鐘可以選擇12小時(shí)制或24小時(shí)制。DS302有12個(gè)寄存器,其中有7個(gè)寄存器與日期和時(shí)間相關(guān),其余都是控制寄存器。要使用DS1302,首先將日期和時(shí)間等初始化數(shù)據(jù)寫入DS1302的寄存器,設(shè)置時(shí)間格式,然后開啟DS1302計(jì)時(shí)。當(dāng)DS1302初始化設(shè)置完并開啟計(jì)時(shí)后,單片機(jī)只要讀出DS1302里的日期或時(shí)間即可。圖8.2-1是DS1302的DIP封裝圖和管腳說(shuō)明,圖8.2-2是芯片工作電路圖,圖8.2-3是DS1302應(yīng)用電路。圖8.2-1中的I/O數(shù)據(jù)線是雙線數(shù)據(jù)線,它將SPI總線的MOSI和MISO兩根線合并成一根線,收發(fā)不能同時(shí)進(jìn)行,是半雙工通信。8.2.2.GPIO模擬SPI總線訪問(wèn)DS1302日歷芯片圖8.2-1DS1302芯片管腳圖圖8.2-3DS1302應(yīng)用電路圖8.2-2芯片工作電路圖8.2.2.GPIO模擬SPI總線訪問(wèn)DS1302日歷芯片圖8.2-3中SPI的三根線分別和單片機(jī)P17、P23、P13連接。DS1302采用雙電源供電模式,可以由VCC電源供電(連接VCC2管腳),也可以由電池供電(連接VCC2管腳),在VCC主電源失效時(shí)由電池保持時(shí)間和日期數(shù)據(jù)。RST是芯片復(fù)位和片選管腳,低電平時(shí),芯片復(fù)位,讀寫無(wú)效;高電平時(shí),片選有效,開始數(shù)據(jù)傳輸。SCK管腳為芯片提供時(shí)鐘脈沖。I/O是數(shù)據(jù)輸入輸出管腳,用于傳輸及接收數(shù)據(jù)。芯片連接32.768KHz外部晶振。表8.2-1列出了DS1302的寄存器。ReadWritebit7bit6bit5bit4bit3bit2bit1bit0說(shuō)明81h80hCH10SecondsSeconds秒:00-59,CH=1:時(shí)鐘暫停83h82h

10MinutesMinutes分:00-5985h84h12/24010Hour時(shí):00-23/01-12AM/PM87h86h0010DateDate日:01-28/29/30/3189h88h00010MonthMonth月:01-128Bh8Ah00000Day星期:1-78Dh8Ch10YearYear年:00-998Fh8EhWP0000000控制寄存器,WP=1:寫保護(hù),不允許器件寫入91h90hTCSDSRS涓流充電選擇表8.2-1DS1302和日期時(shí)間有關(guān)的寄存器列表8.2.2.GPIO模擬SPI總線訪問(wèn)DS1302日歷芯片訪問(wèn)DS1302,首先要說(shuō)明訪問(wèn)的存儲(chǔ)單元地址,然后在總線上傳送數(shù)據(jù)。因此一個(gè)完整的讀或?qū)懼辽儆?個(gè)字節(jié)構(gòu)成。1.讀時(shí)序:圖8.2-4是讀時(shí)序,對(duì)應(yīng)SPI0工作模式,第1個(gè)字節(jié)寫地址,CPU控制I/O線;第2個(gè)字節(jié)讀數(shù)據(jù),由DS1302發(fā)送數(shù)據(jù)到I/O線。圖8.2-4單個(gè)字節(jié)讀時(shí)序8.2.2.GPIO模擬SPI總線訪問(wèn)DS1302日歷芯片2.寫時(shí)序:圖8.2-5是寫時(shí)序,對(duì)應(yīng)SPI0工作模式,2個(gè)字節(jié)都是CPU控制I/O線。圖8.2-5單個(gè)字節(jié)寫時(shí)序8.2.2.GPIO模擬SPI總線訪問(wèn)DS1302日歷芯片2.寫時(shí)序:圖8.2-5是寫時(shí)序,對(duì)應(yīng)SPI0工作模式,2個(gè)字節(jié)都是CPU控制I/O線。圖8.2-5單個(gè)字節(jié)寫時(shí)序8.2.2.GPIO模擬SPI總線訪問(wèn)DS1302日歷芯片DS1302的讀寫時(shí)序是三線半雙工通信,一個(gè)時(shí)鐘周期內(nèi)只有一個(gè)方向的數(shù)據(jù),主機(jī)單個(gè)字節(jié)的讀寫函數(shù)如下所示。/*****主機(jī)單個(gè)字節(jié)的寫過(guò)程*****/voidwrite_Ds1302_Byte(unsignedchardata){ unsignedchari; for(i=0;i<8;i++) { SCK=0; SDA=data&0x01;//數(shù)據(jù)低位輸出到IO總線上 data>>=1;//數(shù)據(jù)右移,高位移到低位 SCK=1;

8.2.2.GPIO模擬SPI總線訪問(wèn)DS1302日歷芯片 }}/*****主機(jī)單個(gè)字節(jié)的讀過(guò)程*****/unsignedcharread_Ds1302_Byte(){ unsignedchari,data; for(i=0;i<8;i++) { SCK=0; data>>=1; data|=(SDA)<<8; //讀SDA數(shù)據(jù)到data最高位 SCK=1; 8.2.2.GPIO模擬SPI總線訪問(wèn)DS1302日歷芯片 }return(data);}

/*****圖8.2-4時(shí)序DS1302完整的讀過(guò)程***/unsignedcharRead_Ds1302(unsignedcharaddress){ unsignedchari,temp=0x00; Write_Ds1302_Byte(address);//寫地址return(read_Ds1302_Byte());}/*****圖8.2-5時(shí)序DS1302完整的寫過(guò)程***/ 8.2.2.GPIO模擬SPI總線訪問(wèn)DS1302日歷芯片voidWrite_Ds1302(unsignedcharaddress,unsignedchardata){ Write_Ds1302_Byte(address); //寫地址 Write_Ds1302_Byte(data); //寫數(shù)據(jù)}基于GPIO模擬SPI總線,讓單片機(jī)與DS1302日歷芯片交換數(shù)據(jù),數(shù)碼管分兩屏顯示日期和時(shí)間,圖8.2-6是日歷顯示界面,二維碼8.2-1展示了開發(fā)示范過(guò)程。 圖8.2-6日歷顯示界面8.2.2.GPIO模擬SPI總線訪問(wèn)DS1302日歷芯片二維碼8.2-1GPIO模擬SPI總線讀日歷芯片的程序?qū)崿F(xiàn)8.3.STC單片機(jī)SPI功能模塊開發(fā)技術(shù)STC單片機(jī)從15系列開始就提供SPI總線功能,與SPI相關(guān)的寄存器有SPI狀態(tài)寄存器、SPI控制寄存器、SPI數(shù)據(jù)寄存器,通過(guò)這三個(gè)寄存器就可以完成SPI數(shù)據(jù)的傳輸。8.3.1.SPI管腳切換對(duì)于SPI總線端口分配,STC15x、STC8x、STC32x系列單片機(jī)提供了切換模式,可將SS、MOSI、MISO、SCLK切換到不同的I/O口上,以方便用戶將靈活應(yīng)用管腳。(1)P_SW:SPI功能腳切換寄存器名稱地址Bit7Bit6Bit5Bit4Bit3Bit2B

溫馨提示

  • 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)論