第四章C51程序設(shè)計(jì)2實(shí)例_第1頁
第四章C51程序設(shè)計(jì)2實(shí)例_第2頁
第四章C51程序設(shè)計(jì)2實(shí)例_第3頁
第四章C51程序設(shè)計(jì)2實(shí)例_第4頁
第四章C51程序設(shè)計(jì)2實(shí)例_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、整理ppt第四章第四章 C51C51程序設(shè)計(jì)程序設(shè)計(jì) -2-2實(shí)例實(shí)例開題報(bào)告第6,9,10,12還沒有發(fā)給齊老師,明天下午5:00之前必須交給齊老師。整理ppt1-wire總線及應(yīng)用總線及應(yīng)用 n一根數(shù)據(jù)線。設(shè)備(主機(jī)或從機(jī))通過一個(gè)漏極開路端口,一根數(shù)據(jù)線。設(shè)備(主機(jī)或從機(jī))通過一個(gè)漏極開路端口,連接至該數(shù)據(jù)線,這樣允許設(shè)備在不發(fā)送數(shù)據(jù)時(shí)釋放數(shù)據(jù)連接至該數(shù)據(jù)線,這樣允許設(shè)備在不發(fā)送數(shù)據(jù)時(shí)釋放數(shù)據(jù)總線,以便總線被其它設(shè)備所使用??偩€,以便總線被其它設(shè)備所使用。 1-wire1-wire總線端口為總線端口為漏極開路,單總線要求外接一個(gè)約漏極開路,單總線要求外接一個(gè)約5k 5k 的上拉電阻,這樣

2、的上拉電阻,這樣單總線的閑置狀態(tài)為高電平。單總線的閑置狀態(tài)為高電平。n主機(jī)對(duì)主機(jī)對(duì)1-Wire1-Wire總線的基本操作分為復(fù)位、讀和寫三種,其總線的基本操作分為復(fù)位、讀和寫三種,其中所有的讀寫操作均為低位在前,高位在后。中所有的讀寫操作均為低位在前,高位在后。 n典型的單總線命令序列典型的單總線命令序列第一步第一步 初始化;初始化;第二步第二步 ROM ROM 命令命令 跟隨需要交換的數(shù)據(jù);跟隨需要交換的數(shù)據(jù);第三步第三步 功能命令功能命令 跟隨需要交換的數(shù)據(jù);跟隨需要交換的數(shù)據(jù);整理ppt實(shí)例:實(shí)例:DS18B20單線溫度傳感器單線溫度傳感器n主要特征全數(shù)字溫度轉(zhuǎn)換及輸出。 1-wire總

3、線數(shù)據(jù)通信。 最高12位分辨率,精度可達(dá)土0.5攝氏度。 12位分辨率,最大工作周期為750毫秒。 檢測(cè)溫度范圍為-55+125。內(nèi)置EEPROM,限溫報(bào)警功能。 64位光刻ROM,內(nèi)置產(chǎn)品序列號(hào),方便多機(jī)掛接。 多樣封裝形式,適應(yīng)不同硬件系統(tǒng)。 整理pptn DS18B20工作原理n三種形態(tài)的存儲(chǔ)器資源ROM 只讀存儲(chǔ)器,用于存放DS18B20ID編碼。RAM 數(shù)據(jù)暫存器,用于內(nèi)部計(jì)算和數(shù)據(jù)存取,數(shù)據(jù)在掉電后丟失,DS18B20共9個(gè)字節(jié)RAM,每個(gè)字節(jié)為8位。EEPROM 非易失性記憶體,用于存放長(zhǎng)期需要保存的數(shù)據(jù),上下限溫度報(bào)警值和校驗(yàn)數(shù)據(jù)。nRAM及EEPROM結(jié)構(gòu)圖: 整理pptn控

4、制器對(duì)18b20操作流程復(fù)位:給DS18B20單總線至少480uS的低電平信號(hào)。存在脈沖:復(fù)位電平結(jié)束之后,控制器應(yīng)該將數(shù)據(jù)單總線拉高,以便于在1560uS后接收存在脈沖,存在脈沖為一個(gè)60240uS的低電平信號(hào)。控制器發(fā)送ROM指令:ROM指令共有5條,每一個(gè)工作周期只能發(fā)一條,ROM指令分別是讀ROM數(shù)據(jù)、指定匹配芯片、跳躍ROM、芯片搜索、報(bào)警芯片搜索。(一般只掛接單個(gè)18B20芯片時(shí)可以跳過ROM指令)控制器發(fā)送存儲(chǔ)器操作指令:分別是寫RAM數(shù)據(jù)、讀RAM數(shù)據(jù)、將RAM數(shù)據(jù)復(fù)制到EEPROM、溫度轉(zhuǎn)換、將EEPROM中的報(bào)警值復(fù)制到RAM、工作方式切換。執(zhí)行或數(shù)據(jù)讀寫:一個(gè)存儲(chǔ)器操作指

5、令結(jié)束后則將進(jìn)行指令執(zhí)行或數(shù)據(jù)的讀寫,這個(gè)操作要視存儲(chǔ)器操作指令而定。整理pptn幾種時(shí)間隙nDS18B20復(fù)位及應(yīng)答關(guān)系n寫時(shí)間隙整理pptn讀時(shí)間隙注意:必須在讀間隙開始的15uS內(nèi)讀取數(shù)據(jù)位才可以保證通信的正確。 nDS18B20與單片機(jī)接法整理pptn 示例程序:void Init_DS18B20(void)/18b20初始化初始化 DQ = 1;/DQ復(fù)位復(fù)位_nop_();_nop_();_nop_(); DQ = 0; /拉低拉低DQ delay(200);/約約600usDQ = 1; /拉高總線拉高總線 delay(20); / 75us,30:100us 整理pptucha

6、r Read_byte(void) /讀一字節(jié)讀一字節(jié) uchar i=0; uchar dat = 0; for (i=8;i0;i-) DQ = 1;_nop_();_nop_();_nop_();_nop_();DQ = 0; /從高拉到低,產(chǎn)生讀時(shí)間隙從高拉到低,產(chǎn)生讀時(shí)間隙_nop_();_nop_();/至少保持低電平至少保持低電平1us_nop_();_nop_();_nop_();_nop_();dat=1; /右移一位右移一位DQ = 1; /15us內(nèi)停止將內(nèi)停止將DQ拉低拉低,15us內(nèi)數(shù)據(jù)有效內(nèi)數(shù)據(jù)有效_nop_();_nop_();/稍作延時(shí)稍作延時(shí)_nop_();_

7、nop_();if(DQ) /若高電平若高電平 置置1dat|=0 x80; delay(30); /至少保持至少保持60us,100us,確保讀數(shù)據(jù)成功確保讀數(shù)據(jù)成功 DQ = 1;/結(jié)束拉高結(jié)束拉高 return(dat); 整理pptvoid Write_byte(uchar dat) /寫一個(gè)字節(jié)寫一個(gè)字節(jié) uchar i=0; for (i=8; i0; i-) DQ = 1;_nop_();_nop_();/稍作延時(shí)稍作延時(shí) _nop_();_nop_();_nop_();_nop_();DQ = 0;/拉低拉低DQ開始寫開始寫 _nop_();_nop_();_nop_();_n

8、op_();/15us內(nèi)釋放總線內(nèi)釋放總線 _nop_();_nop_();_nop_();_nop_();DQ = dat&0 x01; /從從lsb開始開始 delay(20); /75us 至少需保持至少需保持60us寫時(shí)間隙寫時(shí)間隙dat=1; /右移一位右移一位DQ = 1;/結(jié)束拉高結(jié)束拉高delay(4); 整理pptuint Get_Temperature(void) /讀溫度函數(shù)讀溫度函數(shù) uchar a=0; uchar b=0; uint t=0; Init_DS18B20(); Write_byte(0 xCC); /只接一個(gè)只接一個(gè)18b20芯片,芯片,ski

9、p ROM Write_byte(0 x44); /溫度轉(zhuǎn)換溫度轉(zhuǎn)換 delay(200); /延時(shí)延時(shí)600us 等待轉(zhuǎn)換完成等待轉(zhuǎn)換完成,一般轉(zhuǎn)換時(shí)間為一般轉(zhuǎn)換時(shí)間為500us Init_DS18B20(); Write_byte(0 xCC); /skip ROM Write_byte(0 xBE); /從從RAM讀數(shù)據(jù)讀數(shù)據(jù) a=Read_byte(); /先讀低位先讀低位 b=Read_byte(); /再讀高位再讀高位 t=b8; t=t|a; /t為最后讀得的數(shù)據(jù)為最后讀得的數(shù)據(jù) return (t); 整理pptn雙向二線制串行通信總線,時(shí)鐘線雙向二線制串行通信總線,時(shí)鐘線SC

10、L, 數(shù)據(jù)線數(shù)據(jù)線SDA。nNXP 半導(dǎo)體(原半導(dǎo)體(原Philips 半導(dǎo)體)于半導(dǎo)體)于20 多年前發(fā)明。多年前發(fā)明。nI2C總線是同步串行數(shù)據(jù)傳輸總線總線是同步串行數(shù)據(jù)傳輸總線。n經(jīng)常使用的帶經(jīng)常使用的帶I2C總線通用外圍器件有:總線通用外圍器件有:SRAM、E2PROM、ADC/DAC、RTC、I/O口等??诘取帶帶I2C總線的外圍設(shè)備模塊有由總線的外圍設(shè)備模塊有由LED驅(qū)動(dòng)控制器構(gòu)成的驅(qū)動(dòng)控制器構(gòu)成的LED顯示器,由各種顯示器,由各種LCD驅(qū)動(dòng)控制器構(gòu)成的段式、字符驅(qū)動(dòng)控制器構(gòu)成的段式、字符點(diǎn)陣、圖形點(diǎn)陣液晶顯示器等。點(diǎn)陣、圖形點(diǎn)陣液晶顯示器等。I2C總線及應(yīng)用總線及應(yīng)用整理ppt

11、nI2C 總線的信號(hào)線總線的信號(hào)線I2C 總線只需要由兩根信號(hào)線組成,一根是串行數(shù)據(jù)線總線只需要由兩根信號(hào)線組成,一根是串行數(shù)據(jù)線SDA,另一根是串行時(shí)鐘線,另一根是串行時(shí)鐘線SCL,均為為開漏結(jié)構(gòu),故總,均為為開漏結(jié)構(gòu),故總線上必須有上拉電阻線上必須有上拉電阻Rp,通??蛇x,通常可選510k。整理pptnI2C總線時(shí)序定義:總線時(shí)序定義: 起始條件和停止條件(起始條件和停止條件(START and STOP conditions)n起始條件:當(dāng)起始條件:當(dāng)SCL 處于高電平期間時(shí),處于高電平期間時(shí),SDA 從高電平向低電平從高電平向低電平跳變時(shí)產(chǎn)生起始條件??偩€在起始條件產(chǎn)生后便處于忙的狀態(tài)

12、。跳變時(shí)產(chǎn)生起始條件??偩€在起始條件產(chǎn)生后便處于忙的狀態(tài)。起始條件常常簡(jiǎn)記為起始條件常常簡(jiǎn)記為S。n停止條件:當(dāng)停止條件:當(dāng)SCL 處于高電平期間時(shí),處于高電平期間時(shí),SDA 從低電平向高電平從低電平向高電平跳變時(shí)產(chǎn)生停止條件??偩€在停止條件產(chǎn)生后處于空閑狀態(tài)。停跳變時(shí)產(chǎn)生停止條件??偩€在停止條件產(chǎn)生后處于空閑狀態(tài)。停止條件簡(jiǎn)記為止條件簡(jiǎn)記為P。整理pptnI2C 總線上數(shù)據(jù)的有效性(總線上數(shù)據(jù)的有效性(Data validity)數(shù)據(jù)線數(shù)據(jù)線SDA 的電平狀態(tài)必須在時(shí)鐘線的電平狀態(tài)必須在時(shí)鐘線SCL 處于高電平期處于高電平期間保持穩(wěn)定不變。間保持穩(wěn)定不變。SDA 的電平狀態(tài)只有在的電平狀態(tài)只

13、有在SCL 處于低電處于低電平期間才允許改變。但是在平期間才允許改變。但是在I2C 總線的起始和結(jié)束時(shí)例外??偩€的起始和結(jié)束時(shí)例外。整理pptn從機(jī)地址(從機(jī)地址(Slave Address)I2C 總線不需要地址譯碼器和片選信號(hào)。多個(gè)具有總線不需要地址譯碼器和片選信號(hào)。多個(gè)具有I2C 總線接口的器件都總線接口的器件都可以連接到同一條可以連接到同一條I2C 總線上,它們之間通過器件地址來區(qū)分??偩€上,它們之間通過器件地址來區(qū)分。主機(jī)是主控器件,它不需要器件地址,其它器件都屬于從機(jī),要有器件主機(jī)是主控器件,它不需要器件地址,其它器件都屬于從機(jī),要有器件地址。必須保證同一條地址。必須保證同一條I2

14、C 總線上所有從機(jī)的地址都是唯一??偩€上所有從機(jī)的地址都是唯一。一般從機(jī)地址由一般從機(jī)地址由7 位地址位和一位讀寫標(biāo)志位地址位和一位讀寫標(biāo)志R/W 組成,組成,7 位地址占據(jù)高位地址占據(jù)高7 位,讀寫位在最后。讀寫位是位,讀寫位在最后。讀寫位是0,表示主機(jī)將要向從機(jī)寫入數(shù)據(jù);讀寫位,表示主機(jī)將要向從機(jī)寫入數(shù)據(jù);讀寫位是是1,則表示主機(jī)將要從從機(jī)讀取數(shù)據(jù)。,則表示主機(jī)將要從從機(jī)讀取數(shù)據(jù)。從機(jī)地址由一個(gè)固定和一個(gè)可編程的部分構(gòu)成。從機(jī)地址的可編程部分從機(jī)地址由一個(gè)固定和一個(gè)可編程的部分構(gòu)成。從機(jī)地址的可編程部分使最大數(shù)量的相同器件可以連接到使最大數(shù)量的相同器件可以連接到I2C 總線上,器件可編程地

15、址位的數(shù)總線上,器件可編程地址位的數(shù)量由管腳決定,如果器件量由管腳決定,如果器件3 個(gè)可編程的地址管腳,那么個(gè)可編程的地址管腳,那么I2CI2C總線上共可以總線上共可以連接連接8 個(gè)相同的器件。個(gè)相同的器件。整理pptnI2C數(shù)據(jù)傳輸?shù)姆绞綌?shù)據(jù)傳輸?shù)姆绞揭宰止?jié)(以字節(jié)(Byte)為單位收發(fā)數(shù)據(jù)。首先傳輸?shù)氖菙?shù)據(jù)的最高位)為單位收發(fā)數(shù)據(jù)。首先傳輸?shù)氖菙?shù)據(jù)的最高位(MSB,第,第7 位),最后傳輸?shù)氖亲畹臀唬ㄎ唬詈髠鬏數(shù)氖亲畹臀唬↙SB,第,第0 位)。另位)。另外,每個(gè)字節(jié)之后還要跟一個(gè)響應(yīng)位,稱為應(yīng)答。外,每個(gè)字節(jié)之后還要跟一個(gè)響應(yīng)位,稱為應(yīng)答。n應(yīng)答(應(yīng)答(Acknowledge)每傳輸

16、一個(gè)字節(jié),要跟一個(gè)應(yīng)答狀態(tài)位。接收器接收數(shù)據(jù)的情況每傳輸一個(gè)字節(jié),要跟一個(gè)應(yīng)答狀態(tài)位。接收器接收數(shù)據(jù)的情況可通過應(yīng)答位來告知發(fā)送器。應(yīng)答位的時(shí)鐘脈沖由主機(jī)產(chǎn)生,而可通過應(yīng)答位來告知發(fā)送器。應(yīng)答位的時(shí)鐘脈沖由主機(jī)產(chǎn)生,而應(yīng)答位的數(shù)據(jù)狀態(tài)則遵循應(yīng)答位的數(shù)據(jù)狀態(tài)則遵循“誰接收誰產(chǎn)生誰接收誰產(chǎn)生”的原則,即總是由接的原則,即總是由接收器產(chǎn)生應(yīng)答位。主機(jī)向從機(jī)發(fā)送數(shù)據(jù)時(shí),應(yīng)答位由從機(jī)產(chǎn)生;收器產(chǎn)生應(yīng)答位。主機(jī)向從機(jī)發(fā)送數(shù)據(jù)時(shí),應(yīng)答位由從機(jī)產(chǎn)生;主機(jī)從從機(jī)接收數(shù)據(jù)時(shí),應(yīng)答位由主機(jī)產(chǎn)生。主機(jī)從從機(jī)接收數(shù)據(jù)時(shí),應(yīng)答位由主機(jī)產(chǎn)生。I2C總線上第總線上第9個(gè)脈沖對(duì)應(yīng)應(yīng)答位,個(gè)脈沖對(duì)應(yīng)應(yīng)答位,SDA為為0 表示接收

17、器應(yīng)答表示接收器應(yīng)答(ACK),),A;為;為1 則表示非應(yīng)答(則表示非應(yīng)答(NACK),),/A。整理pptn基本的數(shù)據(jù)傳輸格式基本的數(shù)據(jù)傳輸格式主機(jī)向從機(jī)發(fā)送數(shù)據(jù)的基本格式主機(jī)向從機(jī)發(fā)送數(shù)據(jù)的基本格式主機(jī)從從機(jī)接收數(shù)據(jù)的基本格式主機(jī)從從機(jī)接收數(shù)據(jù)的基本格式注意:主機(jī)向從機(jī)發(fā)送最后一個(gè)字節(jié)的數(shù)據(jù)時(shí),從機(jī)可能應(yīng)答也注意:主機(jī)向從機(jī)發(fā)送最后一個(gè)字節(jié)的數(shù)據(jù)時(shí),從機(jī)可能應(yīng)答也可能非應(yīng)答,但不管怎樣主機(jī)都可以產(chǎn)生停止條件。如果主機(jī)在可能非應(yīng)答,但不管怎樣主機(jī)都可以產(chǎn)生停止條件。如果主機(jī)在向從機(jī)發(fā)送數(shù)據(jù)(甚至包括從機(jī)地址在內(nèi))時(shí)檢測(cè)到從機(jī)非應(yīng)答,向從機(jī)發(fā)送數(shù)據(jù)(甚至包括從機(jī)地址在內(nèi))時(shí)檢測(cè)到從機(jī)非應(yīng)答,

18、則應(yīng)當(dāng)及時(shí)停止傳輸。則應(yīng)當(dāng)及時(shí)停止傳輸。整理pptn數(shù)據(jù)傳輸時(shí)序圖數(shù)據(jù)傳輸時(shí)序圖主機(jī)向從機(jī)寫數(shù)據(jù)主機(jī)向從機(jī)寫數(shù)據(jù) (24LC01)整理ppt主機(jī)讀從機(jī)數(shù)據(jù)(主機(jī)讀從機(jī)數(shù)據(jù)(24LC01)整理pptEEPROM 24LC01Bn主要特征低至2.5V的單電源供電;低功耗的CMOS技術(shù);128 bytes(1288)的存儲(chǔ)塊;標(biāo)準(zhǔn)2線串行接口總線 ,I2C總線;兼容100 kHz (2.5V) 、 400kHz (5.0V);高達(dá)8 bytes的頁寫入緩存;2 ms頁寫入時(shí)間周期;硬件寫保護(hù)。整理pptn硬件電路整理pptI2C通過通過IO口模擬口模擬void Start(void) /起始信號(hào)起始

19、信號(hào)Sda=1;Scl=1;delay1us();Sda=0;delay1us();void Stop(void) /停止停止Sda=0;Scl=1;delay1us();Sda=1;delay1us();整理pptvoid Ack(void) /應(yīng)答應(yīng)答Sda=0;delay1us();Scl=1;delay1us();Scl=0;void NoAck(void) /不應(yīng)答不應(yīng)答Sda=1;delay1us();Scl=1;delay1us();Scl=0;整理pptvoid Send(unsigned char Data) /發(fā)送字節(jié)發(fā)送字節(jié)unsigned char xdata BitC

20、ounter=8; unsigned char xdata temp; dotemp=Data;Scl=0;delay1us();if(temp&0 x80)=0 x80)Sda=1;elseSda=0;delay1us();Scl=1;delay1us();temp=Data1; /左移左移1位位Data=temp;BitCounter- -;while(BitCounter);Scl=0;整理pptunsigned char Read(void) /讀取字節(jié)讀取字節(jié)unsigned char xdata temp=0;unsigned char xdata temp1=0;unsi

21、gned char xdata BitCounter=8;Sda=1;doScl=0;delay1us();Scl=1;delay1us();if(Sda) temp=temp|0 x01; elsetemp=temp&0 xfe; if(BitCounter-1) temp1=temp8) & 0 xff;/先寫高先寫高8位位Send(Temp_Data);Ack();Stop();delay1ms(5);Start(); Send(0 xa0); Ack();Send(Address+1); Ack();Temp_Data=Data_Write & 0 xff;/低

22、低8位位Send(Temp_Data);Ack();Stop();delay1ms(5);整理pptunsigned int RdFromROM(unsigned char Address)/讀取數(shù)據(jù)讀取數(shù)據(jù)unsigned int xdata Temp_Data;Start();Send(0 xa0);Ack();Send(Address);Ack();Start();Send(0 xa1);Ack();Temp_Data=(Read()*256;/高高8位位NoAck();Stop();delay1ms(5);Start();Send(0 xa0);Ack();Send(Address+1

23、);Ack();Start();Send(0 xa1);Ack();Temp_Data += Read();/低低8位位NoAck();Stop();delay1ms(5);return Temp_Data;整理ppt通過單片機(jī)自帶通過單片機(jī)自帶I2C接口接口P89C669自帶I2C功能實(shí)現(xiàn)對(duì)EEPROM單字節(jié)的讀取與寫入,寫入單個(gè)字節(jié)和讀取只要分別調(diào)用bit ISendbyte_1(uchar sla,uchar suba,uchar c)和bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)即可,參考資料:P89C669 I2C軟件包。/*

24、申請(qǐng)總線申請(qǐng)總線功能:進(jìn)行功能:進(jìn)行I2C 總線的初始化包括時(shí)鐘速率總線的初始化包括時(shí)鐘速率I2C 使能發(fā)送起始信號(hào)等使能發(fā)送起始信號(hào)等 */void GetBus()I2CON=0 xc4;/use internal SCL generatorI2CLL=50;/bits data rate=fosc/(I2CLL+I2CLH)I2CLH=50;I2CON=I2CON|0 x20; /*STA=1,申請(qǐng)成為主機(jī)起動(dòng)總線申請(qǐng)成為主機(jī)起動(dòng)總線 */ while(SI=0);/*發(fā)送數(shù)據(jù)函數(shù)發(fā)送數(shù)據(jù)函數(shù) 功能:用于向總線發(fā)送數(shù)據(jù)功能:用于向總線發(fā)送數(shù)據(jù) */void SendByte(uchar

25、c)I2DAT=c;I2CON=0XC4; /*清除清除SI 位等等位等等 */while(SI=0);整理ppt/*向有子地址器件發(fā)送一個(gè)字節(jié)數(shù)據(jù)函數(shù)向有子地址器件發(fā)送一個(gè)字節(jié)數(shù)據(jù)函數(shù) */bit ISendbyte_1(uchar sla,uchar suba,uchar c)GetBus(); /*啟動(dòng)總線啟動(dòng)總線 */SendByte(sla); /*發(fā)送器件地址發(fā)送器件地址 */if(I2STAT!=0X18)I2CON=0XD4;return(0);SendByte(suba); /*發(fā)送器件子地址發(fā)送器件子地址 */if(I2STAT!=0X28)I2CON=0XD4;retur

26、n(0);SendByte(c); /*發(fā)送數(shù)據(jù)發(fā)送數(shù)據(jù) */if(I2STAT!=0X28)I2CON=0XD4;return(0);I2CON=0XD4; /*結(jié)束總線結(jié)束總線 */return(1);整理ppt/*向有子地址器件讀取多字節(jié)數(shù)據(jù)函數(shù)向有子地址器件讀取多字節(jié)數(shù)據(jù)函數(shù) 函數(shù)原型函數(shù)原型: bit ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);功能功能: 從啟動(dòng)總線到發(fā)送地址子地址從啟動(dòng)總線到發(fā)送地址子地址,讀數(shù)據(jù)結(jié)束總線的全過程讀數(shù)據(jù)結(jié)束總線的全過程,從器件從器件 地址地址sla 子地址子地址suba 讀出的內(nèi)容放入讀出的內(nèi)容

27、放入s 指向的存儲(chǔ)區(qū)讀指向的存儲(chǔ)區(qū)讀no 個(gè)字節(jié)個(gè)字節(jié) 如果返回如果返回1 表示操作成功否則操作有誤表示操作成功否則操作有誤 */bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)uchar i;GetBus(); /*啟動(dòng)總線啟動(dòng)總線 */SendByte(sla); /*發(fā)送器件地址發(fā)送器件地址 */if(I2STAT!=0X18)I2CON=0XD4;return(0);SendByte(suba); /*發(fā)送器件子地址發(fā)送器件子地址 */if(I2STAT!=0X28)I2CON=0XD4;return(0);I2CON=0XE4;

28、/*重新啟動(dòng)總線重新啟動(dòng)總線 */while(SI=0);SendByte(sla+1);if(I2STAT!=0X40)I2CON=0XD4;return(0);整理pptfor(i=0;ino-1;i+)I2CON=0XC4; /*接收一字節(jié)數(shù)據(jù)并發(fā)送應(yīng)答位*/while(SI=0);if(I2STAT!=0X50)I2CON=0XD4;return(0);*s=I2DAT; /*讀取數(shù)據(jù) */s+;I2CON=0XC0; /*接收最后一字節(jié)數(shù)據(jù)并發(fā)送非應(yīng)答位*/while(SI=0);*s=I2DAT;I2CON=0XD4; /*結(jié)束總線 */return(1);整理pptRS232C/

29、RS485n電子工業(yè)協(xié)會(huì)(電子工業(yè)協(xié)會(huì)(EIA)公布的)公布的RS-232C是用得最多的一種是用得最多的一種串行通信標(biāo)準(zhǔn),它是從遠(yuǎn)程通信標(biāo)準(zhǔn)中導(dǎo)出來的,是使用串行通信標(biāo)準(zhǔn),它是從遠(yuǎn)程通信標(biāo)準(zhǔn)中導(dǎo)出來的,是使用于數(shù)據(jù)終端設(shè)備(于數(shù)據(jù)終端設(shè)備(DTE)和數(shù)據(jù)通信設(shè)備()和數(shù)據(jù)通信設(shè)備(DCE)之間的)之間的接口。該標(biāo)準(zhǔn)除包括物理指標(biāo)外,還包括表明按位串行傳接口。該標(biāo)準(zhǔn)除包括物理指標(biāo)外,還包括表明按位串行傳送時(shí)的電氣指標(biāo)。送時(shí)的電氣指標(biāo)。整理pptRS-232CRS-232C電氣特性電氣特性在電氣性能方面,在電氣性能方面,RS-232C使用負(fù)邏輯。邏輯使用負(fù)邏輯。邏輯“1”電平是在電平是在 -5V-

30、15V范圍內(nèi),邏輯范圍內(nèi),邏輯“0”電平是在電平是在+5V+15V范圍內(nèi)。范圍內(nèi)。標(biāo)準(zhǔn)要求標(biāo)準(zhǔn)要求RS-232C接收器必須能夠識(shí)別接收器必須能夠識(shí)別+3V以上以上的信號(hào)作為邏的信號(hào)作為邏輯輯“0”,-3V以下以下的信號(hào)作為邏輯的信號(hào)作為邏輯“1”,即有,即有2V的噪聲容限。的噪聲容限。RS-232C的主要電氣特性見下表。的主要電氣特性見下表。最大電纜長(zhǎng)度最大電纜長(zhǎng)度15m 最大數(shù)據(jù)傳輸率最大數(shù)據(jù)傳輸率20KB/s 驅(qū)動(dòng)器輸出電壓(開路)驅(qū)動(dòng)器輸出電壓(開路) 25V(最大)(最大) 驅(qū)動(dòng)器輸出電壓(滿載)驅(qū)動(dòng)器輸出電壓(滿載) 525(最大最大 驅(qū)動(dòng)器輸出電阻驅(qū)動(dòng)器輸出電阻300(最?。ㄗ钚?/p>

31、) 驅(qū)動(dòng)器輸出短路電流驅(qū)動(dòng)器輸出短路電流 500mA 接收器輸入電阻接收器輸入電阻37k 接收器輸入門限電壓值接收器輸入門限電壓值-3+3V(最大)(最大) 接收器輸入電壓接收器輸入電壓-25+25V(最大)(最大) 整理pptnRS-232CRS-232C數(shù)據(jù)傳送格式數(shù)據(jù)傳送格式 RS-232C的數(shù)據(jù)傳送格式的數(shù)據(jù)傳送格式是位串行方式,傳輸數(shù)據(jù)的格式如下是位串行方式,傳輸數(shù)據(jù)的格式如下圖所示,這是微處理機(jī)應(yīng)用系統(tǒng)中最通用的格式。數(shù)據(jù)的連續(xù)傳圖所示,這是微處理機(jī)應(yīng)用系統(tǒng)中最通用的格式。數(shù)據(jù)的連續(xù)傳送由最低有效數(shù)字位開始,以奇偶校驗(yàn)位作結(jié)束。送由最低有效數(shù)字位開始,以奇偶校驗(yàn)位作結(jié)束。nRS-4

32、85RS-485標(biāo)準(zhǔn)標(biāo)準(zhǔn) :由由RS-232C的電氣特性表可知,若不采用調(diào)制解調(diào)器,其傳輸?shù)碾姎馓匦员砜芍?,若不采用調(diào)制解調(diào)器,其傳輸距離很短,且最大數(shù)據(jù)傳輸率也受到限制。距離很短,且最大數(shù)據(jù)傳輸率也受到限制。因此,因此,EIA又公布了能夠適合于遠(yuǎn)距離傳輸?shù)挠止剂四軌蜻m合于遠(yuǎn)距離傳輸?shù)腞S-485標(biāo)準(zhǔn)。標(biāo)準(zhǔn)。 RS485用差分接收器接收信號(hào)電壓,用差分接收器接收信號(hào)電壓,差分信號(hào)的抗噪聲能力強(qiáng)差分信號(hào)的抗噪聲能力強(qiáng)。 整理ppt特特 性性RS-422、RS-485最大電纜長(zhǎng)度最大電纜長(zhǎng)度1200m 最大數(shù)據(jù)傳輸率最大數(shù)據(jù)傳輸率10MB/s 驅(qū)動(dòng)器輸出電壓(開路)驅(qū)動(dòng)器輸出電壓(開路)6V(最

33、大)輸出端之間(最大)輸出端之間 驅(qū)動(dòng)器輸出電壓(滿載)驅(qū)動(dòng)器輸出電壓(滿載)2V(最?。┹敵龆酥g(最?。┹敵龆酥g 驅(qū)動(dòng)器輸出短路電流驅(qū)動(dòng)器輸出短路電流 150mA(最大)(最大) 接收器輸入電阻接收器輸入電阻大于等于大于等于4k 接收器輸入門限電壓值接收器輸入門限電壓值-0.2+0.2V(最大最大) 接收器輸入電壓接收器輸入電壓-12V+12V(最大)(最大) 當(dāng)采用當(dāng)采用+5V電源供電時(shí),電源供電時(shí),RS-485信號(hào)定義如下:信號(hào)定義如下:若差分電壓信號(hào)為若差分電壓信號(hào)為2500200mV時(shí),為邏輯時(shí),為邏輯“0”;若差分電壓信號(hào)為若差分電壓信號(hào)為2500200mV時(shí),為邏輯時(shí),為邏輯

34、“1”;整理pptnMAX485主要特征:n采用單一電源采用單一電源+5 V+5 V工作,額定電流為工作,額定電流為300 A300 A,采用半雙工通訊方式。,采用半雙工通訊方式。完成將完成將TTLTTL電平轉(zhuǎn)換為電平轉(zhuǎn)換為RS-485RS-485電平的功能。電平的功能。n內(nèi)部含有一個(gè)驅(qū)動(dòng)器和接收器。內(nèi)部含有一個(gè)驅(qū)動(dòng)器和接收器。RORO和和DIDI端分別為接收器的輸出和驅(qū)動(dòng)器端分別為接收器的輸出和驅(qū)動(dòng)器的輸入端,與單片機(jī)連接時(shí)只需分別與單片機(jī)的的輸入端,與單片機(jī)連接時(shí)只需分別與單片機(jī)的RXDRXD和和TXDTXD相連即可;相連即可;/RE/RE和和DEDE端分別為接收和發(fā)送的使能端,當(dāng)端分別為

35、接收和發(fā)送的使能端,當(dāng)/RE/RE為邏輯為邏輯0 0時(shí),器件處于接時(shí),器件處于接收狀態(tài);當(dāng)收狀態(tài);當(dāng)DEDE為邏輯為邏輯1 1時(shí),器件處于發(fā)送狀態(tài),因?yàn)闀r(shí),器件處于發(fā)送狀態(tài),因?yàn)镸AX485MAX485工作在半雙工作在半雙工狀態(tài),所以只需用單片機(jī)的一個(gè)管腳控制這兩個(gè)引腳即可;工狀態(tài),所以只需用單片機(jī)的一個(gè)管腳控制這兩個(gè)引腳即可;nA A端和端和B B端分別為接收和發(fā)送的差分信號(hào)端端分別為接收和發(fā)送的差分信號(hào)端, ,當(dāng)當(dāng)A A引腳的電平高于引腳的電平高于B B時(shí),代時(shí),代表發(fā)送的數(shù)據(jù)為表發(fā)送的數(shù)據(jù)為1 1;當(dāng);當(dāng)A A的電平低于的電平低于B B端時(shí),代表發(fā)送的數(shù)據(jù)為端時(shí),代表發(fā)送的數(shù)據(jù)為0 0。

36、n與單片機(jī)連接時(shí),只需要一個(gè)信號(hào)控制與單片機(jī)連接時(shí),只需要一個(gè)信號(hào)控制MAX485MAX485的接收和發(fā)送即可。同的接收和發(fā)送即可。同時(shí)將時(shí)將A A和和B B端之間加匹配電阻,一般可選端之間加匹配電阻,一般可選100100的電阻。的電阻。整理pptnMAX485芯片硬件電路圖整理pptn示例程序void init_uart(void) /串行口初始化串行口初始化 PCON = 0;/ Set PCON register, clear SMOD0 and SMOD1 bits/*initiate uart0*/T2MOD = 0; / T2OE=0;DCEN=0;S0CON = 0 x50; /

37、 uart 0 in mode 1 (8 bit), REN=1 RCAP2H= 0 xff;/ffb8:9600 Bds at 11.059MHzRCAP2L= 0 xb8;/ffdc:19200 Bds at 11.059MHzTCLK=1;/T2 overflow as the baud rate generator for uart0 transmit RCLK=1;/T2 overflow as the baud rate generator for uart0 receiveEXEN2=0; /ignore events on T2EX C_T2=0; /timer modeTR2

38、=1; /timer2 runES0R = 1 ; /開放開放UART0 接收中斷接收中斷 EA = 1; / Enable global interrupt UART1_CONTROL=R1_ENABLE;/enable UART1 receive(in max485)UART0_CONTROL=R0_ENABLE;/enable UART0 receive(in max485)整理pptvoid respond_PLC_uart0(void) /單片機(jī)與單片機(jī)與PLC進(jìn)行進(jìn)行485通信通信uchar i=0;if(ID_num%2)=0)ID_num_send=ID_num/2;else

39、if(ID_num%2)=1)ID_num_send=(ID_num+1)/2;ReCommand0 = *; /設(shè)置起始位、從機(jī)地址、終止位設(shè)置起始位、從機(jī)地址、終止位ReCommand1 = ID_num_send;/地址地址 if(flag_alert_LM=1) ReCommand2 = 0 x01;/亮度報(bào)警信息亮度報(bào)警信息 elseReCommand2 = 0 x0;/正常正常 整理pptReCommand3=tm_send1;/溫度值溫度值 ReCommand4=tm_send0;ReCommand5=lumin_buf2;ReCommand6=lumin_buf1;ReComm

40、and7=lumin_buf0;ReCommand9 = #; /結(jié)束位結(jié)束位if(MASTER=0)&(SPARE=1)ReCommand8=0 x0;/主燈工作主燈工作 else if(SPARE=0)&(MASTER=1)ReCommand8=0 x01;/備燈工作備燈工作 ES0R = 0 ; /關(guān)閉關(guān)閉UART0 接收中斷接收中斷 UART0_CONTROL=T0_ENABLE;/發(fā)送使能發(fā)送使能 for(i=0;i10;i+)S0BUF=ReCommandi;while(TI_0=0)feed_watchdog();TI_0=0;UART0_CONTROL=R0_E

41、NABLE;/接收使能接收使能 _nop_();_nop_();_nop_();_nop_();ES0R = 1 ; /開放開放UART0 接收中斷接收中斷 整理ppt/* Uart0 receive interrut*/void IntUart0Rx( void ) interrupt 4RI_0=0; /清除接收標(biāo)志清除接收標(biāo)志 if(S0BUF = )Command0=S0BUF;UartCount =0;else if (S0BUF = $)Command3=S0BUF;UartCount =0;else if (UartCount 3)UartCount+;CommandUartCount= S0BUF;else UartCount =0;整理pptSPI總線:總線:由同步串行外設(shè)接口由同步串行外設(shè)接口SPI構(gòu)構(gòu)成的串行總線是一種三線同步總線。總線上成的串行總線是一種三線同步總線??偩€上可以連接多個(gè)可以作為主機(jī)的微控制器可以連接多個(gè)可以作為主機(jī)的微控制器MCU及裝有及裝有SPI接口的接口的I/OI/O設(shè)備設(shè)備如液晶驅(qū)動(dòng)、如液晶驅(qū)動(dòng)、A/D轉(zhuǎn)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論