微型計算機(jī)課程設(shè)計步進(jìn)電機(jī)遠(yuǎn)程控制系統(tǒng)設(shè)計_第1頁
微型計算機(jī)課程設(shè)計步進(jìn)電機(jī)遠(yuǎn)程控制系統(tǒng)設(shè)計_第2頁
微型計算機(jī)課程設(shè)計步進(jìn)電機(jī)遠(yuǎn)程控制系統(tǒng)設(shè)計_第3頁
微型計算機(jī)課程設(shè)計步進(jìn)電機(jī)遠(yuǎn)程控制系統(tǒng)設(shè)計_第4頁
微型計算機(jī)課程設(shè)計步進(jìn)電機(jī)遠(yuǎn)程控制系統(tǒng)設(shè)計_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目 錄一、 需求分析11.1 設(shè)計的硬件資源環(huán)境11.2 設(shè)計的軟件資源環(huán)境11.3 設(shè)計的具體要求1二、概要設(shè)計12.1 運行方式與方向的控制循環(huán)查表法22.2 步進(jìn)電機(jī)運行速度的控制軟件延時法32.3 步進(jìn)電機(jī)接口32.4 步進(jìn)電機(jī)的驅(qū)動32.5 步進(jìn)電機(jī)的起/??刂圃O(shè)置開關(guān)42.6 步進(jìn)電機(jī)設(shè)計電路的搭建42.7雙機(jī)遠(yuǎn)程通信原理5三、詳細(xì)設(shè)計63.1 硬件設(shè)計63.2 軟件設(shè)計7四、調(diào)試與操作說明8五、課程設(shè)計總結(jié)與體會9致 謝10參考文獻(xiàn)11附錄A:步進(jìn)電機(jī)遠(yuǎn)程控制的接收端程序12附錄B:步進(jìn)電機(jī)遠(yuǎn)程控制的發(fā)送端程序19一、 需求分析本課程的設(shè)計的題目為“步進(jìn)電機(jī)遠(yuǎn)程控制系統(tǒng)設(shè)計”。從

2、題目上可以看出,本課程設(shè)計的硬件中心是“步進(jìn)電機(jī)遠(yuǎn)程控制系統(tǒng)”,我們的任務(wù)就是首先在理論上設(shè)計出一套抽象的硬件模型,然后根據(jù)理論與實際的需要選擇我們需要的元件并進(jìn)行制作,在制作的過程中需要對出現(xiàn)的各種問題以及障礙進(jìn)行處理、對各個工作環(huán)節(jié)進(jìn)行調(diào)試,并最終實現(xiàn)硬件實體的正常運轉(zhuǎn)。我們的設(shè)計目的便是通過步進(jìn)電機(jī)遠(yuǎn)程控制系統(tǒng)設(shè)計,深入了解與掌握利用RS232或RS485串行通信標(biāo)準(zhǔn)進(jìn)行遠(yuǎn)距離傳送的原理與方法。1.1 設(shè)計的硬件資源環(huán)境(1)PC兼容機(jī)(2.MFID多功能微機(jī)實驗平臺(含PCI總線驅(qū)動板)(3)面包板(4)安裝或焊接工具1.2 設(shè)計的軟件資源環(huán)境(1)Windows 2000(2) M2

3、KI集成開發(fā)環(huán)境1.3 設(shè)計的具體要求(1)甲機(jī)通過RS-232或RS-485接口遠(yuǎn)距離控制乙機(jī)一側(cè)步進(jìn)電機(jī)的起/停;(2)甲機(jī)通過RS-232或RS-485接口遠(yuǎn)距離控制乙機(jī)上步進(jìn)電機(jī)的方向;(3)甲機(jī)通過RS-232或RS-485接口遠(yuǎn)距離控制乙機(jī)上步進(jìn)電機(jī)的起/停、方向、速度,并采用對話框選擇控制項目。 二、概要設(shè)計 步進(jìn)電機(jī)是將電脈沖信號轉(zhuǎn)換成角位移的一種機(jī)電式數(shù)模轉(zhuǎn)換器。步進(jìn)電機(jī)旋轉(zhuǎn)的角位移與輸入脈沖的個數(shù)成正比;步進(jìn)電機(jī)的轉(zhuǎn)速與輸入脈沖的頻率成正比;步進(jìn)電機(jī)的轉(zhuǎn)動方向與輸入脈沖對繞組加電的順序有關(guān)。因此,步進(jìn)電機(jī)旋轉(zhuǎn)的角位移、轉(zhuǎn)速以及方向均受輸入脈沖的控制。而我們要實現(xiàn)的是采用軟件

4、的方法實現(xiàn)遠(yuǎn)程控制步進(jìn)電機(jī),也就是在兩臺微機(jī)之間按RS232/RS485標(biāo)準(zhǔn)協(xié)議進(jìn)行零MODEM方式半雙工串行通信。2.1 運行方式與方向的控制循環(huán)查表法步進(jìn)電機(jī)的運行方式是指各相繞組循環(huán)流通電的方式。如四相步進(jìn)電機(jī)有但單四拍ABCD、雙四拍ABBCCDDA、單八拍ABBBCCCDDDAA和雙八拍ABABCBCBCDCDCDADADAB幾種方式。為了實現(xiàn)對個繞組按一定方式輪流加電,需要一個脈沖循環(huán)分配器。循環(huán)分配器可用硬件電路來實現(xiàn),也可用軟件來實現(xiàn)。這里采用的是軟件方法,軟件方法又分為控制字法和循環(huán)查表法,這里采用的是循環(huán)查表法。相序表見表2.1 所示。繞組與數(shù)據(jù)線的連接 運行方式 相序表

5、方 向加電代碼地址單元正向反向 雙八拍 表2.1 相序表D C B AD7 D6D5D4D3D2D1D00 0 0 0 0 1 0 10 0 0 1 0 1 0 10 0 0 1 0 1 0 00 1 0 1 0 1 0 00 1 0 1 0 0 0 00 1 0 1 0 0 0 10 1 0 0 0 0 0 10 1 0 0 0 1 0 1ABABCBCBCDCDCDADADAB05H 400H15H 401H14H 402H54H 403H50H 404H51H 405H41H 406H2.2 步進(jìn)電機(jī)運行速度的控制軟件延時法控制步進(jìn)電機(jī)速度有兩個途徑:一是硬件改變輸入脈沖的頻率,通過對定

6、時器(如:8253)定時常數(shù)的設(shè)定,使其升頻、降頻或恒頻。二是軟件延時,或調(diào)用延時子程序。采用軟件延時方法來改變步進(jìn)電機(jī)速度,雖然簡單易行,但延時受CPU主頻的影響,導(dǎo)致在主頻較低的微機(jī)上開發(fā)的步進(jìn)電機(jī)控制程序換到主頻較高的微機(jī)上,就不能正常運行,甚至由于頻率太高,步進(jìn)電機(jī)干脆不動了。應(yīng)該指出的是,步進(jìn)電機(jī)的速度還受到本身矩-頻特性的限制,設(shè)計時應(yīng)滿足運行頻率與負(fù)載力矩之間的確定關(guān)系,否則,就會產(chǎn)生失步或無法工作的現(xiàn)象。2.3 步進(jìn)電機(jī)接口步進(jìn)電機(jī)接口的硬件部分主要是提供輸送相序代碼的并行接口數(shù)據(jù)線(8根),以及保護(hù)電機(jī)繞組的器件,所以接口電路以8255A為主芯片(8255A的介紹詳見前面音樂

7、發(fā)生器中的介紹),將PA口作為數(shù)據(jù)口,傳送加電代碼,再加上鎖存器74LS373作繞組保護(hù),74LS73芯片的引腳分配如圖2.1所示,功能對應(yīng)表如表2.2所示,功Vcc8Q8D7D7Q6Q6D5D5Q使能G輸出控制1Q 1D 2D 2Q 3Q 3D 4D 4Q GND圖2.1 74LS373(八D寄存器)1234567891020191817161514131211能表中當(dāng)G為高時,Q輸出將隨數(shù)據(jù)D輸入而變;當(dāng)G為低時,Q輸出將鎖存已建立的數(shù)據(jù)電平。另外,還有功率驅(qū)動管TIP122,以及二極管(用作保護(hù)TIP驅(qū)動管)、按鍵開關(guān)SW等。很明顯,這里并沒有什么聯(lián)絡(luò)線。這是因為此處的被控對象步進(jìn)電機(jī)總

8、是處于準(zhǔn)備好接收8255A傳來的數(shù)據(jù)(相序加控制輸出 使能 G D 輸出 Q L H H H L H L L L L x Q0 H x x Z表2.2 74LS373功能對應(yīng)表電代碼)的,不需要查詢是否準(zhǔn)備好,即無條件傳送。2.4 步進(jìn)電機(jī)的驅(qū)動TIP122+12VA圖2.2 步進(jìn)電機(jī)驅(qū)動原理圖步進(jìn)電機(jī)在系統(tǒng)中是一種執(zhí)行元件,都要帶負(fù)載,因此,需要功率的驅(qū)動。在電子儀器和設(shè)備中,一般所需功率較小,常采用達(dá)林頓復(fù)合管作功率驅(qū)動。驅(qū)動原理圖如2.2所示。圖2.2中,在TIP122的基極上,加電脈沖為高時,加電代碼1時,達(dá)林頓管導(dǎo)通,使繞組A通電;加電代碼0時,繞組斷電。2.5 步進(jìn)電機(jī)的起/??刂?/p>

9、設(shè)置開關(guān)為了控制步進(jìn)電機(jī)的起/停,通常采用設(shè)置硬開關(guān)或軟開關(guān)的方法。所謂硬開關(guān)方法,一般是在外部設(shè)置按鍵開關(guān)SW,并且約定當(dāng)開關(guān)SW按下時啟動運行或停止運動。為此,需要在程序中將開關(guān)SW的狀態(tài)讀入,以便檢測SW是否按下。所謂軟開關(guān)方法,就是利用系統(tǒng)的鍵盤,定義某一個鍵,當(dāng)該按鍵按下時,啟動或停止運動。為此,在程序中要利用DOS系統(tǒng)功能調(diào)用來檢測鍵盤輸入。2.6 步進(jìn)電機(jī)設(shè)計電路的搭建實驗原理圖設(shè)計好了以后,在面包板上搭建步進(jìn)電機(jī)驅(qū)動模塊的電路,并使用26芯的扁平電纜線,將面包板與平臺上的并行接口插座J5連接起來。步進(jìn)電機(jī)驅(qū)動模塊的電路連接如圖2.3所示,步進(jìn)電機(jī)驅(qū)動模塊的PCB圖如圖2.4所示

10、。 圖2.3 步進(jìn)電機(jī)驅(qū)動模塊電路連接圖圖2.4 步進(jìn)電機(jī)驅(qū)動模塊電路PCB圖2.7雙機(jī)遠(yuǎn)程通信原理此次課程設(shè)計是在小于15m的距離下進(jìn)行的,所以我們不需要采用調(diào)制解調(diào)器MODEM,通信雙方可以直接通信,既只需要TxD,RxD,SG三根線連接就能通信。采用8251A作為接口的主芯片再配置少量附加電路,如波特率時鐘發(fā)生器,RS-232C與TTL電平轉(zhuǎn)換電路,地址譯碼電路等就可以構(gòu)成一個串行通信接口,如圖2.5所示。 乙機(jī)CPUEIA/TTL變換EIA/TTL變換TxDRxDSG_TxC_RxC波特率發(fā)生器波特率發(fā)生器TxDRxDSG_TxC_RxC 甲機(jī)CPU圖2.5 雙機(jī)遠(yuǎn)程通信示意圖三、詳細(xì)

11、設(shè)計3.1 硬件設(shè)計(1)設(shè)計符合設(shè)計要求的電路圖,如圖2.3所示 (2)根據(jù)電路圖找到所需的電子元件及導(dǎo)線若干(3)區(qū)分各元件并進(jìn)行分類(4)取來面包板。仔細(xì)研究面包板,分清它的內(nèi)部結(jié)構(gòu)、線路走向及插線原理等。(5)開始搭建元件,將其插到合適的位置上。(6)按圖連線。要注意分清電源及地線,各元件的電器特性(如二極管的正負(fù)極問題),以便確保正確無誤。(7)電路。要反復(fù)檢查問題,看是否有線路搭錯的情況。(8)區(qū)分電機(jī)的四相。因為我們做的是步進(jìn)電機(jī)的設(shè)計,所以需要區(qū)分電機(jī)的四相。注意,A、B、C、D依次導(dǎo)線顏色為白、綠、藍(lán)、紅。用烙鐵將導(dǎo)線焊接好。(9)在微機(jī)平臺上做實驗,運行系統(tǒng)自帶的程序。看四

12、個LED指示燈是否依次亮起,不能同時一起亮也不能全不都不亮,要依照雙四拍ABBCCDDA的順序閃亮。檢查電機(jī)是否按所要求順序旋轉(zhuǎn),兩個開關(guān)SW1和SW2能否起到控制電機(jī)的起/停、旋轉(zhuǎn)方向、旋轉(zhuǎn)速度等功能。(10)碰到問題、檢查問題、解決問題、反復(fù)調(diào)試直到成功。3.2 軟件設(shè)計 接口電路以8251為核心,8253提供收/發(fā)時鐘,8255控制8253的GATE門。I/O 端口地址:8255的四個端口地址為300H303H。其中A口=304H,B口=301H,C口=302H,命令口=303H。8253的四個端口地址為304H307H。其中通道0為304H,通道1為305H,通道2為306H,命令口為

13、307H。8251的兩個端口地址為:308H309H,其中,308H為8251數(shù)據(jù)口,309H為命令/狀態(tài)口。在程序中我們要求雙方通信的傳輸速率只能在1109600bps之間可選。實現(xiàn)方法是利用人機(jī)對話的方式選擇波特率,然后再按照 Tc=CLK/(Baud*factor)公式,根據(jù)所選定的波特率,在程序中計算出8253的定時常數(shù)Tc,在裝入8253的計數(shù)器。然后我們在發(fā)送端設(shè)置了一些特殊的字符,如發(fā)送端發(fā)送字符a為步進(jìn)電機(jī)正向慢轉(zhuǎn),發(fā)送字符b為步進(jìn)電機(jī)反向慢轉(zhuǎn),發(fā)送字符c為步進(jìn)電機(jī)正向快轉(zhuǎn),發(fā)送字符d為步進(jìn)電機(jī)反向快轉(zhuǎn)。(1)程序流程圖程序流程圖如圖3.1所示 (2)程序通信程序有發(fā)送端程序和

14、接收端程序,由發(fā)送端發(fā)送特定的字符,接收端接收到以后,引起步進(jìn)電機(jī)的相應(yīng)轉(zhuǎn)動,以實現(xiàn)遠(yuǎn)程控制的要求。接收程序:見附錄A,發(fā)送程序:見附錄B。圖3.1 程序流程圖四、調(diào)試與操作說明(1)首先檢驗步進(jìn)電機(jī)在原有的程序中是否正常運轉(zhuǎn);(2)以原有的程序為參照,我們用C語言編寫了一套步進(jìn)電機(jī)的運轉(zhuǎn)程序,然后檢驗它是否能使步進(jìn)電機(jī)根據(jù)要求正常運轉(zhuǎn),結(jié)果發(fā)現(xiàn)在調(diào)試過程中,當(dāng)SW2按下時步進(jìn)電機(jī)雖然停止了工作,但指示燈仍然沒有熄滅。最后在反復(fù)調(diào)試檢驗中發(fā)現(xiàn)如果加上outportb(0x300,0x00);語句燈就熄滅了,目的是將它清零(注:此時的步進(jìn)電機(jī)的起/停是受開關(guān)SW1和SW2控制的)。(3)接下來做

15、遠(yuǎn)程控制。我們用兩臺計算機(jī)來實現(xiàn),一臺作為發(fā)送端,一臺作為接收端。通過發(fā)送端發(fā)送的特殊字符來控制接收端上步進(jìn)電機(jī)的運轉(zhuǎn);(4)我們分別編制了兩套程序(發(fā)送程序和接收程序)。調(diào)試中我們遇到了很多問題,比如,當(dāng)我們將步進(jìn)電機(jī)的程序與之搭配時,我們無法用鍵盤控制發(fā)送的字符,并且開關(guān)也失去了作用;(5)在進(jìn)行遠(yuǎn)程控制時,端口之間也發(fā)生沖突,我們組采用了中斷的方法,但每次遠(yuǎn)程控制只能實現(xiàn)一次。最后參照別的組,發(fā)現(xiàn)他們是將PC口改成了PB來進(jìn)行多次控制。五、課程設(shè)計總結(jié)與體會我覺得此次課程設(shè)計不僅提高了我們在搭硬件方面的能力,還鞏固了我們在軟件方面的編程知識,在此過程中我們收獲很多,但同時也遇到了各種各樣

16、的困難。步進(jìn)電機(jī)的硬件電路是由男生完成的,但當(dāng)我們測試時發(fā)現(xiàn)步進(jìn)電機(jī)雖然在運轉(zhuǎn),但兩個開關(guān)卻不起作用,于是我對照電路圖,并請教老師,又將開關(guān)的線重新連接了一遍,使開關(guān)可以控制電機(jī)的起/停。接下來就是實現(xiàn)軟件編程,也是我主要負(fù)責(zé)的一部分,我查詢了相關(guān)的知識,比如8255,8253和8251的工作方式和原理,以及它們之間的聯(lián)系。然后我試著開始編程,首先我編寫了控制步進(jìn)電機(jī)運轉(zhuǎn)的程序,讓它可以在本地實現(xiàn)正/反運轉(zhuǎn),經(jīng)過多次調(diào)試后,程序是沒有邏輯上的錯誤了,但又出現(xiàn)了一個小問題,那就是按下SW2時,電機(jī)是停了,可燈沒有全部熄滅,后來發(fā)現(xiàn)是沒有將8255的300置零。接著是編寫遠(yuǎn)程控制的程序,發(fā)送端我引

17、用了電腦中已有的程序,而接收端是要將步進(jìn)電機(jī)的程序嵌入到其中。在測試中我是不斷改進(jìn)程序,我先讓接收端可以接收發(fā)送端發(fā)送的字符,然后再將電機(jī)接好,通過RS232/RS485進(jìn)行串行通信。在通信過程中,一開始我設(shè)置一個字符,將信號傳到接收端,告訴接收端電機(jī)可以運轉(zhuǎn)了,但此時電機(jī)的起停還是由開關(guān)控制的。我原本打算通過循環(huán)查表的方法,發(fā)送端發(fā)送特定的字符而接收端接到后,控制電機(jī)相應(yīng)的運轉(zhuǎn)情況,但此方法屢次失敗,甚至連字符都收不到,我請教了許多老師和相關(guān)的技術(shù)人員都沒有解決這個問題。最后在老師的幫助下,通過中斷的方式,我終于實現(xiàn)了遠(yuǎn)程控制步進(jìn)電機(jī),但每回只能發(fā)一個字符,即實現(xiàn)一次轉(zhuǎn)。我覺得做到這里,都是

18、不容易的,其間我遇到了許多的困難。其實有兩組同學(xué)共同完成了這個課題,后來我也研究了一下,因為端口之間使用時存在沖突,那兩組同學(xué)解決的方法是改成了PB口,這樣線路也要跟著修改,總之完成這個課程設(shè)計期間,我受益良多,原本連面包板是什么東西我都不知道,現(xiàn)在我都可以自己動手搭電路了,并且我還了解到了元器件運行的原理。希望學(xué)校以后能多開展這樣的活動,加強(qiáng)我們的動手能力,使原理可以和實踐很好地結(jié)合起來,從而開拓我們的思維。致 謝 在這次的課程設(shè)計中,郭赟同學(xué)負(fù)責(zé)硬件電路,解決了很多復(fù)雜的硬件問題;周敏、李慧娟同學(xué)在軟件環(huán)境中做了大量的程序設(shè)計和測試工作;葉新同學(xué)在硬件設(shè)計的前期做了細(xì)致的繪圖;潘晶晶同學(xué)最

19、后排版和整理了這份實驗報告。正是因為有了大家的共同努力和集體的力量,我們的實驗才獲得了最后的成功,在此對他們表示誠摯的謝意。特別感謝龔義建主任以及其它輔導(dǎo)老師在這次課程設(shè)計期間對我們進(jìn)行的孜孜不倦的指導(dǎo),讓我們得以順利完成這次工作,并讓我們學(xué)到了很多專業(yè)知識、培養(yǎng)了我們解決問題的能力以及自學(xué)的能力。其學(xué)者風(fēng)度以及親切的教導(dǎo)讓我們收益匪淺。參考文獻(xiàn)1 劉樂善主編 微機(jī)接口技術(shù)及應(yīng)用, 華中科技大學(xué)出版社,2004年4月第1版。2 實驗硬件電路參考32位微機(jī)實驗指導(dǎo)書,華中科技大學(xué)計算機(jī)學(xué)院。附錄A:步進(jìn)電機(jī)遠(yuǎn)程控制的接收端程序接收程序:#include <conio.h> /kbhi

20、t();#include <stdio.h> /printf();#include <dos.h> /delay();#define data51 0x308 /8251A數(shù)據(jù)口#define ctrl51 0x309 /8251A命令/狀態(tài)口#define ctrl55 0x303 /8255命令口#define timer2 0x306 /8253的2號計數(shù)器端口#define timctl 0x307 /8253命令口#define factor 16 /波特率因子16#ifdef _cplusplus /if in C+ mode #define _CPPARG

21、S .#else #define _CPPARGS#endifunsigned long int clk = 1193182;char buffer1024 = ""int len = 0; /定時常數(shù)數(shù)組int tc_table8=110,/ 0=110bps 150, / 1=150b/s 300, / 2=300b/s600, / 3=600b/s 1200, / 4=1200b/s 2400, / 5=2400b/s4800, / 6=4800b/s 9600 / 1=9600b/s ;void int51(); /初始化8251avoid set_bps(int

22、bps); /8253-5記數(shù)初值計算與裝入void interrupt handler(_CPPARGS) int letter;disable();letter = inportb(data51);bufferlen+ = letter;outportb(0xa0,0x62);/發(fā)中斷結(jié)束命令(OCW2),向從片8259發(fā)EOI命令outportb(0x20,0x20);/向主片8259發(fā)EOI命令enable(); void int51() outportb(ctrl51,0x00);delay(100);outportb(ctrl51,0x40);/8251復(fù)位delay(100);o

23、utportb(ctrl51,0x4a);/8251A方式命令delay(100);outportb(ctrl51,0x27);/8251A工作命令 void set_bps(int bps) int count,sendhigh,sendlow;count=clk/bps;count=count/factor;/計算計數(shù)初值sendhigh = (count >> 8) & 0x00ff;sendlow = count & 0x00ff;outportb(timctl,0xb6);outportb(timer2,sendlow);/裝計數(shù)初值低字節(jié)outportb

24、(timer2,sendhigh);/裝計數(shù)初值高字節(jié) void main() int getvalue=0,getout = 1;int temp=-1;void interrupt (*oldhandler)(_CPPARGS);int status;for(;) clrscr();printf(" baud-rate :n 0-110n 1-150n 2-300n 3-600n 4-1200n 5-2400n 6-4800n 7-9600n"); printf("n please select one of baud-ratesn");getval

25、ue=getch();if(getvalue<'0') | (getvalue>'7') printf("n Input error! try again please! n");/error messagegetch();continue; else break; temp = getvalue - '0'set_bps(tc_tabletemp);/8253-5記數(shù)初值計算與裝入int51();/初始化8251aprintf("n now enter the serial communication&

26、quot;);printf("n if you want to end,please press "q" or "Q"n");outportb(0x303,0x80);/初始化8255outportb(0x303,0x0d);/令PC6=1,打開8253的GATE2,輸出方波delay(100);oldhandler=getvect(0x72);/獲取原中斷向量setvect(0x72,handler);/設(shè)置新中斷向量status=inportb(0xa1);outportb(0xa1,status&0xfb);/打開IRQ

27、10(OCW1)status=inportb(0x21);outportb(0x21,status&0xfb);/打開IRQ2(OCW1)delay(1000);while(getout)/按下Q/q就退出int i=0; while(i<len) printf("%c",bufferi); if(bufferi='a') int xu8=0x05,0x15,0x14,0x54,0x50,0x51,0x41,0x45;/相序表unsigned int i=0;unsigned char recv;/printf("nPress sw1

28、 to start!n");/printf("If you want to quit,press sw2!n");outportb(0x303,0x81);/初始化outportb(0x303,0x09);/置PC4=1關(guān)閉74LS373 /do /recv = inportb(0x302);/while(0x02&recv)!=0);/查SW1按下 outportb(0x303,0x08);/置PC4=0,打開74LS373do outportb(0x300,xui);/送相序代碼到PA口 i+; if(i=8) i=0; delay(200);/延時w

29、hile(0x01&inportb(0x302)!=0);/查SW2按下outportb(0x303,0x09);/置PC4=1,關(guān)閉74LS373 if(bufferi='b') int xu8=0x45,0x41,0x51,0x50,0x54,0x14,0x15,0x05;/相序表unsigned int i=0;unsigned char recv;/printf("nPress sw1 to start!n");/printf("If you want to quit,press sw2!n");outportb(0x30

30、3,0x81);/初始化outportb(0x303,0x09);/置PC4=1關(guān)閉74LS373/do/recv = inportb(0x302);/while(0x02&recv)!=0);/查SW1按下 outportb(0x303,0x08);/置PC4=0,打開74LS373dooutportb(0x300,xui);/送相序代碼到PA口 i+; if(i=8) i=0; delay(200);/延時while(0x01&inportb(0x302)!=0);/查SW2按下outportb(0x303,0x09);/置PC4=1,關(guān)閉74LS373 if(buffer

31、i='c') int xu8=0x05,0x15,0x14,0x54,0x50,0x51,0x41,0x45;/相序表unsigned int i=0;unsigned char recv;/printf("nPress sw1 to start!n");/printf("If you want to quit,press sw2!n");outportb(0x303,0x81);/初始化outportb(0x303,0x09);/置PC4=1關(guān)閉74LS373/do/recv = inportb(0x302);/while(0x02&a

32、mp;recv)!=0);/查SW1按下 outportb(0x303,0x08);/置PC4=0,打開74LS373do outportb(0x300,xui);/送相序代碼到PA口 i+; if(i=8) i=0; delay(40);/延時while(0x01&inportb(0x302)!=0);/查SW2按下outportb(0x303,0x09);/置PC4=1,關(guān)閉74LS373 if(bufferi='d') int xu8=0x45,0x41,0x51,0x50,0x54,0x14,0x15,0x05;/相序表unsigned int i=0;unsi

33、gned char recv;/printf("nPress sw1 to start!n");/printf("If you want to quit,press sw2!n");outportb(0x303,0x81);/初始化outportb(0x303,0x09);/置PC4=1關(guān)閉74LS373/do/recv = inportb(0x302);/while(0x02&recv)!=0);/查SW1按下 outportb(0x303,0x08);/置PC4=0,打開74LS373do outportb(0x300,xui);/送相序代碼

34、到PA口 i+; if(i=8) i=0; delay(40);/延時while(0x01&inportb(0x302)!=0);/查SW2按下outportb(0x303,0x09);/置PC4=1,關(guān)閉74LS373 i+;if (i=len) len=0;if(kbhit() if(getch()=0x51)|(getch()=0x71) getout = 0;/ESC鍵按下返回 setvect(0x72,oldhandler);status=inportb(0xa1);outportb(0xa1,status|0x04);/屏蔽IRQ10(OCW1)status=inportb

35、(0x21);outportb(0x21,status|0x04);/屏蔽IRQ2outport(ctrl55,0x0c);/關(guān)閉8253附錄B:步進(jìn)電機(jī)遠(yuǎn)程控制的發(fā)送端程序發(fā)送程序:#include <conio.h> /kbhit();#include <stdio.h> /printf();#include <dos.h> /delay();#define data51 0x308 /8251A數(shù)據(jù)口#define ctrl51 0x309 /8251A命令/狀態(tài)口#define ctrl55 0x303 /8255命令口#define timer2

36、0x306 /8253的2號計數(shù)器端口#define timctl 0x307 /8253命令口/#define clk 1193182 #define factor 16 /波特率因子16unsigned long int clk = 1193182;/8251輸入時鐘頻率(十六進(jìn)制表示) /定時常數(shù)數(shù)組int tc_table8=110, / 0=110bps 150, / 1=150b/s 300, / 2=300b/s 600, / 3=600b/s 1200, / 4=1200b/s 2400, / 5=2400b/s4800, / 6=4800b/s 9600 / 1=9600b/s ;void int51(); /初始化8251avoid set_bps(int bps); /8253-5記數(shù)初值計算與裝入void main() int getvalue=0;int temp=-1;int sletter,rletter,status;for(;) clrscr();printf("n 0-110n 1-150n 2-300n 3-600n 4-1200n 5-2400n 6-4800n 7-9

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論