智能儀器課程設(shè)計(jì)報(bào)告_第1頁
智能儀器課程設(shè)計(jì)報(bào)告_第2頁
智能儀器課程設(shè)計(jì)報(bào)告_第3頁
智能儀器課程設(shè)計(jì)報(bào)告_第4頁
智能儀器課程設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

智能儀器設(shè)計(jì)課程設(shè)計(jì)報(bào)告―――采用RS485標(biāo)準(zhǔn)的主從式多機(jī)系統(tǒng)設(shè)計(jì)學(xué)生姓名:王**學(xué)號:*********班級:********任課教師:***成績:設(shè)計(jì)要求a)系統(tǒng)根本構(gòu)造:1個(gè)51系列單片機(jī)主機(jī)、2個(gè)51系列單片機(jī)從機(jī)〔從機(jī)1和從機(jī)2〕、采用RS485組成主從式多機(jī)系統(tǒng);b)系統(tǒng)根本功能:在主機(jī)鍵盤上按“1〞鍵,從機(jī)1的LED數(shù)碼顯示器上顯示“1〞,此后從機(jī)1鍵盤上每按下1個(gè)數(shù)字鍵,主機(jī)LED數(shù)碼顯示器上能顯示對應(yīng)的數(shù)字,當(dāng)從機(jī)1鍵盤上按下“0〞鍵時(shí),此次通信完畢,從機(jī)1鍵盤上再按下任意數(shù)字鍵,主機(jī)不顯示相應(yīng)數(shù)字;在主機(jī)鍵盤上按“2〞,從機(jī)2的LED數(shù)碼顯示器上顯示“2〞,此后從機(jī)2鍵盤上每按下1個(gè)數(shù)字鍵,主機(jī)LED數(shù)碼顯示器上能顯示對應(yīng)的數(shù)字,當(dāng)從機(jī)2鍵盤上按下“0〞鍵時(shí),此次通信完畢,從機(jī)2鍵盤上按下任意數(shù)字鍵后,主機(jī)不顯示相應(yīng)數(shù)字;c)選做:從機(jī)1和從機(jī)2可設(shè)計(jì)成相關(guān)物理量的測量系統(tǒng),當(dāng)主機(jī)呼叫從機(jī)時(shí),從機(jī)能把最新的測量值發(fā)給主機(jī)。方案論證系統(tǒng)組成:由三個(gè)51單片機(jī)構(gòu)成主從通信系統(tǒng)〔本組使用的芯片型號是STC89C52,其功能是一致的〕,每個(gè)單片機(jī)搭配LED數(shù)碼管顯示器和鍵盤;通信采用RS-485標(biāo)準(zhǔn),可使用MAX485芯片作為通信收發(fā)器,單片機(jī)控制MAX485的使能端進(jìn)展發(fā)送和承受邏輯控制;單主機(jī)多從機(jī)的通訊系統(tǒng)需要區(qū)分地址信息和數(shù)據(jù)信息,可利用51串口模式中的模式2進(jìn)展通信,修改主機(jī)的SCON.3狀態(tài)說明主機(jī)發(fā)送的是否是地址信息,修改某臺(tái)從機(jī)的SM2狀態(tài)來建立和主機(jī)的唯一通信;數(shù)據(jù)輸入使用鍵盤輸入,數(shù)據(jù)顯示可簡單的使用數(shù)碼管顯示。圖SEQ圖\*ARABIC1系統(tǒng)構(gòu)造圖〔2〕串口模式分析:51單片機(jī)串口的2/3模式下是作為11位異步通信用,8位數(shù)據(jù)位后的第九位是可編程位SCON.3,主機(jī)可以對此位進(jìn)展0或1賦值,進(jìn)展地址信息和數(shù)據(jù)信息的區(qū)分,通常賦為1表示地址信息,為0表示數(shù)據(jù)信息;51單片機(jī)的串行口控制存放器SCON的SM2位是專門用來使通信接口具有識別功能的多機(jī)控制位,在串行口以方式2/3接收時(shí),假設(shè)SM2=1,此時(shí)出現(xiàn)兩種情況:第一,接收到的第九位為1〔單片機(jī)接收時(shí)可編程位進(jìn)入SCON.2〕,則前8位數(shù)據(jù)裝入SBUF,并置RI為1,產(chǎn)生中斷標(biāo)志;第二,接收到的第九位為0,則不產(chǎn)生中斷標(biāo)志,接收信息被棄。假設(shè)SM2=0,則接收到的第九位無論為0還是1,RI均為1,產(chǎn)生中斷標(biāo)志,接收到的前8位數(shù)據(jù)裝入SBUF。所以多機(jī)通信可按下述過程進(jìn)展:①參與通信的所有從機(jī)的SM2位置1,即從機(jī)處于只接收地址幀的狀態(tài);②主機(jī)發(fā)送一幀地址信息,包括8位地址及第九位地址/數(shù)據(jù)標(biāo)志位〔該位應(yīng)為1,表示該幀信息的前8位為地址〕;③由于從機(jī)的SM2位已置1,故主機(jī)發(fā)送的地址信息被所有從機(jī)收到,各從機(jī)鑒別接收到的地址信息是否與本機(jī)地址一樣〔每個(gè)從機(jī)已規(guī)定其相應(yīng)的地址〕。對于接收到的地址與本機(jī)地址相符的從機(jī),通過程序?qū)⑵銼M2置為0,這樣主機(jī)之后發(fā)送的其他數(shù)據(jù)信息將被選中的從機(jī)接收到,主機(jī)與所選的從機(jī)之間通信,主機(jī)可向從機(jī)發(fā)送命令數(shù)據(jù)或從機(jī)向主機(jī)發(fā)送相關(guān)的測量結(jié)果等。由于未選中的從機(jī)的SM2仍為1,故未選中的從機(jī)將不理會(huì)主機(jī)與選中從機(jī)之間傳送的數(shù)據(jù)信息〔因?yàn)檫@些信息的第九位均為0〕,直到主機(jī)發(fā)送新的地址幀為止。MAX485芯片的使用:MAX485是MAXIM公司推出的專門用于RS-485標(biāo)準(zhǔn)通信的接口芯片,它是半雙工工作的收發(fā)器,其典型工作電路如圖2所示:圖SEQ圖\*ARABIC2MAX485工作電路其中管腳、DE是收發(fā)器的控制腳,根據(jù)MAX485的邏輯功能表,、DE都置為高電平,則發(fā)送器可工作,接收器不工作;、DE都置為低電平,則接收器可工作,發(fā)送器不工作〔發(fā)送器和接收器無法同時(shí)工作〕,所以可用單片機(jī)的io口使能、DE來實(shí)現(xiàn)半雙工通信。51與MAX485的接口示意圖如下:圖SEQ圖\*ARABIC3單片機(jī)與MAX485連接示意圖〔3〕鍵盤設(shè)計(jì):根據(jù)題意,主機(jī)由于只需使用到兩個(gè)按鍵,所以主機(jī)的按鍵可使用獨(dú)立式按鍵方式,即兩個(gè)按鍵接入單片機(jī)的兩個(gè)io口,通過判斷上下電平判斷哪個(gè)鍵被按下;從機(jī)則需要使用矩陣式鍵盤,本組使用4×4的矩陣式鍵盤,并用線反轉(zhuǎn)法進(jìn)展鍵值掃描。顯示單元:由于需要顯示的信息比擬簡單,所以可以簡單的使用LED數(shù)碼管來顯示,本組使用的單片機(jī)開發(fā)板上集成了4個(gè)數(shù)碼管,共用一個(gè)譯碼器,可以通過循環(huán)點(diǎn)亮的方式顯示多個(gè)數(shù)字。硬件設(shè)計(jì)①主機(jī)和從機(jī)通過MAX485連接的電氣圖:圖SEQ圖\*ARABIC4主機(jī)和從機(jī)通過MAX485連接的電氣圖②主機(jī)和按鍵、數(shù)碼管的連接圖③從機(jī)和鍵盤、數(shù)碼管的連接圖圖SEQ圖\*ARABIC5主機(jī)和按鍵、數(shù)碼管的連接圖圖SEQ圖\*ARABIC6從機(jī)和鍵盤、數(shù)碼管的連接圖軟件設(shè)計(jì)①led數(shù)碼管顯示子程序:單片機(jī)開發(fā)板上的LED數(shù)碼管是共陽極連接方式,數(shù)碼管的a-h腳分別連到P0.0-P0.7,四個(gè)LED的控制角分別接到P2.0-P2.3;在數(shù)碼管上需要顯示的數(shù)字或字符的共陽極代碼如下:顯示內(nèi)容共陽極代碼顯示內(nèi)容共陽極代碼顯示內(nèi)容共陽極代碼顯示內(nèi)容共陽極代碼顯示內(nèi)容共陽極代碼0C0H3B0H682H96FHdA1H1F9H499H7F8HE79H2A4H592H880HNC8H程序代碼:#defineucharunsignedcharsbitP2_0=P2^0;//用來點(diǎn)亮數(shù)碼管1sbitP2_1=P2^1;//用來點(diǎn)亮數(shù)碼管2sbitP2_2=P2^2;//用來點(diǎn)亮數(shù)碼管3sbitP2_3=P2^3;//用來點(diǎn)亮數(shù)碼管4ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//液晶查詢表voiddisplay_1(unsignedintnumber);voiddisplay_2(unsignedintnumber);voiddisplay_3(unsignedintnumber);voiddisplay_4(unsignedintnumber);函數(shù)名:voiddisplay_1參數(shù):(unsignedintnumber)作用:根據(jù)輸入的數(shù)字點(diǎn)亮顯示數(shù)碼管1voiddisplay_1(unsignedintnumber){P0=table[number];P2_0=0;函數(shù)名:voiddisplay_2參數(shù):(unsignedintnumber)作用:根據(jù)輸入的數(shù)字點(diǎn)亮顯示數(shù)碼管2voiddisplay_2(unsignedintnumber){P0=table[number];P2_1=0;函數(shù)名:voiddisplay_3參數(shù):(unsignedintnumber)作用:根據(jù)輸入的數(shù)字點(diǎn)亮顯示數(shù)碼管3voiddisplay_3(unsignedintnumber){P0=table[number];P2_2=0;函數(shù)名:voiddisplay_4參數(shù):(unsignedintnumber)作用:根據(jù)輸入的數(shù)字點(diǎn)亮顯示數(shù)碼管4voiddisplay_4(unsignedintnumber){P0=table[number];P2_3=0;②鍵盤掃描子程序使用線反轉(zhuǎn)法掃描鍵盤,矩陣鍵盤的1-4行接入P1.7-P1.4,1-4列接入P1.3-P1.0,同時(shí)P1.3-P1.0接上拉電阻,線反轉(zhuǎn)法的步驟:1、將列線作為輸出線,行線作為輸入線,置輸出線全部為0,此時(shí)行線中呈低電平0的為按鍵所在行,如果全部都不是0,則沒有按鍵按下;2、將第一步反過來,即將行線作為輸出線,列線作為輸入線,置輸出線全部為0,此時(shí)列線中呈低電平0的為按鍵所在列,至此便確定了按鍵的位置,可根據(jù)行列參數(shù)查詢實(shí)現(xiàn)寫好的鍵值表,獲取鍵值。線反轉(zhuǎn)法掃鍵流程圖:圖SEQ圖\*ARABIC7鍵盤子程序流程圖掃描鍵盤子程序代碼:#include<stdio.h>inthang;//定義行號intlie;//定義列號unsignedintKey_Val=1;//保存鍵值unsignedintkeymap[]={1,2,3,0,4,5,6,0,7,8,9,0,0,0,0,0};//設(shè)置鍵盤邏輯鍵值 intKeyScan();//掃鍵子函數(shù)voidDelay();//延時(shí)key_Val對應(yīng)鍵值列:[p13][p12][p11][p10]行:[p17]→1(1)2(2)3(3)4(A)[p16]→5(4)6(5)7(6)8(B)[p15]→9(7)10(8)11(9)12(C)[p14]→13(*)14(0)15(#)16(D)voidDelay()//延時(shí)子函數(shù)longi;for(i=1000;i>0;i--);intKeyScan()//掃鍵子函數(shù)P1=0xF0;//列輸出全0;if((P1&0xF0)!=0xF0)//掃描行,如果不全為0,則進(jìn)入switch(P1)//獲得行號case0x70:hang=1; break;case0xB0:hang=2; break;case0xD0:hang=3; break;case0xE0:hang=4; break;default: break;Delay();//延時(shí)去抖動(dòng)P1=0x0F;//行輸出全0if((P1&0x0F)!=0x0F)//掃描列,如果不全為0,則確認(rèn)按鍵按下switch(P1)//獲得列號case0x07:lie=1; break;case0x0B:lie=2; break;case0x0D:lie=3; break;case0x0E:lie=4; break;default: break;return1;//掃描到按鍵按下,則返回1elsereturn0;//未掃描到按鍵按下,返回0③主機(jī)程序:在主機(jī)主程序中首先進(jìn)展串口的配置,需要將串口置為模式3;然后程序一直循環(huán)查詢是否有按鍵按下〔K1或K2〕,如果有按鍵按下,則進(jìn)入與從機(jī)通信的子程序。主機(jī)主程序流程圖:圖SEQ圖\*ARABIC8主機(jī)主程序流程圖主機(jī)與從機(jī)通信的子程序是主機(jī)程序的最關(guān)鍵局部,負(fù)責(zé)主機(jī)與從機(jī)建立聯(lián)系、數(shù)據(jù)通信和終止連接的任務(wù)。以按下按鍵K1為例,按下K1表示應(yīng)與從機(jī)1通信,程序進(jìn)入通信子程序,首先主機(jī)向所有從機(jī)發(fā)送從機(jī)1的地址“0x01〞,然后主機(jī)等待從機(jī)1的回應(yīng)〔從機(jī)1收到請求會(huì)發(fā)回本機(jī)的地址信號0x01作為回應(yīng)〕,接收到回應(yīng)則繼續(xù)進(jìn)展通信;然后主機(jī)一直處于接收狀態(tài),循環(huán)接收從機(jī)發(fā)送的數(shù)據(jù),并將數(shù)據(jù)通過數(shù)碼管顯示,直到接收到數(shù)據(jù)0,則退出子程序;注意由于單片機(jī)外接MAX485進(jìn)展通信,所以在發(fā)送或接收前需要改變控制腳、DE改變MAX485的收發(fā)狀態(tài)。圖SEQ圖\*ARABIC9主機(jī)與子程序通信流程圖主機(jī)程序代碼://主機(jī)程序#include<reg51.h>#include<string.h>#include<ye_jing_xian_shi.h>sbitRE=P3^2; //MAX485的控制腳RE和DEsbitDE=P3^3; //發(fā)送時(shí)置高,接收時(shí)置地unsignedchartemp=0xff;sbitKEY2=P2^5; ////延時(shí)1ms函數(shù)voiddelay_1ms(unsignedintt)unsignedintx,y;for(x=t;x>0;x--)for(y=110;y>0;y--);//串口初始化函數(shù)voidserial_init()TMOD=0x20;//定時(shí)器1工作于方式2TH1=0xfd;TL1=0xfd;//波特率為9600PCON=0;SCON=0xd0;//串口工作于方式3TR1=1;//開啟定時(shí)器TI=0;RI=0;//向指定從機(jī)地址發(fā)送數(shù)據(jù)//和從機(jī)通信voidADDR_data(unsignedaddr)intj=0;while(temp!=addr)//主機(jī)等待從機(jī)返回其地址作為應(yīng)答信號RE=1; //發(fā)送狀態(tài)DE=1;TI=0;//發(fā)送從機(jī)地址TB8=1;//發(fā)送地址幀SBUF=addr;while(!TI);TI=0;RE=0; //接收狀態(tài)DE=0;RI=0; //接收從機(jī)應(yīng)答信號while(!RI);temp=SBUF;//從時(shí)機(jī)發(fā)送自己的地址作為回應(yīng)RI=0;}//選通從機(jī)后跳出循環(huán)display_1(addr);//接通后在數(shù)碼管上顯示1或2//主機(jī)循環(huán)接收從機(jī)發(fā)過來的數(shù)字信號并在數(shù)碼管上顯示,直到接收到0do{RE=0; //接收狀態(tài)DE=0;RI=0;while(!RI);temp=SBUF;RI=0;display_1(temp);//在數(shù)碼管上顯示數(shù)字}while(temp!=0);//接收到0,表示此次通信完畢,數(shù)碼管閃爍表示for(j=0;j<50;j++)display_1(addr); delay_1ms(10); P2_0=1; P0=0x86; P2_1=0; delay_1ms(10);P2_1=1; P0=0xc8; P2_2=0; delay_1ms(10); P2_2=1; P0=0xa1; P2_3=0; delay_1ms(10); P2_3=1;voidmain()RE=1;DE=1;//初始為發(fā)送狀態(tài)serial_init();while(1)if(KEY1==0)delay_1ms(5);//消抖if(KEY1==0)while(!KEY1);ADDR_data(0x01);if(KEY2==0)delay_1ms(5);if(KEY2==0)while(!KEY2);ADDR_data(0x02);RE=1;DE=1;//重置為發(fā)送狀態(tài)④從機(jī)程序:從機(jī)首先進(jìn)展串口初始化,然后處于循環(huán)接收狀態(tài),即等待主機(jī)的請求,如果接收緩存區(qū)有數(shù)據(jù),判斷是否等于本機(jī)地址,等于則說明有主機(jī)請求,則再向主機(jī)發(fā)送本機(jī)地址作為回應(yīng);然后從機(jī)進(jìn)入讀鍵子程序,循環(huán)讀出鍵值并將鍵值發(fā)送到主機(jī),直到有0鍵按下,從機(jī)將0發(fā)送后退出子程序,即完畢此次通信,重新開場主循環(huán)。注意由于單片機(jī)外接MAX485進(jìn)展通信,所以在發(fā)送或接收前需要改變控制腳、DE改變MAX485的收發(fā)狀態(tài)。從機(jī)主程序流程圖:圖SEQ圖\*ARABIC10從機(jī)程序流程圖從機(jī)程序代碼〔從機(jī)1〕://從機(jī)1程序#include<reg51.h>#include<string.h>#include<ye_jing_xian_shi.h>#include<jian_pan.h>#defineaddr0x01//從機(jī)2的地址sbitRE=P3^2; //MAX485的控制腳RE和DEsbitDE=P3^3; //發(fā)送時(shí)置高,接收時(shí)置地unsignedcharaa=0xff;//主機(jī)與從機(jī)之間通信標(biāo)志//延時(shí)1ms函數(shù)voiddelay_1ms(unsignedintt)unsignedintx,y;for(x=t;x>0;x--)for(y=110;y>0;y--);//串口初始化函數(shù)voidserial_init()TMOD=0x20;//定時(shí)器1工作于方式2TH1=0xfd;TL1=0xfd;//波特率為9600PCON=0;SCON=0xd0;//串口工作于方式3TR1=1;//開啟定時(shí)器TI=0;RI=0;voidmain()unsignedintKey;unsignedintj;RE=0;DE=0;//初始為接收狀態(tài)serial_init();while(1)SM2=1;//接收地址幀while(aa!=addr)//從機(jī)等待主機(jī)請求自己的地址RE=0; //接收狀態(tài)DE=0;RI=0;while(!RI);aa=SBUF;RI=0;RE=1; //發(fā)送狀態(tài)DE=1;TI=0;//一旦被請求,從機(jī)返回自己地址作為應(yīng)答,等待接收數(shù)據(jù)TB8=0;SB

溫馨提示

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

評論

0/150

提交評論