版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
⑤串行口工作在中斷方式時(shí),要進(jìn)行中斷設(shè)置(編程IE,IP寄存器)。下面介紹串行口方式1的具體運(yùn)用方法和操作流程:4.1單片機(jī)與PC機(jī)間發(fā)送單個(gè)字符試驗(yàn)內(nèi)容:在上位機(jī)上用串口調(diào)試助手發(fā)送一個(gè)字符X,單片機(jī)收到字符后返回給上位機(jī)“IgetX”,串口波特率設(shè)為9600bps。程序代碼如下:#include<reg52.h> #defineucharunsignedchar#defineuintunsignedintunsignedcharflag,a,i;ucharcodetable[]="Iget";//定義了一個(gè)字符類型的編碼數(shù)組voidinit(){ TMOD=0x20;//設(shè)定T1定時(shí)器工作方式2 TH1=0xfd;//T1定時(shí)器裝初值 TL1=0xfd;//T1定時(shí)器裝初值 TR1=1;//啟動(dòng)T1定時(shí)器 REN=1;//允許串口接收 SM0=0;//設(shè)定串口工作方式1 SM1=1; //同上 EA=1;//開總中斷 ES=1; //開串口中斷}voidmain(){init();while(1)//進(jìn)入大循環(huán)while()語句后,始終在檢測(cè)標(biāo)記位flag是{否為1,當(dāng)檢測(cè)到為1時(shí),說明程序已經(jīng)執(zhí)行過串口中if(flag==1)斷服務(wù)程序,即收到了數(shù)據(jù),否則始終檢測(cè)flag的狀態(tài)。{當(dāng)檢測(cè)到flag置1后,先是將ES清0,緣由是接下來要ES=0;發(fā)送數(shù)據(jù),若不關(guān)閉串口中斷,當(dāng)發(fā)送完數(shù)據(jù)后,單片for(i=0;i<6;i++)機(jī)同樣會(huì)申請(qǐng)串口中斷,便再次進(jìn)入中斷服務(wù)程序,{flag又被置1,主程序檢測(cè)到flag為1,又回到這里再次發(fā)送,如此重復(fù)下去,程序便成了死循環(huán),造成錯(cuò)誤的SBUF=table[i]; 現(xiàn)象,因此我們?cè)诎l(fā)送數(shù)據(jù)前把串口中斷關(guān)閉,等發(fā)送完 數(shù)據(jù)后再打開串口中斷,這樣便可以平安地發(fā)送數(shù)據(jù)了。while(!TI); TI=0;//在發(fā)送數(shù)據(jù)時(shí),當(dāng)發(fā)送前面6個(gè)固定的字符時(shí),運(yùn)用//了一個(gè)for循環(huán)語句,將前面數(shù)組中的字符依次發(fā)送//出去,后面再接著發(fā)送從中斷服務(wù)程序中讀回來的//SBUF中的數(shù)據(jù)時(shí),當(dāng)向SBUF中寫入一個(gè)數(shù)據(jù)后,運(yùn)用//“while(!TI);”等待是否發(fā)送完畢,因?yàn)楫?dāng)發(fā)送完畢//后TI會(huì)由硬件置1,然后才退出“while(!TI);”}//接下來我們?cè)賹I手動(dòng)清0。SBUF=a;while(!TI);TI=0;ES=1;flag=0;}}}voidser()interrupt4{ RI=0;a=SBUF;}//“voidser()interrupt”為串口中斷服務(wù)程序,在本程序中完成三件事:RI清0,因?yàn)槌绦蚣热划a(chǎn)生了串口中斷,則確定是收到或發(fā)送了數(shù)據(jù),在開始時(shí)沒有發(fā)送任何數(shù)據(jù),那必定是收到了數(shù)據(jù),此時(shí)RI會(huì)被硬件置1,進(jìn)入串口中斷服務(wù)程序后必需由軟件清0,這樣才能產(chǎn)生下一次中斷;將SBUF中的數(shù)據(jù)讀走給a,這才是進(jìn)入中斷服務(wù)程序中最重要的目的;將標(biāo)記位flag置1,以便利在主程序中查詢推斷是否已經(jīng)收到數(shù)據(jù)。試驗(yàn)結(jié)果如圖4.4所示圖4.4試驗(yàn)結(jié)果4.2串行口打印在調(diào)試程序中的應(yīng)用串行口打印功能通常用在程序調(diào)試中,舉個(gè)例子說明它的用途:我們正在用單片機(jī)調(diào)試一個(gè)A/D芯片,單片機(jī)的外圍只接了A/D芯片和串行口,當(dāng)我們寫好單片機(jī)程序下載后讓其運(yùn)行,可是我們根本不知道這個(gè)A/D芯片工作了沒有?更不知道A/D芯片采集回來的數(shù)值對(duì)不對(duì)?這時(shí)假如我們運(yùn)用串口打印功能,將單片機(jī)采集回來的A/D值經(jīng)過處理后,發(fā)送到上位機(jī)上,在上位機(jī)上用一個(gè)簡(jiǎn)單的串口工具就可看見數(shù)據(jù),這樣我們?cè)谡{(diào)試程序時(shí)便會(huì)便利很多。其次我們?cè)谡{(diào)試其他程序時(shí),在整個(gè)程序的不同地方,或是關(guān)鍵地方運(yùn)用串口打印功能輸出給上位機(jī)一個(gè)關(guān)鍵數(shù)據(jù),我們就可知道程序中某些變量的實(shí)時(shí)數(shù)值,進(jìn)一步得知程序運(yùn)行的狀況。試驗(yàn)內(nèi)容:?jiǎn)纹瑱C(jī)上電后等待從上位機(jī)串口發(fā)送來的命令,同時(shí)在數(shù)碼管的前三位以十進(jìn)制方式顯示A/D采集的數(shù)值,在未收到上位機(jī)發(fā)送來的啟動(dòng)A/D轉(zhuǎn)換命令之前數(shù)碼管始終顯示000。當(dāng)收到上位機(jī)以十六進(jìn)制發(fā)送來的01后,向上位機(jī)發(fā)送字符串“Turnonad”,同時(shí)間隔一秒讀取一次A/D的值,然后把A/D采集回來的8位二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)表示的實(shí)際電壓浮點(diǎn)數(shù),并且從串口發(fā)送給上位機(jī),形式如“Thevoltageis3.398438V”,發(fā)送周期也是一秒一次,同時(shí)在數(shù)碼管上也要每秒刷新顯示的數(shù)值。當(dāng)收到上位機(jī)以十六進(jìn)制發(fā)送來的02后,向上位機(jī)發(fā)送字符串“Turnoffad!”,然后停止發(fā)送電壓值,數(shù)碼管上顯示上次結(jié)束時(shí)保持的值。當(dāng)收到上位機(jī)發(fā)來的其他任何數(shù)時(shí),向上位機(jī)發(fā)送字符串“Error!”。程序代碼如下:#include<reg52.h>#include<intrins.h>#include<stdio.h> #defineucharunsignedchar#defineuintunsignedintsbitdula=P2^6; //申明U1鎖存器的鎖存端sbitwela=P2^7; //申明U2鎖存器的鎖存端sbitadwr=P3^6; //定義AD的WR端口sbitadrd=P3^7; //定義AD的RD端口ucharflag,a;unsignedcharflag_uart,flag_time,flag_on,a,i,t0_num,ad_val;floatad_vo;ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};voiddelayms(uintxms) { uinti,j; for(i=xms;i>0;i--) //i=xms即延時(shí)約xms毫秒 for(j=110;j>0;j--);}voidinit(){ TMOD=0x21;// SCON=0x50; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=0xfd; TL1=0xfd; TR1=1; ET0=1; SM0=0; SM1=1; REN=1; EA=1; ES=1;}voiddisplay(ucharvalue)//顯示子函數(shù){ ucharbai,shi,ge; bai=value/100; //分出百,十,和個(gè)位 shi=value%100/10; ge=value%10; dula=1; P0=table[bai];//送段選數(shù)據(jù) dula=0; P0=0xff; //送位選數(shù)據(jù)前關(guān)閉全部顯示,防止打開位選鎖存時(shí) wela=1; //原來段選數(shù)據(jù)通過位選鎖存器造成混亂 P0=0x7e; //送位選數(shù)據(jù) wela=0; delayms(5); //延時(shí) dula=1; P0=table[shi]; dula=0; P0=0xff; wela=1; P0=0x7d; wela=0; delayms(5); dula=1; P0=table[ge]; dula=0; P0=0xff; wela=1; P0=0x7b; wela=0; delayms(5);}ucharget_ad() { ucharadval; adwr=1; _nop_(); adwr=0; //啟動(dòng)AD轉(zhuǎn)換 _nop_(); adwr=1; P1=0xff;//讀取P1口之前先給其寫全1 adrd=1; _nop_(); adrd=0;//AD讀使能 _nop_(); adval=P1; //AD數(shù)據(jù)讀取 adrd=1; returnadval;}voidmain(){ init(); wela=1; P0=0x7f;//置CSAD為0,選通ADCS以后不必再管ADCS wela=0; while(1) { if(flag_uart==1) { flag_uart=0; ES=0; TI=1; switch(flag_on) { case0:puts("Turnonad!\n"); TR0=1; break; case1:printf("Turnoffad!\n"); TR0=0; break; case2:puts("Error!\n"); break; } while(!TI);//必須要加 TI=0; ES=1; } if(flag_time==1) { flag_time=0; ad_val=get_ad(); ad_vo=(float)ad_val*5.0/256.0; ES=0; TI=1; printf("Thevoltageis%fV\n",ad_vo); while(!TI); TI=0; ES=1; } display(ad_val); }}voidtimer0()interrupt1{ TH0=(65536-50000)/256; TL0=(65536-50000)%256; t0_num++; if(t0_num==20) { t0_num=0; flag_time=1; }}voidser()interrupt4{ RI=0; a=SBUF; flag_uart=1; if(a==1) flag_on=0; elseif(a==2) flag_on=1; else flag_on=2;}試驗(yàn)結(jié)果如圖4.5所示圖4.5試驗(yàn)結(jié)果第五章VC(MSCOMM控件)與單片機(jī)通信實(shí)現(xiàn)溫度顯示[試驗(yàn)要求]用單片機(jī)限制開發(fā)板上的DS18B20數(shù)字溫度傳感器,讀取當(dāng)前環(huán)境溫度,精度達(dá)0.1度,溫度范圍0-99度,并用數(shù)碼管的前三位顯示出來。同時(shí)開發(fā)板上的單片機(jī)還能把溫度值通過串口發(fā)送到計(jì)算機(jī),在計(jì)算機(jī)上可看到溫度值。留意:DS18B20數(shù)字溫度傳感器是DALLAS公司生產(chǎn)的1-Wire,即單總線器件,具有線路簡(jiǎn)單,體積小的特點(diǎn)。因此用它來組成一個(gè)測(cè)溫系統(tǒng),在一根通信線,可以掛很多這樣的數(shù)字溫度計(jì)。DS18B20產(chǎn)品的特點(diǎn):只要求一個(gè)I/O口即可實(shí)現(xiàn)通信。在DS18B20中的每個(gè)器件上都有獨(dú)一無二的序列號(hào)。實(shí)際應(yīng)用中不須要外部任何元器件即可實(shí)現(xiàn)測(cè)溫。測(cè)量溫度范圍在-55到+125攝氏度之間。數(shù)字溫度計(jì)的辨別率用戶可以從9位到12位選擇。(6)內(nèi)部有溫度上,下限告警設(shè)置。DS18B20具體引腳功能描述GND地信號(hào);DQ數(shù)據(jù)輸入出引腳。開漏單總線接口引腳。當(dāng)被用在寄生電源下,也可以向器件供應(yīng)電源;VDD可選擇的VDD引腳。當(dāng)工作于寄生電源時(shí),此引腳必需接地。DS18B20的運(yùn)用方法:由于DS18B20采納的是1-Wire總線協(xié)議方式,即在一根數(shù)據(jù)線實(shí)現(xiàn)數(shù)據(jù)的雙向傳輸,而對(duì)AT89S52單片機(jī)來說,我們必需采納軟件的方法來模擬單總線的協(xié)議時(shí)序來完成對(duì)DS18B20芯片的訪問。由于DS18B20是在一根I/O線上讀寫數(shù)據(jù),因此,對(duì)讀寫的數(shù)據(jù)位有著嚴(yán)格的時(shí)序要求。DS18B20有嚴(yán)格的通信協(xié)議來保證各位數(shù)據(jù)傳輸?shù)恼_性和完整性。該協(xié)議定義了幾種信號(hào)的時(shí)序:初始化時(shí)序,讀時(shí)序,寫時(shí)序。全部時(shí)序都是將主機(jī)作為主設(shè)備,單總線器件作為從設(shè)備。而每一次命令和數(shù)據(jù)的傳輸都是從主機(jī)主動(dòng)啟動(dòng)寫時(shí)序開始,假如要求單總線器件回送數(shù)據(jù),在進(jìn)行寫命令后,主機(jī)需啟動(dòng)讀時(shí)序完成數(shù)據(jù)接收。數(shù)據(jù)和命令的傳輸都是低位在先。要想完成此任務(wù),須要兩段代碼,一段是單片機(jī)的代碼,它須要將采集到的溫度數(shù)據(jù)處理后,通過串行口發(fā)送出去。另一段是PC機(jī)的代碼,須要用MSCOMM控件接收數(shù)據(jù),處理數(shù)據(jù)和顯示數(shù)據(jù)。單片機(jī)檢測(cè)溫度及發(fā)送數(shù)據(jù)的代碼見附錄A。電腦VC程序:第一步,打開VC軟件,新建文件,選擇[MFCAppWizardexe]項(xiàng),工程名取為[tem_con],單擊[OK]按鈕,如圖5.1所示。圖5.1選擇工程類型第二步,選擇[Dialogbased]項(xiàng),單擊[Finish]按鈕,如圖5.2所示。圖5.2選擇對(duì)話框類型第三步,單擊[Project—>AddToProject—ComponentsandControls...]菜單項(xiàng),如圖5.3所示圖5.3添加控件第四步,等待軟件打開文件夾,雙擊[RegisteredActiveXControls]文件夾,如圖5.4所示。圖5.4選擇RegisteredActiveXControls文件夾第五步,選擇[MicrosoftCommunicationsControl,version6.0]列表項(xiàng),單擊[Insert]按鈕,如圖5.5所示。圖5.5選擇MSCOMM控件第六步,接著彈出[ConfirmClasses]對(duì)話框,默認(rèn)不修改,單擊[OK]按鈕,如圖5.6所示。圖5.6為新類添加名稱第七步,將限制工具條中的串行口控件拖動(dòng)到對(duì)話框中,用鼠標(biāo)左鍵點(diǎn)住,始終拖到對(duì)話框中,在隨意位置釋放左鍵。第八步,單擊[View—>ClassWizard]菜單項(xiàng)打開[MFCClassWizard]對(duì)話框,選中[IDC_MSCOMM1]和[OnComm]列表項(xiàng),單擊[AddFunction...]按鈕。第九步,始終單擊[OK]按鈕,我們就會(huì)看到增加的[OnOnCommMscomm1()]函數(shù)。第十步,選擇控件工具條中的編輯框控件ab|,在對(duì)話框中添加編輯框控件。第十一步,在[MFCClassWizard]對(duì)話框中,單擊[MemberVariables]選項(xiàng)卡,為編輯框和串行口選擇關(guān)聯(lián)變量m_strRXData和m_ctrlComm,單擊[OK]按鈕。第十二步,在[OnOnCommMscomm1()]函數(shù)中添加代碼,代碼如下:voidCTem_conDlg::OnOnCommMscomm1(){ m_strRXData="";//每次進(jìn)入則將編輯框內(nèi)容清空等待顯示新的數(shù)據(jù) VARIANTvariant_inp; COleSafeArraysafearray_inp; LONGlen,k; BYTErxdata[2048]; CStringstrtemp; if(m_ctrlComm.GetCommEvent()==2) {variant_inp=m_ctrlComm.GetInput(); safearray_inp=variant_inp; len=safearray_inp.GetOneDimSize(); for(k=0;k<len;k++) safearray_inp.GetElement(&k,rxdata+k); for(k=0;k<len;k++) { BYTEbt=*(char*)(rxdata+k); strtemp.Format("%c",bt); m_strRXData+=strtemp; } } UpdateData(FALSE);}第十三步,在[OnInitDialog()]函數(shù)中添加代碼,具體代碼如下: if(m_ctrlComm.GetPortOpen()) m_ctrlComm.SetPortOpen(FALSE); m_ctrlComm.SetCommPort(5); if(!m_ctrlComm.GetPortOpen()) m_ctrlComm.SetPortOpen(TRUE); else AfxMessageBox("cannotopenserialport"); m_ctrlComm.SetSettings("9600,n,8,1"); m_ctrlComm.SetInputMode(1); m_ctrlComm.SetRThreshold(1); m_ctrlComm.SetInputLen(0); m_ctrlComm.GetInput(); returnTRUE;//returnTRUEunlessyousetthefocustoacontrol第十四步,單擊窗口上方工具欄上的!按鈕,編譯并運(yùn)行,彈出對(duì)話框,用串行口線連接TX—1C試驗(yàn)板和計(jì)算機(jī),關(guān)閉其他的串行口軟件,即可在編輯框中顯示出溫度。試驗(yàn)結(jié)果見圖5.7。圖5.7試驗(yàn)結(jié)果結(jié)束語為期半年多的畢業(yè)設(shè)計(jì)即將結(jié)束了,在這段時(shí)間里我在同學(xué)和老師的扶植下駕馭了PC機(jī)與單片機(jī)間的串口通信技術(shù)。畢業(yè)設(shè)計(jì)作為綜合性的設(shè)計(jì),它不同于以前教學(xué)中的試驗(yàn),課程設(shè)計(jì)等實(shí)踐環(huán)節(jié)。以前的所做的一些設(shè)計(jì)主要是依據(jù)相關(guān)的課本及老師所給資料去完成的,有確定的參照性,所以相對(duì)而言比較簡(jiǎn)單,不能完全達(dá)到熬煉自己動(dòng)手實(shí)力的目的。而畢業(yè)設(shè)計(jì)則是對(duì)我們大學(xué)四年所學(xué)知識(shí)的一個(gè)綜合的訓(xùn)練及考核,是對(duì)所學(xué)知識(shí)的應(yīng)用實(shí)力和大學(xué)所學(xué)理論知識(shí)對(duì)實(shí)踐技能相結(jié)合的全面的檢驗(yàn)。并對(duì)我們?nèi)绾我罁?jù)要做的課題對(duì)現(xiàn)有的資料進(jìn)行理解和運(yùn)用的實(shí)力的考核。真正做到了理論聯(lián)系實(shí)際,把以前所學(xué)的知識(shí)綜合貫穿進(jìn)行實(shí)踐,并在實(shí)踐中不斷學(xué)習(xí)和自我完善。從剛確定畢業(yè)設(shè)計(jì)課題以來,我首先是查找一些相關(guān)的書籍及資料,然后分析設(shè)計(jì),并依據(jù)實(shí)際狀況擬定設(shè)計(jì)方案,從而達(dá)到優(yōu)化方案。對(duì)于硬件電路,由于單片機(jī)串口通信技術(shù)已經(jīng)特別成熟,所以我在書上找到了現(xiàn)成的電路,我沒有親自去焊硬件電路,而是買了一塊做好的板子,這就省去了一部分時(shí)間,最難的是調(diào)試了,但在老師和同學(xué)的扶植下,完成的設(shè)計(jì)達(dá)到了預(yù)定的要求。同時(shí),通過這次畢業(yè)設(shè)計(jì),我們?cè)诟鱾€(gè)方面都有了很大的提高,特殊是在理論和實(shí)踐結(jié)合方面使我們受益匪淺,使大學(xué)里學(xué)習(xí)的理論知識(shí)在根本上得到一次最完整的實(shí)踐和提高。也為我即將面臨的探討生學(xué)習(xí)奠定了很好的基礎(chǔ)。同時(shí),在本次畢業(yè)設(shè)計(jì)中深深相識(shí)到自己的各個(gè)方面的不足之處,本著提高動(dòng)手實(shí)力以及檢測(cè)四年所學(xué)知識(shí)的目的,我嚴(yán)格要求自己,每一環(huán)節(jié)都細(xì)致對(duì)待,定期向知道老師報(bào)告進(jìn)展?fàn)顩r和請(qǐng)教不懂的地方,得以完成任務(wù)。在以后的工作中,我們必需進(jìn)一步深化在實(shí)踐中去豐富理論,完善知識(shí)結(jié)構(gòu)。由于環(huán)境條件的影響,理論與實(shí)踐還是有確定的差距,這也要求我們?cè)趯?shí)踐中留意檢驗(yàn)的積累致謝歷時(shí)將近半年的時(shí)間最終將這篇論文寫完,在論文的寫作過程中遇到了多數(shù)的困難和障礙,都在同學(xué)和老師的扶植下度過了。尤其要?jiǎng)×腋兄x我的論文指導(dǎo)老師—梅中輝老師,他對(duì)我進(jìn)行了無私的指導(dǎo)和扶植,不厭其煩的扶植我進(jìn)行論文的修改和改進(jìn)。另外,在校圖書館查找資料的時(shí)候,圖書館的老師也給我供應(yīng)了很多方面的支持與扶植。在此向扶植和指導(dǎo)過我的各位老師表示最中心的感謝!感謝這篇論文所涉及到的各位學(xué)者。本文引用了數(shù)位學(xué)者的探討文獻(xiàn),假如沒有各位學(xué)者的探討成果的扶植和啟發(fā),我將很難完成本篇論文的寫作。感謝我的同學(xué)和摯友,在我寫論文的過程中賜予我了很多你問素材,還在論文的撰寫和排版燈過程中供應(yīng)熱忱的扶植。由于我的學(xué)術(shù)水平有限,所寫論文難免有不足之處,懇請(qǐng)各位老師和學(xué)友指責(zé)和指正!本課題在選題及探討過程中得到梅中輝老師的悉心指導(dǎo)。梅老師多次詢問探討進(jìn)程,并為我指引迷津,扶植我開拓探討思路,細(xì)心點(diǎn)撥,熱忱激勵(lì)。梅老師一絲不茍的作風(fēng),嚴(yán)謹(jǐn)求實(shí)的看法,踏踏實(shí)實(shí)的精神,不僅授我以文,而且教我做人,雖歷時(shí)三載,卻給以終生受益無窮之道。對(duì)梅老師的感謝之情是無法用言語表達(dá)的。參考文獻(xiàn)[1]李江全聶晶等.單片機(jī)串口通信及測(cè)控應(yīng)用實(shí)戰(zhàn)詳解.北京:人民郵電出版社,2014[2]郭天祥.51單片機(jī)C語言教程—入門,提高,開發(fā),拓展全攻略.北京:電子工業(yè)出版社,2009.[3]王爽,王鵬.
單片機(jī)與PC機(jī)通訊.
微處理器,2007(4):32-33.[4]李朝青.PC機(jī)及單片機(jī)數(shù)據(jù)通信技術(shù).北京航空航天出版社.2000.[5]盧超.單片機(jī)與PC機(jī)的通信設(shè)計(jì).工礦自動(dòng)化.2007(5):116-117.[6]范逸之.RS-232/485串行通信.清華大學(xué)出版社.2002.[7]范逸之.C++Builder與RS-232串行通信限制.
清華大學(xué)出版社.2003.[8]UniversalSerialBusMassStorageClassSpecificationOverview,Revision12,2003[9]Compaq,Intel,Microsoft,UniversalSerialBusSpecificationRevision1.1,1998.[10]TheparalleloperationcontrolofamodularACtoDCconverterviaserialcommunicationbus,IEEJTransElecElectronEng,2012-11-28[11]TheserialcommunicationbasedonmultithreadingtechniqueofWindows,WuhanUniversityJournalofNaturalSciences,2000-09-15[12]AccessingStructureofMegacontrolTypeRTUUnits,JournalofComputerScienceandControlSystems,2008-06-15[13]ASchemeforSerialCommunicationsAmongSmallComputers,InstrumentationScience&Technology,1981-06-15[14]Precisiontemperaturemeasurementsystem,JournalofComputerScienceandControlSystems,2009-06-15[15]Designofamicro-UARTforSoCapplication,ComputersandElectricalEngineering,2004-06-15[16]AccessingStructureofMegacontrolTypeRTUUnits,JournalofComputerScienceandControlSystems,2008-06-15[17]Bitbybit:WhyuseserialcommunicationsControlEngineering,2009-01-01附錄A單片機(jī)采集溫度數(shù)據(jù)和發(fā)送數(shù)據(jù)的程序代碼:#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitDS=P2^2;//defineinterface定義DS18B20接口uinttemp;//variableoftemperatureucharflag1;//signoftheresultpositiveornegativesbitdula=P2^6;sbitwela=P2^7;unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//不帶小數(shù)點(diǎn)編碼。unsignedcharcodetable1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//帶小數(shù)點(diǎn)編碼。voiddelay(uintcount)//延時(shí)子函數(shù){uinti;while(count){i=200;while(i>0)i--;count--;}}///////功能:串口初始化,波特率9600,方式1///////voidInit_Com(void){TMOD=0x20;PCON=0x00;SCON=0x50;TH1=0xFd;TL1=0xFd;TR1=1;}voiddsreset(void)//發(fā)送初始化及復(fù)位信號(hào){uinti;//DS18B20初始化DS=0;i=103;while(i>0)i--;DS=1;i=4;while(i>0)i--;}bittmpreadbit(void)//readabit讀一位{uinti;bitdat;DS=0;i++;//i++fordelay小延時(shí)一下DS=1;i++;i++;dat=DS;i=8;while(i>0)i--;return(dat);}uchartmpread(void)//readabytedate讀一個(gè)字節(jié){uchari,j,dat;dat=0;for(i=1;i<=8;i++){j=tmpreadbit();dat=(j<<7)|(dat>>1);//讀出的數(shù)據(jù)最低位在最前面,這樣剛好//一個(gè)字節(jié)在DAT里}return(dat);//將一個(gè)字節(jié)數(shù)據(jù)返回}voidtmpwritebyte(uchardat)//writeabytetods18b20{//寫一個(gè)字節(jié)到DS18B20里uinti;ucharj;bittestb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb)//write1寫1部分{DS=0;i++;i++;DS=1;i=8;while(i>0)i--;}else{DS=0;//write0寫0部分i=8;while(i>0)i--;DS=1;i++;i++;}}voidtmpchange(void)//DS18B20beginchange發(fā)送溫度轉(zhuǎn)換命令{dsreset();//初始化DS18B20delay(1);//延時(shí)tmpwritebyte(0xcc);//跳過序列號(hào)命令tmpwritebyte(0x44);//發(fā)送溫度轉(zhuǎn)換命令}uinttmp()//g
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 陜西藝術(shù)職業(yè)學(xué)院《國際貿(mào)易》2023-2024學(xué)年第一學(xué)期期末試卷
- 種苗繁殖授權(quán)合同范例
- 屋頂拆建合同范例
- 2024至2030年專業(yè)切割機(jī)項(xiàng)目投資價(jià)值分析報(bào)告
- 陜西鐵路工程職業(yè)技術(shù)學(xué)院《聚合物物理化學(xué)原理》2023-2024學(xué)年第一學(xué)期期末試卷
- 關(guān)于房子贈(zèng)與合同范例
- 范例工程工人合同范例
- 門頭玻璃清洗合同范例
- 2024年搪瓷測(cè)厚儀項(xiàng)目可行性研究報(bào)告
- 地皮賣買合同范例
- 醫(yī)院環(huán)境衛(wèi)生整治排查表
- 刑法總論分析研究案例教學(xué)
- 濟(jì)南泉水的故事課件
- 節(jié)水型社會(huì)建設(shè)規(guī)劃編制導(dǎo)則
- 切割鋼絲,簾線濕拉
- 宜都市產(chǎn)業(yè)集群基本情況及產(chǎn)業(yè)鏈
- SF_T 0119-2021 聲像資料鑒定通用規(guī)范_(高清版)
- 汽車機(jī)械識(shí)圖圖期末考試卷
- 冪的運(yùn)算綜合專項(xiàng)練習(xí)50題(共7頁)
- 內(nèi)臟疾病康復(fù) 向云
- 農(nóng)村留守婦女創(chuàng)業(yè)就業(yè)情況調(diào)研報(bào)告
評(píng)論
0/150
提交評(píng)論