《微機(jī)原理課程設(shè)計(jì)》基于80x86的步進(jìn)電機(jī)控制系統(tǒng)
《《微機(jī)原理課程設(shè)計(jì)》基于80x86的步進(jìn)電機(jī)控制系統(tǒng)》由會(huì)員分享,可在線閱讀,更多相關(guān)《《微機(jī)原理課程設(shè)計(jì)》基于80x86的步進(jìn)電機(jī)控制系統(tǒng)(25頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、江蘇科技大學(xué)(張家港) 《微機(jī)原理與接口技術(shù)》課程設(shè)計(jì) 《微機(jī)原理與接口技術(shù)》 課程設(shè)計(jì) 姓名: 厲小洋 學(xué)號(hào): 0945533117 班級(jí): 09電氣1班 專業(yè): 電氣工程及其自動(dòng)化 學(xué)院: 電氣與信息工程學(xué)院 江蘇科技大學(xué)張家港校區(qū) 2012年9月 24
2、 目錄 一 理論部分 2 1課題要求與內(nèi)容 2 2 系統(tǒng)方案設(shè)計(jì) 3 3 系統(tǒng)硬件的設(shè)計(jì) 4 4 系統(tǒng)軟件設(shè)計(jì) 5 二 實(shí)踐部分 6 1 系統(tǒng)硬件原理簡介 6 2 系統(tǒng)硬件調(diào)試中出現(xiàn)的問題及解決措施 10 3 系統(tǒng)軟件 11 3.1 軟件設(shè)計(jì) 11 3.2軟件調(diào)試中出現(xiàn)的問題及解決措施 14 三 附錄 15 題目:《基于80x86的步進(jìn)
3、電機(jī)控制系統(tǒng)》 第一章、 理論部分 一 微機(jī)原理課程設(shè)計(jì)課題要求與內(nèi)容 內(nèi)容要求: (1) 使用8255A控制步進(jìn)電機(jī)的運(yùn)轉(zhuǎn)。 (2) 使用數(shù)碼管LED顯示速度的大小。 (3) 使用8253定時(shí)器調(diào)節(jié)速度的大小。 (4) 使用4個(gè)獨(dú)立按鍵控制步進(jìn)電機(jī),即“正傳”、“反轉(zhuǎn)”、“停止”、“調(diào)速”。 (5) 使用8259A產(chǎn)生中斷控制按鍵; (6) 使用DAC0832顯示速度的波形。 拓展功能: (1) 按鍵部分可以增加“加速”、“減速”等功能; (2) 考慮可以加蜂鳴器來區(qū)分“正轉(zhuǎn)”和“反轉(zhuǎn)”; (3) 其他可以有自己特色的功能均可。 二 系統(tǒng)方案設(shè)計(jì) 80X86
4、8255 8259 8254 步進(jìn)電機(jī) LED顯示 按鍵控制 在課程要求的前提下,步進(jìn)電機(jī)為四相八拍步進(jìn)電機(jī),這樣可以用8255的一個(gè)端口控制電機(jī)的驅(qū)動(dòng),LED顯示為十六位 圖1系統(tǒng)流程圖 在8255中可用兩個(gè)端口控制,按鍵單元可與電機(jī)共用一個(gè)八位端口,由8254產(chǎn)生可編程脈沖,進(jìn)入8259產(chǎn)生中斷,反饋給80x86,控制8255。 再執(zhí)行到步進(jìn)電機(jī)及其LED顯示上,一個(gè)脈沖步進(jìn)電機(jī)一拍。由按鍵讀入系統(tǒng)狀態(tài)。 具體的系統(tǒng)設(shè)計(jì)如圖1為系統(tǒng)概況流程圖 三 系統(tǒng)硬件設(shè)計(jì) 在硬件設(shè)計(jì)中,主要是通過步進(jìn)電機(jī)模塊、8255模塊、LED模塊、8254模塊。
5、 在8255芯片上用A,B口控制數(shù)碼管的顯示(A為位選B為段選),C口的高四位為四個(gè)按鍵單元,低四位作為輸出,控制步進(jìn)電機(jī)。 片選CS接IOY2。在8259和8254上,采用一個(gè)脈沖一拍的方式。給8254一個(gè)1.8432MHZ在CLK2,OUT2輸出給CLK0,由OUT0給8259的INT,輸出一個(gè)脈沖,經(jīng)由IR0給80x86的中斷口INTR。如圖2為硬件連接圖,如下 硬件連接:8254,8255,8259的CS分別接在IOY2,IOY0,IOY1 8255芯片連接:8255的A,B控制LED,A口接位選,B口接段選,將C口分為兩段,高四位讀取按鍵,低四位控制步進(jìn)
6、電機(jī),按鍵分為四個(gè)如下表1所示 表1 K1 K2 K3 K4 判斷開關(guān) 0開 1關(guān) 判斷正反轉(zhuǎn) 0正 1反 0 0 速度1 1 0 速度2 0 1 速度3 1 1 速度4 8254:GATE2接電源+5v 給CLK2一個(gè)信號(hào)OUT2接CLK0將輸出接8259的INT ,在用8259的IRO1連接到80X86的中斷INTR XD0~XD7 XIOR XIOW XA2 XA2 INT
7、R IOY0 XD0~XD7 IOY1 IOR IOW IOR IOW XA2 8086系統(tǒng)總線 D0 PC0 D7 PC3 A0 PC4 A1 PC7 8255 WR A口 RD CS B口 按鍵單元 步進(jìn)電機(jī)單元 LED顯示 XD0~XD7 D0 D7 WR RD INT CS 8259 IR0 A0 D0 OUT0 D7 CLK0 WR OUT2 RD
8、 CS CLK2 8254 A0 A1 GATE2 1.8432MHZ +5V IOY2 圖2硬件連接圖 四 系統(tǒng)軟件設(shè)計(jì) 開始 系統(tǒng)初始化 判斷開關(guān) 判斷正反 判斷速度 計(jì)數(shù)器裝入初值 判斷是否 進(jìn)入中斷 LED顯示 判斷是否 八拍走完 判斷鍵盤是 否有按鍵 否 否 是 是 是 否 結(jié)束 是 否 圖3軟件系統(tǒng)工作流程圖 過8255讀取按鍵的信號(hào),來控制步進(jìn)電機(jī)的開關(guān),正轉(zhuǎn),反轉(zhuǎn),
9、速度的大小。通過8254計(jì)數(shù)器工作在方式0的狀態(tài)下來控制每拍運(yùn)行的時(shí)間,步進(jìn)電機(jī)速度不同,賦給8254的初始值不同,同時(shí)8255的PA,PB口向LED接口輸出信號(hào),LED數(shù)碼管顯示步進(jìn)電機(jī)每分鐘的轉(zhuǎn)速。8254計(jì)數(shù)器每次運(yùn)行結(jié)束,向8259發(fā)出一個(gè)高電平,8259IR0接口檢測到高電平信號(hào),即進(jìn)入中斷服務(wù)程序,在中斷服務(wù)程序里,執(zhí)行對下一拍給步進(jìn)電機(jī)信號(hào)的賦值。在每次循環(huán)中,執(zhí)行鍵盤按鍵檢測程序,如有按鍵,退出程序,否則,反復(fù)循環(huán)。如圖3為軟件系統(tǒng)的工作流程圖 第二章 實(shí)踐部分 一 系統(tǒng)硬件原理簡介 1.1步進(jìn)電機(jī)的簡介及其工作原理 步進(jìn)電機(jī)的驅(qū)動(dòng)原理是通過它每相線圈的電流的順序切
10、換來使電機(jī)作步進(jìn)式旋轉(zhuǎn),驅(qū)動(dòng)電路由脈沖來控制,所以調(diào)節(jié)脈沖的頻率便可改變步進(jìn)電機(jī)的轉(zhuǎn)速,微控制器最適合控制步進(jìn)電機(jī)。另外,由于電機(jī)的轉(zhuǎn)動(dòng)慣量的存在,其轉(zhuǎn)動(dòng)速度還受驅(qū)動(dòng)功率的影響,當(dāng)脈沖的頻率大于某一值時(shí),電機(jī)便不再轉(zhuǎn)動(dòng)。 本次課程設(shè)計(jì)中電機(jī)共有四個(gè)相位(A,B,C,D),按轉(zhuǎn)動(dòng)步驟可分單4拍(A->B->C->D->A),雙4拍(AB->BC->CD->DA->AB)和單雙8拍(A->AB->B->BC->C->CD->D->DA->A). 此模塊的主要功能是通過接收8255的C口輸入信號(hào)來控制步進(jìn)電機(jī)的轉(zhuǎn)動(dòng),A,B,C,D分別代表不同的四個(gè)相位,分別接入到PC0,PC1,PC2和PC3實(shí)
11、現(xiàn)轉(zhuǎn)動(dòng)控制 相 1 2 3 4 5 6 7 8 A 1 1 0 0 0 0 0 1 B 0 1 1 1 0 0 0 0 C 0 0 0 1 1 1 0 0 D 0 0 0 0 0 1 1 1 表 2 如上述表2所示,通過編程對8255的輸出進(jìn)行控制,使輸出按照相序表給驅(qū)動(dòng)電路供電,則步進(jìn)電機(jī)的輸入也和相序表一致,這樣步進(jìn)電機(jī)就可以正向轉(zhuǎn)動(dòng),反之,則反向轉(zhuǎn)動(dòng)。 1.2實(shí)驗(yàn)所用芯片的介紹及其控制方式 1.2.1 8254的簡介 8254是Intel公司生產(chǎn)的課可編
12、程定時(shí)器,8254芯片主要由四部分組成: 1 數(shù)據(jù)總線緩沖器 數(shù)據(jù)總線緩沖器是一個(gè)三態(tài)、雙向8位寄存器主要作用是與CPU進(jìn)行數(shù)據(jù)交換,8位數(shù)據(jù)線D7~D0與CPU的系統(tǒng)數(shù)據(jù)總線連接,構(gòu)成CPU和8254之間信息傳送的通道,CPU通過數(shù)據(jù)總線緩沖器向8254寫入控制命令、計(jì)數(shù)初始值或讀取計(jì)數(shù)值。 2 讀寫邏輯 讀寫邏輯是芯片的控制部分,編程人員通過控制信號(hào)的選擇來選擇芯片的工作方式。讀/寫控制邏輯用來接收CPU系統(tǒng)總線的讀、寫控制信號(hào)和端口選擇信號(hào),用于控制8254內(nèi)部寄存器的讀/寫操作。 3 控制字寄存器 控制寄存器是一個(gè)只能寫不能讀的8位寄存器,系統(tǒng)通過指
13、令將控制字寫入控制寄存器,設(shè)定8254的不同工作方式。 4 計(jì)數(shù)器 8254內(nèi)部有三個(gè)結(jié)構(gòu)完全相同而又相互獨(dú)立的16位減“1”計(jì)數(shù)器,每個(gè)計(jì)數(shù)器有六種工作方式,各自可按照編程設(shè)定的方式工作。 1).有3個(gè)獨(dú)立的16位計(jì)數(shù)器 2).每個(gè)計(jì)數(shù)器可按十進(jìn)制或二進(jìn)制計(jì)數(shù) 3).8254每個(gè)計(jì)數(shù)器允許最高計(jì)數(shù)為10MHZ 4).8254 有讀回指令,還可以讀出狀態(tài)寄存器的內(nèi)容 5).每個(gè)計(jì)數(shù)器可編程工作于6中不同的方式 6)計(jì)數(shù)脈沖可以是有規(guī)律的時(shí)鐘信號(hào),也可以是隨機(jī)信號(hào),計(jì)數(shù)初值公式為n=fclki/fouti(fclki是輸入時(shí)鐘脈沖的頻率,fouti是輸出波形的頻率) 工作方
14、式的分類: 1) 方式0:計(jì)數(shù)到0結(jié)束輸出正跳躍信號(hào)方式 2)方式1:硬件可重觸發(fā)單穩(wěn)方式 3)方式2:頻率發(fā)生器 4)方式3:方波發(fā)生器 5)方式4:軟件觸發(fā)選通方式 6)方式5:硬件觸發(fā)選通方式 8254的控制字有兩個(gè):一個(gè)用來設(shè)置計(jì)數(shù)工作方式稱為方式控制字。另一個(gè)用來設(shè)置讀回命令,稱為讀回控制字。如下表3是控制方式表格 表3 8254的方式控制字格式 D7 D6 D5 D4 D3 D2 D1 D0 計(jì)數(shù)器選擇 讀/寫 工作方式選擇 計(jì)數(shù)碼制選擇 00-計(jì)數(shù)器0 00-鎖存計(jì)數(shù)值 000-方式0 0-二進(jìn)制數(shù) 01-計(jì)數(shù)器1 0
15、1-讀/寫低8位 001-方式1 1-十進(jìn)制數(shù) 10-計(jì)數(shù)器2 10-讀/寫高8位 010-方式2 11-讀出控制字標(biāo)志 11-先讀/寫低8位 再讀/寫高8位 011-方式3 100-方式4 101-方式5 8255的簡介及其控制 8255是Intel公司生產(chǎn)的可編程并行I/O接口芯片,有3個(gè)8位并行I/O口。具有3個(gè)通道3種工作方式的可編程并行接口芯片(40引腳)。 其各口功能可由軟件選擇,使用靈活,通用性強(qiáng)。8255可作為單片機(jī)與多種外設(shè)連接時(shí)的中間接口電路。 8255作為主機(jī)與外設(shè)的連接芯片,必須提供與主機(jī)相連的3個(gè)總線接口,即數(shù)據(jù)線、地址線
16、、控制線接口。同時(shí)必須具有與外設(shè)連接的接口A、B、C口。由于8255可編程,所以必須具有邏輯控制部分,因而8255內(nèi)部結(jié)構(gòu)分為3個(gè)部分:與CPU連接部分、與外設(shè)連接部分、控制部分。8255可編程外圍接口芯片是通用并行口芯片,具有A、B、C三個(gè)并行接口,有三種工方式。 方式0——基本的輸入輸出。方式1——選通輸入輸出。方式2——雙選通工作方式表格2為控制字格式,如下圖4 、圖5分別為8255工作方式控制字格式和8255 C口按位置位/復(fù)位控制字格式。 圖4、 8255工作方式控制字格式 圖5 8255 C口按位置位/復(fù)位控制字
17、格式 8259的簡介及其控制方式 8259A是專門為了對8085A和8086/8088進(jìn)行中斷控制而設(shè)計(jì)的芯片,它是可以用程序控制的中斷控制器。單個(gè)的8259A能管理8級(jí)向量優(yōu)先級(jí)中斷。在不增加其他電路的情況下,最多可以級(jí)聯(lián)成64級(jí)的向量優(yōu)級(jí)中斷系統(tǒng)。8259A有多種工作方式,能用于各種系統(tǒng)。各種工作方式的設(shè)定是在初始化時(shí)通過軟件進(jìn)行的。 在總線控制器的控制下,8259A芯片可以處于編程狀態(tài)和操作狀態(tài),編程狀態(tài)是CPU使用IN或OUT指令對8259A芯片進(jìn)行初始化編程的狀態(tài)。 功能:就是在有多個(gè)中斷源的系統(tǒng)中,接受外部的中斷請求,并進(jìn)行判斷,選中當(dāng)前優(yōu)先級(jí)最高的中斷請求,再將此請
18、求送到CPU的INTR端;當(dāng)CPU響應(yīng)中斷并進(jìn)入中斷子程序的處理過程后,中斷控制器仍負(fù)責(zé)對外部中斷請求的管理。 二 系統(tǒng)硬件調(diào)試中出現(xiàn)的問題及解決措施 問題一 步進(jìn)電機(jī)運(yùn)轉(zhuǎn)不流暢 原因:分析后發(fā)現(xiàn),程序執(zhí)行中的中斷無法連續(xù)執(zhí)行,因?yàn)?254采用方式3發(fā)出的中斷信號(hào),脈沖時(shí)間太短, 解決方法:在調(diào)整8254的計(jì)數(shù)器采用方式1后,一旦檢測信號(hào),重新將計(jì)數(shù)器裝入初值 問題二 數(shù)碼管顯示亂碼 原因:查看顯示數(shù)據(jù)發(fā)現(xiàn),當(dāng)8255輸出一個(gè)段碼后,下一次出現(xiàn)的是上一次輸出的值 解決方法:在以后每次輸出之后,都輸出一個(gè)00A,以清除8255寄存器中的值,以達(dá)到清除亂碼的效果 問題三 程序
19、執(zhí)行中有計(jì)數(shù)器賦初值,所以每次計(jì)數(shù)器都不能執(zhí)行完發(fā)出中斷 原因:賦初值在循環(huán)當(dāng)中 解決方法:將計(jì)數(shù)器賦初值放到循環(huán)外面,引用FLAG來判斷是否進(jìn)入中斷,如果進(jìn)入,則重新將計(jì)數(shù)器賦初值 問題四:讀取按鍵混亂 原因:用PC7-PC4來讀取按鍵。讀出的按鍵數(shù)值在高四位,于我們用低四位處理相沖突 解決方法:將讀出的數(shù)值右移四位 三 系統(tǒng)軟件 3.1 軟件設(shè)計(jì) 3.1.1 8255控制模塊 如圖6所示,8255主要負(fù)責(zé)不停的讀取按鍵狀態(tài)檢測速度的大小PC6為0 0(關(guān)) 初始化8259、8255 8255PC4口檢 測開關(guān)按鍵 8255PC5口檢測 正反轉(zhuǎn)按鍵 1(
20、開) 8255PC6口 檢測速度 8255PC7口 檢測速度 8255PC7口 檢測速度 PC6為1 PC7為0 PC7為1 PC7為0 。 口1 1(反轉(zhuǎn)) 口2 0(正轉(zhuǎn)) PC7為1 如圖6 8255流程圖 3.1.2 8254延時(shí)模塊 設(shè)置8254的控制字,通過8254設(shè)置延時(shí),產(chǎn)生延時(shí)頻率,最后再接入到8255控制步進(jìn)電機(jī)的運(yùn)轉(zhuǎn)與停止,速度大小主要通過對8254裝入初值的不同來控制,流程如下圖7,與上圖6銜接(圖7分別于圖6最后連接
21、) 否 否 是 是 8254裝入初值 8255PA.PB口輸 出LED顯示速度 判斷是否 運(yùn)轉(zhuǎn)八拍 是否進(jìn) 入中斷 PC低四位控 制步進(jìn)電機(jī) 進(jìn)入圖6的口1 進(jìn)入圖6的口2 圖7 8254模塊流程 3.1.3 LED顯示模塊 LED模塊的主要功能是前四位顯示步進(jìn)電機(jī)的轉(zhuǎn)速(r/min)度的值。此模塊用8255A、B口的控制LED數(shù)碼管的位碼,采用動(dòng)態(tài)掃描方式讓數(shù)碼管顯示出速度值。 利用8255的端口A、B口各八位,共十六位控制數(shù)碼管的顯示
22、,其中A口為位選控制,B口為段選控制,直接顯示步進(jìn)電機(jī)的轉(zhuǎn)速。 數(shù)碼管的顯示控制對應(yīng)于下圖8 圖8 數(shù)碼管對應(yīng)圖 來自8254的信號(hào) 3.1.4 8259中斷模塊 8259 中斷模塊的8259主要負(fù)責(zé)接收來自 8254的信號(hào)產(chǎn)生中斷,給80x86,控制 一個(gè)脈沖產(chǎn)生 一個(gè)中斷 步進(jìn)電機(jī),如圖9 步進(jìn)電機(jī) 轉(zhuǎn)動(dòng)一拍 80x86 圖9 3.2軟件調(diào)試中出現(xiàn)的問題及解決措施
23、 問題一 程序運(yùn)行中反復(fù)執(zhí)行MOV BX,OFFSET TTABLEL. 原因:放在最高的級(jí)別的大循環(huán)當(dāng)中,所以會(huì)反復(fù)執(zhí)行。 解決方法:引用CX計(jì)數(shù),當(dāng)CX由08H變成00H時(shí),才返回執(zhí)行MOV BX,OFFSET TTABLEL 問題二 跳轉(zhuǎn)指令無法達(dá)到期望位置,提示錯(cuò)誤。 原因:JZ,JNZ指令只能跳轉(zhuǎn)255,而我們程序跳轉(zhuǎn)跳遠(yuǎn),超出范圍。 解決方法:使用JMP語句,在中間插入,多次跳轉(zhuǎn),以達(dá)到跳轉(zhuǎn)位置 附錄(源程序) IOY1 EQU 3040H ;片選IO
24、Y0對應(yīng)的端口始地址 MY8255_A EQU IOY1+00H*4 ;8255的A口地址 MY8255_B EQU IOY1+01H*4 ;8255的B口地址 MY8255_C EQU IOY1+02H*4 ;8255的C口地址 MY8255_MODE EQU IOY1+03H*4 ;8255的控制寄存器地址 IOY2 EQU 3080H ;片選IOY1對應(yīng)的端口始地址 MY8254_COUNT0 EQU IOY2+00H*4 ;82
25、54計(jì)數(shù)器0端口地址 MY8254_COUNT1 EQU IOY2+01H*4 ;8254計(jì)數(shù)器1端口地址 MY8254_COUNT2 EQU IOY2+02H*4 ;8254計(jì)數(shù)器2端口地址 MY8254_MODE EQU IOY2+03H*4 ;8254控制寄存器端口地址 INTR_IVADD EQU 01C8H ;INTR對應(yīng)的中斷矢量地址 INTR_OCW1 EQU 0A1H ;INTR對應(yīng)PC機(jī)內(nèi)部8259的OCW1地址 INTR_OCW2 EQU 0A0H
26、 ;INTR對應(yīng)PC機(jī)內(nèi)部8259的OCW2地址 INTR_IM EQU 0FBH ;INTR對應(yīng)的中斷屏蔽字 IOY0 EQU 3000H ;片選IOY0對應(yīng)的端口始地址 MY8259_ICW1 EQU IOY0+00H ;實(shí)驗(yàn)系統(tǒng)中8259的ICW1端口地址 MY8259_ICW2 EQU IOY0+04H ;實(shí)驗(yàn)系統(tǒng)中8259的ICW2端口地址 MY8259_ICW3 EQU IOY0+04H ;實(shí)驗(yàn)系統(tǒng)中8259
27、的ICW3端口地址 MY8259_ICW4 EQU IOY0+04H ;實(shí)驗(yàn)系統(tǒng)中8259的ICW4端口地址 MY8259_OCW1 EQU IOY0+04H ;實(shí)驗(yàn)系統(tǒng)中8259的OCW1端口地址 MY8259_OCW2 EQU IOY0+00H ;實(shí)驗(yàn)系統(tǒng)中8259的OCW2端口地址 MY8259_OCW3 EQU IOY0+00H ;實(shí)驗(yàn)系統(tǒng)中8259的OCW3端口地址 STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DAT
28、A SEGMENT MES DB Press any key to exit!,0AH,0DH,0AH,0DH,$ CS_BAK DW ? ;保存INTR原中斷處理程序入口段地址的變量 IP_BAK DW ? ;保存INTR原中斷處理程序入口偏移地址的變量 IM_BAK DB ? ;保存INTR原中斷屏蔽字的變量 TTABLE1 DB 01H,03H,02H,06H,04H,0CH,08H,09H ;正轉(zhuǎn)編碼
29、 TTABLE2 DB 09H,08H,0CH,04H,06H,02H,03H,01H ;反轉(zhuǎn)編碼 FLAG DB 00H ;標(biāo)志位 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DX,OFFSET MES ;顯示退出提示
30、 MOV AH,09H INT 21H CLI MOV AX,0000H ;替換INTR的中斷矢量 MOV ES,AX MOV DI,INTR_IVADD MOV AX,ES:[DI] MOV IP_BAK,AX ;保存INTR原中斷處理程序入口偏移地址 MOV AX,OFFSET MYISR MOV ES:[DI],AX ;設(shè)置當(dāng)前中斷處理
31、程序入口偏移地址 ADD DI,2 MOV AX,ES:[DI] MOV CS_BAK,AX ;保存INTR原中斷處理程序入口段地址 MOV AX,SEG MYISR MOV ES:[DI],AX ;設(shè)置當(dāng)前中斷處理程序入口段地址 MOV DX,INTR_OCW1 ;設(shè)置中斷屏蔽寄存器,打開INTR的屏蔽位 IN AL,DX MOV IM_BAK,AL ;保存IN
32、TR原中斷屏蔽字 AND AL,INTR_IM OUT DX,AL MOV DX,MY8259_ICW1 ;初始化實(shí)驗(yàn)系統(tǒng)中8259的ICW1 MOV AL,13H ;邊沿觸發(fā)、單片8259、需要ICW4 OUT DX,AL MOV DX,MY8259_ICW2 ;初始化實(shí)驗(yàn)系統(tǒng)中8259的ICW MOV AL,08H OUT DX,AL MOV DX,MY8259_ICW4
33、 ;初始化實(shí)驗(yàn)系統(tǒng)中8259的ICW4 MOV AL,01H ;非自動(dòng)結(jié)束EOI OUT DX,AL MOV DX,MY8259_OCW3 ;向8259的OCW3發(fā)送讀取IRR命令 MOV AL,0AH OUT DX,AL MOV DX,MY8259_OCW1 ;初始化實(shí)驗(yàn)系統(tǒng)中8259的OCW1 MOV AL,0FEH ;打開IR0的屏蔽位 O
34、UT DX,AL STI MOV DX,MY8255_MODE ;初始化8255工作方式 MOV AL,88H ;工作方式0,A口輸出,B口輸出,C高四位輸入,低四位輸出 OUT DX,AL A: MOV AH,1 ;判斷是否有按鍵按下 INT 16H JNZ WAIT1 ;無按鍵則跳回繼續(xù)執(zhí)行,有則退出
35、 MOV CX,08H ;計(jì)數(shù)初值 MOV DX,MY8255_C IN AL,DX ;讀C口高4位的數(shù)據(jù) SHR AL,1 ;轉(zhuǎn)向C口的低4位 SHR AL,1 SHR AL,1 SHR AL,1 PUSH BX MOV BL,AL ;BL保存AL中的數(shù)據(jù) MOV
36、BH,BL ;BH中保存AL的數(shù)據(jù) AND BL,01H ;取開關(guān)狀態(tài) CMP BL,00H JZ A ;如果是0,則跳轉(zhuǎn)到A AND BH,02H ;取正反轉(zhuǎn)狀態(tài) CMP BH,00H JZ FORWARD ;如果是0,跳正轉(zhuǎn) JNZ BACKWARD
37、 ;如果是1,跳反轉(zhuǎn) POP BX FORWARD: MOV BX,OFFSET TTABLE1 ;將的TTABLE1首地址賦給BX JMP B ;跳轉(zhuǎn)到B取速度 BACKWARD: MOV BX,OFFSET TTABLE2 ;將的TTABLE2首地址賦給BX JMP B ;跳轉(zhuǎn)到B取速度
38、 B: MOV CX,08H ;計(jì)數(shù)初值 MOV FLAG,00H ;中斷結(jié)束后給FLAG賦值00H MOV DX,MY8255_C IN AL,DX ;讀C口數(shù)據(jù) SHR AL,04H ;將數(shù)據(jù)左移四位 AND AL,0CH ;取高兩位 MOV AH,AL ;保存AL中的數(shù)據(jù)
39、 AND AL,08H ;取最高位 CMP AL,00H ;與00比較 JZ CAMP1 JNZ CAMP2 CAMP1: AND AH,04H ;取第二位 CMP AH,00H JZ SPEED1C ;00速度1, 跳SPEED1C JNZ SPEED2C ;01速度2,跳SPEED2C CAMP2: AND AH,04H
40、 ;取第二位 CMP AH,00H JZ SPEED3C ;10速度3,跳SPEED1C JNZ SPEED4C1 ;11速度4,跳SPEED1C SPEED1C: MOV DX,MY8254_MODE ;初始化8254工作方式 MOV AL,0B6H ;計(jì)數(shù)器2,方式3 OUT DX,AL
41、 MOV DX,MY8254_COUNT2 ;裝入計(jì)數(shù)初值 MOV AL,24H ;36分頻 OUT DX,AL MOV AL,00H OUT DX,AL MOV DX,MY8254_MODE ;初始化8254工作方式 MOV AL,30H ;計(jì)數(shù)器0,方式1 OUT DX,AL MOV DX,MY8254_COUNT0
42、 ;裝入計(jì)數(shù)初值 MOV AL,0FFH ;255 OUT DX,AL MOV AL,00H OUT DX,AL JMP SPEED1 SPEED2C: MOV DX,MY8254_MODE ;初始化8254工作方式 MOV AL,0B6H ;計(jì)數(shù)器2,方式3 OUT DX,AL MOV DX,MY8254_COUNT2
43、 ;裝入計(jì)數(shù)初值 MOV AL,48H ;72分頻 OUT DX,AL MOV AL,00H OUT DX,AL MOV DX,MY8254_MODE ;初始化8254工作方式 MOV AL,36H ;計(jì)數(shù)器0,方式1 OUT DX,AL MOV DX,MY8254_COUNT0 ;裝入計(jì)數(shù)初值 MOV
44、 AL,0FFH ;255 OUT DX,AL MOV AL,00H OUT DX,AL JMP SPEED2 A1: JMP A SPEED4C1:JMP SPEED4 SPEED3C: MOV DX,MY8254_MODE ;初始化8254工作方式 MOV AL,0B6H ;計(jì)數(shù)器2,方式3 OUT DX,AL
45、 MOV DX,MY8254_COUNT2 ;裝入計(jì)數(shù)初值 MOV AL,90H ;144分頻 OUT DX,AL MOV AL,00H OUT DX,AL MOV DX,MY8254_MODE ;初始化8254工作方式 MOV AL,36H ;計(jì)數(shù)器0,方式1 OUT DX,AL MOV DX,MY825
46、4_COUNT0 ;裝入計(jì)數(shù)初值 MOV AL,0FFH ;255 OUT DX,AL MOV AL,00H OUT DX,AL JMP SPEED3 SPEED4C: MOV DX,MY8254_MODE ;初始化8254工作方式 MOV AL,0B6H ;計(jì)數(shù)器2,方式3 OUT DX,AL MOV DX,MY8
47、254_COUNT2 ;裝入計(jì)數(shù)初值 MOV AL,0FFH ;288分頻 OUT DX,AL MOV AL,01H OUT DX,AL MOV DX,MY8254_MODE ;初始化8254工作方式 MOV AL,36H ;計(jì)數(shù)器0,方式1 OUT DX,AL MOV DX,MY8254_COUNT0 ;裝入計(jì)數(shù)初值 MOV AL,0FFH
48、 ;255 OUT DX,AL MOV AL,00H OUT DX,AL JMP SPEED4 A2: JMP A1 SPEED1: MOV AL,[BX] MOV DX,MY8255_C ;給步進(jìn)電機(jī)輸入信號(hào) OUT DX,AL DEC CX ;每輸入一次信號(hào)CX減1 CMP CX
49、,00H ;將CX的值與00H比較,如果跳轉(zhuǎn)8次,跳轉(zhuǎn)到A,重新開始掃描按鍵 JZ A CMP FLAG,OOH ;判斷是不是已經(jīng)進(jìn)入中斷,如果進(jìn)入,跳轉(zhuǎn)到B,如果沒有,繼續(xù)執(zhí)行LED的顯示 JNZ B MOV DX,MY8255_A MOV AL,0EFH ;段選3號(hào)位 OUT DX,AL MO
50、V DX,MY8255_B MOV AL,06H ;顯示數(shù)字1 OUT DX,AL MOV AL,00H ;消除鎖存值 OUT DX,AL MOV DX,MY8255_A MOV AL,0F7H ;段選2號(hào)位 OUT DX,AL MOV DX,MY8255_B MOV AL,5BH ;顯示數(shù)字2 OUT DX
51、,AL MOV AL,00H ;消除鎖存值 OUT DX,AL MOV DX,MY8255_A MOV AL,0FBH ;段選1號(hào)位 OUT DX,AL MOV DX,MY8255_B MOV AL,3FH ;顯示數(shù)字0 OUT DX,AL MOV AL,00H ;消除鎖存值 OUT DX,AL
52、JMP A1 A3: JMP A2 SPEED2: MOV AL,[BX] MOV DX,MY8255_C ;給步進(jìn)電機(jī)輸入信號(hào) OUT DX,AL DEC CX ;每輸入一次信號(hào)CX減1 CMP CX,00H ;將CX的值與00H比較,如果跳轉(zhuǎn)8次,跳轉(zhuǎn)到A,重新開始掃描按鍵 JZ A CMP FLAG,OOH
53、 ;判斷是不是已經(jīng)進(jìn)入中斷,如果進(jìn)入,跳轉(zhuǎn)到B,如果沒有,繼續(xù)執(zhí)行LED的顯示 JNZ B MOV DX,MY8255_A MOV AL,0F7H ;段選2號(hào)位 OUT DX,AL MOV DX,MY8255_B MOV AL,7DH ;顯示數(shù)字6 OUT DX,AL MOV AL,00H ;消除鎖存值 OUT DX,AL
54、 MOV DX,MY8255_A MOV AL,0FBH ;段選1號(hào)位 OUT DX,AL MOV DX,MY8255_B MOV AL,3FH ;顯示數(shù)字0 OUT DX,AL MOV AL,00H ;消除鎖存值 OUT DX,AL JMP A2 SPEED3: MOV AL,[BX] MOV DX,MY8255_C
55、 ;給步進(jìn)電機(jī)輸入信號(hào) OUT DX,AL DEC CX ;每輸入一次信號(hào)CX減1 CMP CX,00H ;將CX的值與00H比較,如果跳轉(zhuǎn)8次,跳轉(zhuǎn)到A,重新開始掃描按鍵 JZ A CMP FLAG,OOH ;判斷是不是已經(jīng)進(jìn)入中斷,如果進(jìn)入,跳轉(zhuǎn)到B,如果沒有,繼續(xù)執(zhí)行LED的顯示 JNZ B MOV DX,M
56、Y8255_A MOV AL,0F7H ;段選2號(hào)位 OUT DX,AL MOV DX,MY8255_B MOV AL,4FH ;顯示數(shù)字3 OUT DX,AL MOV AL,00H ;消除鎖存值 OUT DX,AL MOV DX,MY8255_A MOV AL,0FBH ;段選1號(hào)位 OUT DX,AL
57、 MOV DX,MY8255_B MOV AL,3FH ;顯示數(shù)字0 OUT DX,AL MOV AL,00H OUT DX,AL JMP A3 A4: JMP A3 SPEED4: MOV AL,[BX] MOV DX,MY8255_C OUT DX,AL DEC CX ;每輸入一次信號(hào)CX減1
58、 CMP CX,00H ;將CX的值與C00H比較,如果跳轉(zhuǎn)8次,跳轉(zhuǎn)到A,重新開始掃描按鍵 JZ A CMP FLAG,OOH ;判斷是不是已經(jīng)進(jìn)入中斷,如果進(jìn)入,跳轉(zhuǎn)到B,如果沒有,繼續(xù)執(zhí)行LED的顯示 JNZ B MOV DX,MY8255_A MOV AL,0F7H ;段選2號(hào)位 OUT DX,AL MOV DX,MY8255_B MOV
59、 AL,06H ;顯示數(shù)字5 OUT DX,AL MOV AL,00H ;消除鎖存值 OUT DX,AL MOV DX,MY8255_A MOV AL,0FBH ;段選1號(hào)位 OUT DX,AL MOV DX,MY8255_B MOV AL,6DH OUT DX,AL ;顯示數(shù)字1 MOV AL,00H
60、 OUT DX,AL ;消除鎖存值 JMP A4 QUIT: CLI MOV AX,0000H ;恢復(fù)INTR原中斷矢量 MOV ES,AX MOV DI,INTR_IVADD MOV AX,IP_BAK ;恢復(fù)INTR原中斷處理程序入口偏移地址 MOV ES:[DI],AX ADD DI,2 MOV AX,CS_BAK
61、 ;恢復(fù)INTR原中斷處理程序入口段地址 MOV ES:[DI],AX MOV DX,INTR_OCW1 ;恢復(fù)INTR原中斷屏蔽寄存器的屏蔽字 MOV AL,IM_BAK OUT DX,AL STI MOV AX,4C00H ;返回到DOS INT 21H MYISR PROC NEAR ;中斷處理程序MYISR PUSH AX I
62、R0ISR:MOV AL,30H ;IR0處理,顯示字符串STR0 MOV AH,0EH INT 10H MOV AL,20H INT 10H INC BX ;列表向后移一格 MOV FLAG,01H JMP OVER OVER: MOV DX,INTR_OCW2 ;向試驗(yàn)箱上8259發(fā)送中斷結(jié)束命令 MOV AL,20H OUT DX,AL MOV AL,20H ;向PC機(jī)內(nèi)部8259發(fā)送中斷結(jié)束命令 OUT 20H,AL POP AX IRET MYISR ENDP CODE ENDS END START
- 溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 植樹問題講課
- 小小圖書館賈世喜
- 小班數(shù)學(xué):變得一樣多
- 蘇教版三年級(jí)數(shù)學(xué)上冊教學(xué)ppt課件58:解決問題的策略復(fù)習(xí)
- 小學(xué)科學(xué)六下《拓展與應(yīng)用》-公開課一等獎(jiǎng)ppt課件
- 高中英語人教版選修七Unit-2-Robots-ppt課件
- 第九章長期負(fù)債課件
- 皮膚免疫系統(tǒng)課件
- 辦公樓施工現(xiàn)場消防安全管理要求規(guī)范課件
- freeroi在功能磁共振roi分析中的應(yīng)用
- 《永遇樂·京口北固亭懷古》用典講解課件
- 《秋天的雨》微課課件
- 護(hù)患溝通技巧-課件
- 《高等數(shù)學(xué)B》第十章___微分方程與差分方程__第6節(jié)__差分與差分方程的概念_、……課件
- 英語(人教版)九年級(jí)總復(fù)習(xí)題型訓(xùn)練補(bǔ)全對話(含最新原創(chuàng)題)課件