




已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
智能儀器設(shè)計(jì)課程設(shè)計(jì)報(bào)告 采用RS 485標(biāo)準(zhǔn)的主從式多機(jī)系統(tǒng)設(shè)計(jì)學(xué)生姓名: 王* 學(xué) 號(hào): * 班 級(jí): * 任課教師: * 成 績(jī): 1、 設(shè)計(jì)要求 a) 系統(tǒng)基本結(jié)構(gòu):1個(gè)51系列單片機(jī)主機(jī)、2個(gè)51系列單片機(jī)從機(jī)(從機(jī)1 和從機(jī)2)、采用RS 485組成主從式多機(jī)系統(tǒng); b) 系統(tǒng)基本功能:在主機(jī)鍵盤上按“1”鍵,從機(jī)1的LED數(shù)碼顯示器上顯示“1”,此后從機(jī)1鍵盤上每按下1個(gè)數(shù)字鍵,主機(jī)LED數(shù)碼顯示器上能顯示對(duì)應(yīng)的數(shù)字,當(dāng)從機(jī)1鍵盤上按下“0”鍵時(shí),此次通信結(jié)束,從機(jī)1鍵盤上再按下任意數(shù)字鍵,主機(jī)不顯示相應(yīng)數(shù)字;在主機(jī)鍵盤上按“2”,從機(jī)2的LED數(shù)碼顯示器上顯示“2”,此后從機(jī)2鍵盤上每按下1個(gè)數(shù)字鍵,主機(jī)LED數(shù)碼顯示器上能顯示對(duì)應(yīng)的數(shù)字,當(dāng)從機(jī)2鍵盤上按下“0”鍵時(shí),此次通信結(jié)束,從機(jī)2鍵盤上按下任意數(shù)字鍵后,主機(jī)不顯示相應(yīng)數(shù)字; c) 選做:從機(jī)1和從機(jī)2可設(shè)計(jì)成相關(guān)物理量的測(cè)量系統(tǒng),當(dāng)主機(jī)呼叫從機(jī)時(shí),從機(jī)能把最新的測(cè)量值發(fā)給主機(jī)。2、 方案論證(1) 系統(tǒng)組成:由三個(gè)51單片機(jī)構(gòu)成主從通信系統(tǒng)(本組使用的芯片型號(hào)是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ù)顯示可簡(jiǎn)單的使用數(shù)碼管顯示。 圖 1 系統(tǒng)結(jié)構(gòu)圖 (2)串口模式分析:51單片機(jī)串口的2/3模式下是作為11位異步通信用,8位數(shù)據(jù)位后的第九位是可編程位SCON.3,主機(jī)可以對(duì)此位進(jìn)行0或1賦值,進(jìn)行地址信息和數(shù)據(jù)信息的區(qū)分,通常賦為1表示地址信息,為0表示數(shù)據(jù)信息;51單片機(jī)的串行口控制寄存器SCON的SM2位是專門用來使通信接口具有識(shí)別功能的多機(jī)控制位,在串行口以方式2/3接收時(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)志,接收信息被棄。若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)的地址)。對(duì)于接收到的地址與本機(jī)地址相符的從機(jī),通過程序?qū)⑵銼M2置為0,這樣主機(jī)之后發(fā)送的其他數(shù)據(jù)信息將被選中的從機(jī)接收到,主機(jī)與所選的從機(jī)之間通信,主機(jī)可向從機(jī)發(fā)送命令數(shù)據(jù)或從機(jī)向主機(jī)發(fā)送相關(guān)的測(cè)量結(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所示: 圖 2 MAX485工作電路 其中管腳、DE是收發(fā)器的控制腳,根據(jù)MAX485的邏輯功能表,、DE都置為高電平,則發(fā)送器可工作,接收器不工作; 、DE 都置為低電平,則接收器可工作,發(fā)送器不工作(發(fā)送器和接收器無法同時(shí)工作),所以可用單片機(jī)的io口使能、DE來實(shí)現(xiàn)半雙工通信。51與MAX485的接口示意圖如下: 圖 3 單片機(jī)與MAX485連接示意圖 (3)鍵盤設(shè)計(jì):根據(jù)題意,主機(jī)由于只需使用到兩個(gè)按鍵,所以主機(jī)的按鍵可使用獨(dú)立式按鍵方式,即兩個(gè)按鍵接入單片機(jī)的兩個(gè)io口,通過判斷高低電平判斷哪個(gè)鍵被按下;從機(jī)則需要使用矩陣式鍵盤,本組使用44的矩陣式鍵盤,并用線反轉(zhuǎn)法進(jìn)行鍵值掃描。(4) 顯示單元:由于需要顯示的信息比較簡(jiǎn)單,所以可以簡(jiǎn)單的使用LED數(shù)碼管來顯示,本組使用的單片機(jī)開發(fā)板上集成了4個(gè)數(shù)碼管,共用一個(gè)譯碼器,可以通過循環(huán)點(diǎn)亮的方式顯示多個(gè)數(shù)字。3、 硬件設(shè)計(jì) 主機(jī)和從機(jī)通過MAX485連接的電氣圖:圖 4 主機(jī)和從機(jī)通過MAX485連接的電氣圖主機(jī)和按鍵、數(shù)碼管的連接圖從機(jī)和鍵盤、數(shù)碼管的連接圖圖 5 主機(jī)和按鍵、數(shù)碼管的連接圖圖 6 從機(jī)和鍵盤、數(shù)碼管的連接圖4、 軟件設(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 程序代碼:#define uchar unsigned char sbit P2_0 = P20; /用來點(diǎn)亮數(shù)碼管1sbit P2_1 = P21; /用來點(diǎn)亮數(shù)碼管2sbit P2_2 = P22; /用來點(diǎn)亮數(shù)碼管3sbit P2_3 = P23; /用來點(diǎn)亮數(shù)碼管4uchar code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, 0xf8,0x80,0x90 ;/液晶查詢表void display_1(unsigned int number);void display_2(unsigned int number);void display_3(unsigned int number);void display_4(unsigned int number);/*函數(shù)名:void display_1參數(shù):(unsigned int number)作用:根據(jù)輸入的數(shù)字點(diǎn)亮顯示數(shù)碼管1*/void display_1(unsigned int number) P0=tablenumber; P2_0 = 0; /*函數(shù)名:void display_2參數(shù):(unsigned int number)作用:根據(jù)輸入的數(shù)字點(diǎn)亮顯示數(shù)碼管2*/void display_2(unsigned int number) P0=tablenumber; P2_1 = 0; /*函數(shù)名:void display_3參數(shù):(unsigned int number)作用:根據(jù)輸入的數(shù)字點(diǎn)亮顯示數(shù)碼管3*/void display_3(unsigned int number) P0=tablenumber; P2_2 = 0;/*函數(shù)名:void display_4參數(shù):(unsigned int number)作用:根據(jù)輸入的數(shù)字點(diǎn)亮顯示數(shù)碼管4*/void display_4(unsigned int number) P0=tablenumber; 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)法掃鍵流程圖: 圖 7 鍵盤子程序流程圖 掃描鍵盤子程序代碼:#includeint hang;/定義行號(hào)int lie; /定義列號(hào)unsigned int Key_Val=1;/保存鍵值unsigned int keymap = 1,2,3,0,4,5,6,0,7,8,9,0,0,0,0,0;/設(shè)置鍵盤邏輯鍵值int KeyScan();/掃鍵子函數(shù)void Delay(); /延時(shí)/* key_Val 對(duì)應(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)*/void Delay()/延時(shí)子函數(shù)long i;for(i=1000;i0;i-);int KeyScan()/掃鍵子函數(shù)P1=0xF0;/列輸出全0;if(P1&0xF0)!=0xF0)/掃描行,如果不全為0,則進(jìn)入switch(P1)/獲得行號(hào) case 0x70: hang=1; break; case 0xB0: hang=2; break; case 0xD0: hang=3; break; case 0xE0: hang=4; break; default: break;Delay();/延時(shí)去抖動(dòng)P1=0x0F;/行輸出全0if(P1&0x0F)!=0x0F)/掃描列,如果不全為0,則確認(rèn)按鍵按下 switch(P1)/獲得列號(hào) case 0x07: lie=1; break; case 0x0B: lie=2; break; case 0x0D: lie=3; break; case 0x0E: lie=4; break; default: break; return 1;/掃描到按鍵按下,則返回1else return 0;/未掃描到按鍵按下,返回0主機(jī)程序: 在主機(jī)主程序中首先進(jìn)行串口的配置,需要將串口置為模式3;然后程序一直循環(huán)查詢是否有按鍵按下(K1或K2),如果有按鍵按下,則進(jìn)入與從機(jī)通信的子程序。 主機(jī)主程序流程圖: 圖 8 主機(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收到請(qǐng)求會(huì)發(fā)回本機(jī)的地址信號(hào)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)。 圖 9 主機(jī)與子程序通信流程圖主機(jī)程序代碼:/主機(jī)程序#include#include#includesbit RE = P32;/MAX485的控制腳RE和DEsbit DE = P33;/發(fā)送時(shí)置高,接收時(shí)置地unsigned char temp=0xff;sbit KEY1=P24; /P2.4,P2.5是兩個(gè)按鍵sbit KEY2=P25; /延時(shí)1ms函數(shù)void delay_1ms(unsigned int t) unsigned int x,y; for(x=t;x0;x-) for(y=110;y0;y-);/串口初始化函數(shù)void serial_init() TMOD=0x20; /定時(shí)器1工作于方式2 TH1=0xfd; TL1=0xfd; /波特率為9600 PCON=0; SCON=0xd0; /串口工作于方式3 TR1=1; /開啟定時(shí)器 TI=0; RI=0;/向指定從機(jī)地址發(fā)送數(shù)據(jù)/和從機(jī)通信void ADDR_data(unsigned addr) int j=0; while(temp!=addr) /主機(jī)等待從機(jī)返回其地址作為應(yīng)答信號(hào) 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)答信號(hào) while(!RI); temp=SBUF;/從機(jī)會(huì)發(fā)送自己的地址作為回應(yīng) RI=0; /選通從機(jī)后跳出循環(huán) display_1(addr);/接通后在數(shù)碼管上顯示1或2 /主機(jī)循環(huán)接收從機(jī)發(fā)過來的數(shù)字信號(hào)并在數(shù)碼管上顯示,直到接收到0 do RE=0; /接收狀態(tài) DE=0; RI=0; while(!RI); temp=SBUF; RI=0; display_1(temp);/在數(shù)碼管上顯示數(shù)字 while(temp!=0); /接收到0,表示此次通信結(jié)束,數(shù)碼管閃爍表示 for(j=0;j50;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; void main() 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ǐng)求,如果接收緩存區(qū)有數(shù)據(jù),判斷是否等于本機(jī)地址,等于則表明有主機(jī)請(qǐng)求,則再向主機(jī)發(fā)送本機(jī)地址作為回應(yīng);然后從機(jī)進(jìn)入讀鍵子程序,循環(huán)讀出鍵值并將鍵值發(fā)送到主機(jī),直到有0鍵按下,從機(jī)將0發(fā)送后退出子程序,即結(jié)束此次通信,重新開始主循環(huán)。注意由于單片機(jī)外接MAX485進(jìn)行通信,所以在發(fā)送或接收前需要改變控制腳、DE改變MAX485的收發(fā)狀態(tài)。從機(jī)主程序流程圖: 圖 10 從機(jī)程序流程圖從機(jī)程序代碼(從機(jī)1):/從機(jī)1程序#include#include#include#include#define addr 0x01/從機(jī)2的地址sbit RE = P32;/MAX485的控制腳RE和DEsbit DE = P33;/發(fā)送時(shí)置高,接收時(shí)置地unsigned char aa=0xff;/主機(jī)與從機(jī)之間通信標(biāo)志/延時(shí)1ms函數(shù)void delay_1ms(unsigned int t) unsigned int x,y; for(x=t;x0;x-) for(y=110;y0;y-);/串口初始化函數(shù)void serial_init() TMOD=0x20; /定時(shí)器1工作于方式2 TH1=0xfd; TL1=0xfd; /波特率為9600 PCON=0; SCON=0xd0; /串口工作于方式3 TR1=1; /開啟定時(shí)器 TI=0; RI=0;void main() unsigned int Key; unsigned int j; RE=0; DE=0;/初始為接收狀態(tài) serial_init(); while(1) SM2=1; /接收地址幀 while(aa!=addr) /從機(jī)等待主機(jī)請(qǐng)求自己的地址 RE=0; /接收狀態(tài) DE=0; RI=0; while(!RI); aa=SBUF; RI=0; RE=1; /發(fā)送狀態(tài) DE=1; TI=0; /一旦被請(qǐng)求,從機(jī)返回自己地址作為應(yīng)答,等待接收數(shù)據(jù) TB8=0; SBUF=addr; while(!TI); TI=0; S
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全實(shí)務(wù)試題及答案
- 金融衍生品市場(chǎng)2025年創(chuàng)新產(chǎn)品開發(fā)與風(fēng)險(xiǎn)管理體系研究報(bào)告
- 直播平臺(tái)內(nèi)容監(jiān)管與自律發(fā)展對(duì)直播行業(yè)監(jiān)管的創(chuàng)新報(bào)告
- 綠色建筑認(rèn)證體系在綠色生態(tài)園區(qū)建設(shè)的應(yīng)用與發(fā)展策略報(bào)告
- 中國(guó)醫(yī)藥電子課件
- 消毒供應(yīng)中心管理規(guī)范
- 中國(guó)初期的政治建設(shè)課件
- 安保行業(yè)安全培訓(xùn)
- 蛇傷護(hù)理個(gè)案
- 做負(fù)責(zé)任的公民心理健康
- 小講課闌尾炎病人的護(hù)理護(hù)理病歷臨床病案
- 2024年電阻陶瓷基體項(xiàng)目可行性研究報(bào)告
- 大國(guó)兵器學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 24秋國(guó)家開放大學(xué)《馬克思主義基本原理》專題測(cè)試參考答案
- 苗木采購(gòu)施工方案
- 【大單元】1《北京的春節(jié)》第2課時(shí) 教學(xué)設(shè)計(jì)
- 教育現(xiàn)象及問題分析
- 2024年新華東師大版七年級(jí)上冊(cè)數(shù)學(xué)全冊(cè)教案(新版教材)
- 2024年一級(jí)健康管理師考前沖刺必會(huì)試題庫(kù)300題(含詳解)
- 【8歷期末】安徽省合肥市包河區(qū)2022-2023學(xué)年八年級(jí)下學(xué)期期末歷史試題(含解析)
- 八年級(jí)歷史下冊(cè)核心知識(shí)點(diǎn)、難點(diǎn)、重點(diǎn)總結(jié)
評(píng)論
0/150
提交評(píng)論