程序設(shè)計(jì)方案2實(shí)例ppt課件_第1頁(yè)
程序設(shè)計(jì)方案2實(shí)例ppt課件_第2頁(yè)
程序設(shè)計(jì)方案2實(shí)例ppt課件_第3頁(yè)
程序設(shè)計(jì)方案2實(shí)例ppt課件_第4頁(yè)
程序設(shè)計(jì)方案2實(shí)例ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

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

2、形狀為高電平。單總線(xiàn)的閑置形狀為高電平。n主機(jī)對(duì)主機(jī)對(duì)1-Wire1-Wire總線(xiàn)的根本操作分為復(fù)位、讀和寫(xiě)三種,其總線(xiàn)的根本操作分為復(fù)位、讀和寫(xiě)三種,其中一切的讀寫(xiě)操作均為低位在前,高位在后。中一切的讀寫(xiě)操作均為低位在前,高位在后。 n典型的單總線(xiàn)命令序列典型的單總線(xiàn)命令序列n第一步第一步 初始化;初始化;n第二步第二步 ROM ROM 命令命令 跟隨需求交換的數(shù)據(jù);跟隨需求交換的數(shù)據(jù);n第三步第三步 功能命令功能命令 跟隨需求交換的數(shù)據(jù);跟隨需求交換的數(shù)據(jù);實(shí)例:實(shí)例:DS18B20單線(xiàn)溫度傳感器單線(xiàn)溫度傳感器n主要特征n全數(shù)字溫度轉(zhuǎn)換及輸出。 n1-wire總線(xiàn)數(shù)據(jù)通訊。 n最高12位分

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

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

5、執(zhí)行或數(shù)據(jù)的讀寫(xiě),這個(gè)操作要視存儲(chǔ)器操作指令而定。n幾種時(shí)間隙nDS18B20復(fù)位及應(yīng)對(duì)關(guān)系n寫(xiě)時(shí)間隙n讀時(shí)間隙留意:必需在讀間隙開(kāi)場(chǎng)的15uS內(nèi)讀取數(shù)據(jù)位才可以保證通訊的正確。 nDS18B20與單片機(jī)接法n 例如程序:void Init_DS18B20(void)/18b20初始化初始化 DQ = 1;/DQ復(fù)位復(fù)位_nop_();_nop_();_nop_(); DQ = 0; /拉低拉低DQ delay(200);/約約600usDQ = 1; /拉高總線(xiàn)拉高總線(xiàn) delay(20); / 75us,30:100us uchar Read_byte(void) /讀一字節(jié)讀一字節(jié) uc

6、har 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_();/至少堅(jiān)持低電平至少堅(jiān)持低電平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_();_nop_();if(DQ) /假設(shè)高電平假設(shè)高電平 置置1d

7、at|=0 x80; delay(30); /至少堅(jiān)持至少堅(jiān)持60us,100us,確保讀數(shù)據(jù)勝利確保讀數(shù)據(jù)勝利 DQ = 1;/終了拉高終了拉高 return(dat); void Write_byte(uchar dat) /寫(xiě)一個(gè)字節(jié)寫(xiě)一個(gè)字節(jié) uchar i=0; for (i=8; i0; i-) DQ = 1;_nop_();_nop_();/稍作延時(shí)稍作延時(shí) _nop_();_nop_();_nop_();_nop_();DQ = 0;/拉低拉低DQ開(kāi)場(chǎng)寫(xiě)開(kāi)場(chǎng)寫(xiě) _nop_();_nop_();_nop_();_nop_();/15us內(nèi)釋放總線(xiàn)內(nèi)釋放總線(xiàn) _nop_();_no

8、p_();_nop_();_nop_();DQ = dat&0 x01; /從從lsb開(kāi)場(chǎng)開(kāi)場(chǎng) delay(20); /75us 至少需堅(jiān)持至少需堅(jiān)持60us寫(xiě)時(shí)間隙寫(xiě)時(shí)間隙dat=1; /右移一位右移一位DQ = 1;/終了拉高終了拉高delay(4); uint Get_Temperature(void) /讀溫度函數(shù)讀溫度函數(shù) uchar a=0; uchar b=0; uint t=0; Init_DS18B20(); Write_byte(0 xCC); /只接一個(gè)只接一個(gè)18b20芯片,芯片,skip ROM Write_byte(0 x44); /溫度轉(zhuǎn)換溫度轉(zhuǎn)換 delay(2

9、00); /延時(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); 雙向二線(xiàn)制串行通訊總線(xiàn),時(shí)鐘線(xiàn)雙向二線(xiàn)制串行通訊總線(xiàn),時(shí)鐘線(xiàn)SCL, 數(shù)據(jù)線(xiàn)數(shù)據(jù)線(xiàn)SDA。NXP 半導(dǎo)體原半導(dǎo)體原Philips 半導(dǎo)體于半導(dǎo)體于20 多年前發(fā)

10、明。多年前發(fā)明。I2C總線(xiàn)是同步串行數(shù)據(jù)傳輸總線(xiàn)??偩€(xiàn)是同步串行數(shù)據(jù)傳輸總線(xiàn)。經(jīng)常運(yùn)用的帶經(jīng)常運(yùn)用的帶I2C總線(xiàn)通用外圍器件有:總線(xiàn)通用外圍器件有:SRAM、E2PROM、ADC/DAC、RTC、I/O口等。口等。帶帶I2C總線(xiàn)的外圍設(shè)備模塊有由總線(xiàn)的外圍設(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總線(xiàn)及運(yùn)用總線(xiàn)及運(yùn)用nI2C 總線(xiàn)的信號(hào)線(xiàn)總線(xiàn)的信號(hào)線(xiàn)nI2C 總線(xiàn)只需求由兩根信號(hào)線(xiàn)組成,一根是串行數(shù)據(jù)線(xiàn)總線(xiàn)只需求由兩根信號(hào)線(xiàn)組成,一根

11、是串行數(shù)據(jù)線(xiàn)SDA,另一根是串行時(shí)鐘線(xiàn),另一根是串行時(shí)鐘線(xiàn)SCL,均為為開(kāi)漏構(gòu)造,故,均為為開(kāi)漏構(gòu)造,故總線(xiàn)上必需有上拉電阻總線(xiàn)上必需有上拉電阻Rp,通??蛇x,通??蛇x510k。nI2C總線(xiàn)時(shí)序定義:總線(xiàn)時(shí)序定義: n起始條件和停頓條件起始條件和停頓條件START and STOP conditionsn起始條件:當(dāng)起始條件:當(dāng)SCL 處于高電平期間時(shí),處于高電平期間時(shí),SDA 從高電平向低從高電平向低電平跳變時(shí)產(chǎn)生起始條件??偩€(xiàn)在起始條件產(chǎn)生后便處于電平跳變時(shí)產(chǎn)生起始條件??偩€(xiàn)在起始條件產(chǎn)生后便處于忙的形狀。起始條件經(jīng)常簡(jiǎn)記為忙的形狀。起始條件經(jīng)常簡(jiǎn)記為S。n停頓條件:當(dāng)停頓條件:當(dāng)SCL

12、處于高電平期間時(shí),處于高電平期間時(shí),SDA 從低電平向高從低電平向高電平跳變時(shí)產(chǎn)生停頓條件。總線(xiàn)在停頓條件產(chǎn)生后處于空電平跳變時(shí)產(chǎn)生停頓條件。總線(xiàn)在停頓條件產(chǎn)生后處于空閑形狀。停頓條件簡(jiǎn)記為閑形狀。停頓條件簡(jiǎn)記為P。nI2C 總線(xiàn)上數(shù)據(jù)的有效性總線(xiàn)上數(shù)據(jù)的有效性Data validityn數(shù)據(jù)線(xiàn)數(shù)據(jù)線(xiàn)SDA 的電平形狀必需在時(shí)鐘線(xiàn)的電平形狀必需在時(shí)鐘線(xiàn)SCL 處于高電平處于高電平期間堅(jiān)持穩(wěn)定不變。期間堅(jiān)持穩(wěn)定不變。SDA 的電平形狀只需在的電平形狀只需在SCL 處于處于低電平期間才允許改動(dòng)。但是在低電平期間才允許改動(dòng)。但是在I2C 總線(xiàn)的起始和終了總線(xiàn)的起始和終了時(shí)例外。時(shí)例外。n從機(jī)地址從機(jī)

13、地址Slave AddressnI2C 總線(xiàn)不需求地址譯碼器和片選信號(hào)。多個(gè)具總線(xiàn)不需求地址譯碼器和片選信號(hào)。多個(gè)具有有I2C 總線(xiàn)接口的器件都可以銜接到同一條總線(xiàn)接口的器件都可以銜接到同一條I2C 總線(xiàn)上,它們之間經(jīng)過(guò)器件地址來(lái)區(qū)分??偩€(xiàn)上,它們之間經(jīng)過(guò)器件地址來(lái)區(qū)分。n主機(jī)是主控器件,它不需求器件地址,其它器件主機(jī)是主控器件,它不需求器件地址,其它器件都屬于從機(jī),要有器件地址。必需保證同一條都屬于從機(jī),要有器件地址。必需保證同一條I2C 總線(xiàn)上一切從機(jī)的地址都是獨(dú)一??偩€(xiàn)上一切從機(jī)的地址都是獨(dú)一。n普通從機(jī)地址由普通從機(jī)地址由7 位地址位和一位讀寫(xiě)標(biāo)志位地址位和一位讀寫(xiě)標(biāo)志R/W 組成,組

14、成,7 位地址占據(jù)高位地址占據(jù)高7 位,讀寫(xiě)位在最后。讀位,讀寫(xiě)位在最后。讀寫(xiě)位是寫(xiě)位是0,表示主機(jī)將要向從機(jī)寫(xiě)入數(shù)據(jù);讀寫(xiě)位,表示主機(jī)將要向從機(jī)寫(xiě)入數(shù)據(jù);讀寫(xiě)位是是1,那么表示主機(jī)將要從從機(jī)讀取數(shù)據(jù)。,那么表示主機(jī)將要從從機(jī)讀取數(shù)據(jù)。n從機(jī)地址由一個(gè)固定和一個(gè)可編程的部分構(gòu)成。從機(jī)地址由一個(gè)固定和一個(gè)可編程的部分構(gòu)成。從機(jī)地址的可編程部分使最大數(shù)量的一樣器件可從機(jī)地址的可編程部分使最大數(shù)量的一樣器件可以銜接到以銜接到I2C 總線(xiàn)上,器件可編程地址位的數(shù)量總線(xiàn)上,器件可編程地址位的數(shù)量由管腳決議,假設(shè)器件由管腳決議,假設(shè)器件3 個(gè)可編程的地址管腳,個(gè)可編程的地址管腳,那么那么I2C總線(xiàn)上共可以

15、銜接總線(xiàn)上共可以銜接8 個(gè)一樣的器件。個(gè)一樣的器件。nI2C數(shù)據(jù)傳輸?shù)姆绞綌?shù)據(jù)傳輸?shù)姆绞絥以字節(jié)以字節(jié)Byte為單位收發(fā)數(shù)據(jù)。首先傳輸?shù)氖菫閱挝皇瞻l(fā)數(shù)據(jù)。首先傳輸?shù)氖菙?shù)據(jù)的最高位數(shù)據(jù)的最高位MSB,第,第7 位,最后傳輸?shù)氖俏唬詈髠鬏數(shù)氖亲畹臀蛔畹臀籐SB,第,第0 位。另外,每個(gè)字節(jié)之后位。另外,每個(gè)字節(jié)之后還要跟一個(gè)呼應(yīng)位,稱(chēng)為應(yīng)對(duì)。還要跟一個(gè)呼應(yīng)位,稱(chēng)為應(yīng)對(duì)。n應(yīng)對(duì)應(yīng)對(duì)Acknowledgen每傳輸一個(gè)字節(jié),要跟一個(gè)應(yīng)對(duì)形狀位。接納器每傳輸一個(gè)字節(jié),要跟一個(gè)應(yīng)對(duì)形狀位。接納器接納數(shù)據(jù)的情況可經(jīng)過(guò)應(yīng)對(duì)位來(lái)告知發(fā)送器。應(yīng)接納數(shù)據(jù)的情況可經(jīng)過(guò)應(yīng)對(duì)位來(lái)告知發(fā)送器。應(yīng)對(duì)位的時(shí)鐘脈沖由主機(jī)產(chǎn)生,而

16、應(yīng)對(duì)位的數(shù)據(jù)形對(duì)位的時(shí)鐘脈沖由主機(jī)產(chǎn)生,而應(yīng)對(duì)位的數(shù)據(jù)形狀那么遵照狀那么遵照“誰(shuí)接納誰(shuí)產(chǎn)生的原那么,即總是誰(shuí)接納誰(shuí)產(chǎn)生的原那么,即總是由接納器產(chǎn)生應(yīng)對(duì)位。主機(jī)向從機(jī)發(fā)送數(shù)據(jù)時(shí),由接納器產(chǎn)生應(yīng)對(duì)位。主機(jī)向從機(jī)發(fā)送數(shù)據(jù)時(shí),應(yīng)對(duì)位由從機(jī)產(chǎn)生;主機(jī)從從機(jī)接納數(shù)據(jù)時(shí),應(yīng)應(yīng)對(duì)位由從機(jī)產(chǎn)生;主機(jī)從從機(jī)接納數(shù)據(jù)時(shí),應(yīng)對(duì)位由主機(jī)產(chǎn)生。對(duì)位由主機(jī)產(chǎn)生。nI2C總線(xiàn)上第總線(xiàn)上第9個(gè)脈沖對(duì)應(yīng)應(yīng)對(duì)位,個(gè)脈沖對(duì)應(yīng)應(yīng)對(duì)位,SDA為為0 表示表示接納器應(yīng)對(duì)接納器應(yīng)對(duì)ACK,A;為;為1 那么表示非應(yīng)對(duì)那么表示非應(yīng)對(duì)NACK,/A。n根本的數(shù)據(jù)傳輸格式根本的數(shù)據(jù)傳輸格式主機(jī)向從機(jī)發(fā)送數(shù)據(jù)的根本格式主機(jī)向從機(jī)發(fā)送數(shù)據(jù)的根本格式主

17、機(jī)從從機(jī)接納數(shù)據(jù)的根本格式主機(jī)從從機(jī)接納數(shù)據(jù)的根本格式留意:主機(jī)向從機(jī)發(fā)送最后一個(gè)字節(jié)的數(shù)據(jù)時(shí),從機(jī)能夠應(yīng)對(duì)也留意:主機(jī)向從機(jī)發(fā)送最后一個(gè)字節(jié)的數(shù)據(jù)時(shí),從機(jī)能夠應(yīng)對(duì)也能夠非應(yīng)對(duì),但不論怎樣主機(jī)都可以產(chǎn)生停頓條件。假設(shè)主機(jī)在能夠非應(yīng)對(duì),但不論怎樣主機(jī)都可以產(chǎn)生停頓條件。假設(shè)主機(jī)在向從機(jī)發(fā)送數(shù)據(jù)甚至包括從機(jī)地址在內(nèi)時(shí)檢測(cè)到從機(jī)非應(yīng)對(duì),向從機(jī)發(fā)送數(shù)據(jù)甚至包括從機(jī)地址在內(nèi)時(shí)檢測(cè)到從機(jī)非應(yīng)對(duì),那么該當(dāng)及時(shí)停頓傳輸。那么該當(dāng)及時(shí)停頓傳輸。n數(shù)據(jù)傳輸時(shí)序圖數(shù)據(jù)傳輸時(shí)序圖主機(jī)向從機(jī)寫(xiě)數(shù)據(jù)主機(jī)向從機(jī)寫(xiě)數(shù)據(jù) 24LC01主機(jī)讀從機(jī)數(shù)據(jù)主機(jī)讀從機(jī)數(shù)據(jù)24LC01EEPROM 24LC01Bn主要特征n低至2.5V的

18、單電源供電;n低功耗的CMOS技術(shù);n128 bytes1288的存儲(chǔ)塊;n規(guī)范2線(xiàn)串行接口總線(xiàn) ,I2C總線(xiàn);n兼容100 kHz (2.5V) 、 400kHz (5.0V);n高達(dá)8 bytes的頁(yè)寫(xiě)入緩存;n2 ms頁(yè)寫(xiě)入時(shí)間周期;n硬件寫(xiě)維護(hù)。n硬件電路I2C經(jīng)過(guò)經(jīng)過(guò)IO口模擬口模擬void Start(void) /起始信號(hào)起始信號(hào)Sda=1;Scl=1;delay1us();Sda=0;delay1us();void Stop(void) /停頓停頓Sda=0;Scl=1;delay1us();Sda=1;delay1us();void Ack(void) /應(yīng)對(duì)應(yīng)對(duì)Sda=0;

19、delay1us();Scl=1;delay1us();Scl=0;void NoAck(void) /不應(yīng)對(duì)不應(yīng)對(duì)Sda=1;delay1us();Scl=1;delay1us();Scl=0;void Send(unsigned char Data) /發(fā)送字節(jié)發(fā)送字節(jié)unsigned char xdata BitCounter=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=Data

20、1; /左移左移1位位Data=temp;BitCounter- -;while(BitCounter);Scl=0;unsigned char Read(void) /讀取字節(jié)讀取字節(jié)unsigned char xdata temp=0;unsigned char xdata temp1=0;unsigned 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) &

21、 0 xff;/先寫(xiě)高先寫(xiě)高8位位Send(Temp_Data);Ack();Stop();delay1ms(5);Start(); Send(0 xa0); Ack();Send(Address+1); Ack();Temp_Data=Data_Write & 0 xff;/低低8位位Send(Temp_Data);Ack();Stop();delay1ms(5);unsigned int RdFromROM(unsigned char Address)/讀取數(shù)據(jù)讀取數(shù)據(jù)unsigned int xdata Temp_Data;Start();Send(0 xa0);Ack();Send(A

22、ddress);Ack();Start();Send(0 xa1);Ack();Temp_Data=(Read()*256;/高高8位位NoAck();Stop();delay1ms(5);Start();Send(0 xa0);Ack();Send(Address+1);Ack();Start();Send(0 xa1);Ack();Temp_Data += Read();/低低8位位NoAck();Stop();delay1ms(5);return Temp_Data;經(jīng)過(guò)單片機(jī)自帶經(jīng)過(guò)單片機(jī)自帶I2C接口接口P89C669自帶I2C功能實(shí)現(xiàn)對(duì)EEPROM單字節(jié)的讀取與寫(xiě)入,寫(xiě)入單個(gè)字節(jié)和

23、讀取只需分別調(diào)用bit ISendbyte_1(uchar sla,uchar suba,uchar c)和bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)即可,參考資料:P89C669 I2C軟件包。/*懇求總線(xiàn)懇求總線(xiàn)功能:進(jìn)展功能:進(jìn)展I2C 總線(xiàn)的初始化包括時(shí)鐘速率總線(xiàn)的初始化包括時(shí)鐘速率I2C 使能發(fā)送起始信號(hào)等使能發(fā)送起始信號(hào)等 */void GetBus()I2CON=0 xc4;/use internal SCL generatorI2CLL=50;/bits data rate=fosc/(I2CLL+I2CLH)I2CL

24、H=50;I2CON=I2CON|0 x20; /*STA=1,懇求成為主機(jī)起動(dòng)總線(xiàn)懇求成為主機(jī)起動(dòng)總線(xiàn) */ while(SI=0);/*發(fā)送數(shù)據(jù)函數(shù)發(fā)送數(shù)據(jù)函數(shù) 功能:用于向總線(xiàn)發(fā)送數(shù)據(jù)功能:用于向總線(xiàn)發(fā)送數(shù)據(jù) */void SendByte(uchar c)I2DAT=c;I2CON=0XC4; /*去除去除SI 位等等位等等 */while(SI=0);/*向有子地址器件發(fā)送一個(gè)字節(jié)數(shù)據(jù)函數(shù)向有子地址器件發(fā)送一個(gè)字節(jié)數(shù)據(jù)函數(shù) */bit ISendbyte_1(uchar sla,uchar suba,uchar c)GetBus(); /*啟動(dòng)總線(xiàn)啟動(dòng)總線(xiàn) */SendByte(sl

25、a); /*發(fā)送器件地址發(fā)送器件地址 */if(I2STAT!=0X18)I2CON=0XD4;return(0);SendByte(suba); /*發(fā)送器件子地址發(fā)送器件子地址 */if(I2STAT!=0X28)I2CON=0XD4;return(0);SendByte(c); /*發(fā)送數(shù)據(jù)發(fā)送數(shù)據(jù) */if(I2STAT!=0X28)I2CON=0XD4;return(0);I2CON=0XD4; /*終了總線(xiàn)終了總線(xiàn) */return(1);/*向有子地址器件讀取多字節(jié)數(shù)據(jù)函數(shù)向有子地址器件讀取多字節(jié)數(shù)據(jù)函數(shù) 函數(shù)原型函數(shù)原型: bit ISendStr(uchar sla,ucha

26、r suba,ucahr *s,uchar no);功能功能: 從啟動(dòng)總線(xiàn)到發(fā)送地址子地址從啟動(dòng)總線(xiàn)到發(fā)送地址子地址,讀數(shù)據(jù)終了總線(xiàn)的全過(guò)程讀數(shù)據(jù)終了總線(xiàn)的全過(guò)程,從器件從器件 地址地址sla 子地址子地址suba 讀出的內(nèi)容放入讀出的內(nèi)容放入s 指向的存儲(chǔ)區(qū)讀指向的存儲(chǔ)區(qū)讀no 個(gè)字節(jié)個(gè)字節(jié) 假設(shè)前往假設(shè)前往1 表示操作勝利否那么操作有誤表示操作勝利否那么操作有誤 */bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)uchar i;GetBus(); /*啟動(dòng)總線(xiàn)啟動(dòng)總線(xiàn) */SendByte(sla); /*發(fā)送器件地址發(fā)送器件地址 *

27、/if(I2STAT!=0X18)I2CON=0XD4;return(0);SendByte(suba); /*發(fā)送器件子地址發(fā)送器件子地址 */if(I2STAT!=0X28)I2CON=0XD4;return(0);I2CON=0XE4; /*重新啟動(dòng)總線(xiàn)重新啟動(dòng)總線(xiàn) */while(SI=0);SendByte(sla+1);if(I2STAT!=0X40)I2CON=0XD4;return(0);for(i=0;ino-1;i+)I2CON=0XC4; /*接納一字節(jié)數(shù)據(jù)并發(fā)送應(yīng)對(duì)位*/while(SI=0);if(I2STAT!=0X50)I2CON=0XD4;return(0);*

28、s=I2DAT; /*讀取數(shù)據(jù) */s+;I2CON=0XC0; /*接納最后一字節(jié)數(shù)據(jù)并發(fā)送非應(yīng)對(duì)位*/while(SI=0);*s=I2DAT;I2CON=0XD4; /*終了總線(xiàn) */return(1);RS232C/RS485n電子工業(yè)協(xié)會(huì)電子工業(yè)協(xié)會(huì)EIA公布的公布的RS-232C是用得最多的一種是用得最多的一種串行通訊規(guī)范,它是從遠(yuǎn)程通訊規(guī)范中導(dǎo)出來(lái)的,是運(yùn)用串行通訊規(guī)范,它是從遠(yuǎn)程通訊規(guī)范中導(dǎo)出來(lái)的,是運(yùn)用于數(shù)據(jù)終端設(shè)備于數(shù)據(jù)終端設(shè)備DTE和數(shù)據(jù)通訊設(shè)備和數(shù)據(jù)通訊設(shè)備DCE之間的之間的接口。該規(guī)范除包括物理目的外,還包括闡明按位串行傳接口。該規(guī)范除包括物理目的外,還包括闡明按位串

29、行傳送時(shí)的電氣目的。送時(shí)的電氣目的。RS-232CRS-232C電氣特性電氣特性在電氣性能方面,在電氣性能方面,RS-232CRS-232C運(yùn)用負(fù)邏輯。邏輯運(yùn)用負(fù)邏輯。邏輯“1“1電平電平是在是在 -5V -5V-15V-15V范圍內(nèi),邏輯范圍內(nèi),邏輯“0“0電平是在電平是在+5V+5V+15V+15V范范圍內(nèi)。圍內(nèi)。規(guī)范要求規(guī)范要求RS-232CRS-232C接納器必需可以識(shí)別接納器必需可以識(shí)別+3V+3V以上的信號(hào)作以上的信號(hào)作為邏輯為邏輯“0“0,-3V-3V以下的信號(hào)作為邏輯以下的信號(hào)作為邏輯“1“1,即有,即有2V2V的噪聲容限。的噪聲容限。RS-232CRS-232C的主要電氣特性

30、見(jiàn)下表。的主要電氣特性見(jiàn)下表。最大電纜長(zhǎng)度最大電纜長(zhǎng)度15m 最大數(shù)據(jù)傳輸率最大數(shù)據(jù)傳輸率20KB/s 驅(qū)動(dòng)器輸出電壓開(kāi)路驅(qū)動(dòng)器輸出電壓開(kāi)路 25V 25V最大最大 驅(qū)動(dòng)器輸出電壓滿(mǎn)載驅(qū)動(dòng)器輸出電壓滿(mǎn)載 5 52525( (最大最大 驅(qū)動(dòng)器輸出電阻驅(qū)動(dòng)器輸出電阻300最小最小 驅(qū)動(dòng)器輸出短路電流驅(qū)動(dòng)器輸出短路電流 500mA 500mA 接納器輸入電阻接納器輸入電阻37k 接納器輸入門(mén)限電壓值接納器輸入門(mén)限電壓值-3+3V最大最大 接納器輸入電壓接納器輸入電壓-25+25V最大最大 nRS-232CRS-232C數(shù)據(jù)傳送格式數(shù)據(jù)傳送格式 nRS-232CRS-232C的數(shù)據(jù)傳送格式是位串行方式

31、,傳輸數(shù)的數(shù)據(jù)傳送格式是位串行方式,傳輸數(shù)據(jù)的格式如以下圖所示,這是微處置機(jī)運(yùn)用系統(tǒng)據(jù)的格式如以下圖所示,這是微處置機(jī)運(yùn)用系統(tǒng)中最通用的格式。數(shù)據(jù)的延續(xù)傳送由最低有效數(shù)中最通用的格式。數(shù)據(jù)的延續(xù)傳送由最低有效數(shù)字位開(kāi)場(chǎng),以奇偶校驗(yàn)位作終了。字位開(kāi)場(chǎng),以奇偶校驗(yàn)位作終了。nRS-485RS-485規(guī)范規(guī)范 :n由由RS-232CRS-232C的電氣特性表可知,假設(shè)不采用調(diào)制的電氣特性表可知,假設(shè)不采用調(diào)制解調(diào)器,其傳輸間隔很短,且最大數(shù)據(jù)傳輸率也解調(diào)器,其傳輸間隔很短,且最大數(shù)據(jù)傳輸率也遭到限制。遭到限制。n因此,因此,EIAEIA又公布了可以適宜于遠(yuǎn)間隔傳輸?shù)挠止剂丝梢赃m宜于遠(yuǎn)間隔傳輸?shù)腞S

32、-RS-485485規(guī)范。規(guī)范。 nRS485RS485用差分接納器接納信號(hào)電壓,差分信號(hào)的用差分接納器接納信號(hào)電壓,差分信號(hào)的抗噪聲才干強(qiáng)??乖肼暡鸥蓮?qiáng)。 特特 性性RS-422、RS-485最大電纜長(zhǎng)度最大電纜長(zhǎng)度1200m 最大數(shù)據(jù)傳輸率最大數(shù)據(jù)傳輸率10MB/s 驅(qū)動(dòng)器輸出電壓開(kāi)路驅(qū)動(dòng)器輸出電壓開(kāi)路6V最大輸出端之間最大輸出端之間 驅(qū)動(dòng)器輸出電壓滿(mǎn)載驅(qū)動(dòng)器輸出電壓滿(mǎn)載2V最小輸出端之間最小輸出端之間 驅(qū)動(dòng)器輸出短路電流驅(qū)動(dòng)器輸出短路電流 150mA 150mA最大最大 接納器輸入電阻接納器輸入電阻大于等于大于等于4k 接納器輸入門(mén)限電壓值接納器輸入門(mén)限電壓值-0.2+0.2V(最大最大

33、) 接納器輸入電壓接納器輸入電壓-12V+12V最大最大 當(dāng)采用當(dāng)采用+5V電源供電時(shí),電源供電時(shí),RS-485信號(hào)定義如下:信號(hào)定義如下:假設(shè)差分電壓信號(hào)為假設(shè)差分電壓信號(hào)為2500200mV時(shí),為邏輯時(shí),為邏輯“0;假設(shè)差分電壓信號(hào)為假設(shè)差分電壓信號(hào)為2500200mV時(shí),為邏輯時(shí),為邏輯“1;nMAX485主要特征:n采用單一電源+5 V任務(wù),額定電流為300 A,采用半雙工通訊方式。完成將TTL電平轉(zhuǎn)換為RS-485電平的功能。n內(nèi)部含有一個(gè)驅(qū)動(dòng)器和接納器。RO和DI端分別為接納器的輸出和驅(qū)動(dòng)器的輸入端,與單片機(jī)銜接時(shí)只需分別與單片機(jī)的RXD和TXD相連即可;/RE和DE端分別為接納和

34、發(fā)送的使能端,當(dāng)/RE為邏輯0時(shí),器件處于接納形狀;當(dāng)DE為邏輯1時(shí),器件處于發(fā)送形狀,由于MAX485任務(wù)在半雙工形狀,所以只需用單片機(jī)的一個(gè)管腳控制這兩個(gè)引腳即可;nA端和B端分別為接納和發(fā)送的差分信號(hào)端,當(dāng)A引腳的電平高于B時(shí),代表發(fā)送的數(shù)據(jù)為1;當(dāng)A的電平低于B端時(shí),代表發(fā)送的數(shù)據(jù)為0。n與單片機(jī)銜接時(shí),只需求一個(gè)信號(hào)控制MAX485的接納和發(fā)送即可。同時(shí)將A和B端之間加匹配電阻,普通可選100的電阻。nMAX485芯片硬件電路圖n例如程序void init_uart(void) /串行口初始化串行口初始化 PCON = 0;/ Set PCON register, clear SMO

35、D0 and SMOD1 bits/*initiate uart0*/T2MOD = 0; / T2OE=0;DCEN=0;S0CON = 0 x50; / 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 gen

36、erator for uart0 receiveEXEN2=0; /ignore events on T2EX C_T2=0; /timer modeTR2=1; /timer2 runES0R = 1 ; /開(kāi)放開(kāi)放UART0 接納中斷接納中斷 EA = 1; / Enable global interrupt UART1_CONTROL=R1_ENABLE;/enable UART1 receive(in max485)UART0_CONTROL=R0_ENABLE;/enable UART0 receive(in max485)void respond_PLC_uart0(void) /

37、單片機(jī)與單片機(jī)與PLC進(jìn)展進(jìn)展485通訊通訊uchar i=0;if(ID_num%2)=0)ID_num_send=ID_num/2;else 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;/正常正常 ReCommand3=tm_send1;/溫度值溫度值 Re

38、Command4=tm_send0;ReCommand5=lumin_buf2;ReCommand6=lumin_buf1;ReCommand7=lumin_buf0;ReCommand9 = #; /終了位終了位if(MASTER=0)&(SPARE=1)ReCommand8=0 x0;/主燈任務(wù)主燈任務(wù) else if(SPARE=0)&(MASTER=1)ReCommand8=0 x01;/備燈任務(wù)備燈任務(wù) ES0R = 0 ; /封鎖封鎖UART0 接納中斷接納中斷 UART0_CONTROL=T0_ENABLE;/發(fā)送使能發(fā)送使能 for(i=0;i10;i+)S0BUF=ReCom

39、mandi;while(TI_0=0)feed_watchdog();TI_0=0;UART0_CONTROL=R0_ENABLE;/接納使能接納使能 _nop_();_nop_();_nop_();_nop_();ES0R = 1 ; /開(kāi)放開(kāi)放UART0 接納中斷接納中斷 /* 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;SPI總線(xiàn):總線(xiàn):由同步串行外設(shè)接口由同步串行外設(shè)接口SPI構(gòu)成的串行總線(xiàn)是構(gòu)成的串行總線(xiàn)是一種三線(xiàn)同步總線(xiàn)??偩€(xiàn)上可以銜接多個(gè)一種三線(xiàn)同步總線(xiàn)??偩€(xiàn)上可以銜接多個(gè)可以作為主機(jī)的微控制器可以作為主機(jī)的微控制器MCU及裝有及裝有SPI接口的接口的I/O設(shè)備如液晶驅(qū)動(dòng)、設(shè)備如液晶驅(qū)動(dòng)、A/D轉(zhuǎn)換等外轉(zhuǎn)換

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論