《微機(jī)原理課程設(shè)計(jì)》簡(jiǎn)易全自動(dòng)洗衣機(jī)設(shè)計(jì)課程論文
《《微機(jī)原理課程設(shè)計(jì)》簡(jiǎn)易全自動(dòng)洗衣機(jī)設(shè)計(jì)課程論文》由會(huì)員分享,可在線閱讀,更多相關(guān)《《微機(jī)原理課程設(shè)計(jì)》簡(jiǎn)易全自動(dòng)洗衣機(jī)設(shè)計(jì)課程論文(30頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 《微機(jī)原理課程設(shè)計(jì)》 《微機(jī)原理課程設(shè)計(jì)》 姓名: 學(xué)號(hào): __ 班級(jí): 專業(yè): 電氣工程及其自動(dòng)化 學(xué)院: 電氣與信息工程學(xué)院
2、 目錄 一、課程設(shè)計(jì)內(nèi)容 1 二、系統(tǒng)功能要求 1 2.1 基本功能要求 1 2.2 附件功能要求 1 三、系統(tǒng)方案論證 1 四、系統(tǒng)硬件設(shè)計(jì) 2 4.1 系統(tǒng)硬件原理 2 4.2 功能模塊設(shè)計(jì) 6 4.3 遇到問題及解決措施 7 五、系統(tǒng)軟件設(shè)計(jì) 8 5.1 總體設(shè)計(jì)思想 8 5.2 功能模塊設(shè)計(jì) 10 5.3 遇到問題及解決措施 11 六、總結(jié) 11 七、附錄 13
3、 簡(jiǎn)易全自動(dòng)洗衣機(jī)設(shè)計(jì) 一、課程設(shè)計(jì)內(nèi)容 (1)利用8255A芯片,在數(shù)碼管上實(shí)時(shí)顯示洗衣機(jī)檔位和洗衣時(shí)間倒計(jì)時(shí); (2)利用8254芯片,設(shè)置精確倒計(jì)時(shí)時(shí)間或者發(fā)送信號(hào)給蜂鳴器; (3)利用8259A芯片,設(shè)置按鍵或開關(guān)中斷控制功能; (4)利用0809芯片,模擬水位傳感器采集一個(gè)電壓信號(hào),控制電機(jī)旋轉(zhuǎn)。 二、系統(tǒng)功能要求 2.1 基本功能要求 (1)能夠?qū)崿F(xiàn)洗衣機(jī)換擋功能,比如設(shè)置“1擋鍵”、“2擋鍵”等
4、不同擋位; (2)能夠?qū)崿F(xiàn)電機(jī)的正轉(zhuǎn)功能;比如設(shè)置電機(jī)正轉(zhuǎn)3圈,反轉(zhuǎn)3圈,循環(huán)工作; (3)能夠?qū)崿F(xiàn)洗衣機(jī)按鍵控制,比如設(shè)置“啟動(dòng)鍵”、“暫停鍵”或“停止鍵” (4)能夠?qū)崿F(xiàn)按鍵或開關(guān)控制洗衣機(jī)的暫停,比如按下“暫停鍵”,正在旋轉(zhuǎn)的 電機(jī)停止工作,再按一下“啟動(dòng)鍵”,洗衣機(jī)又繼續(xù)工作; (5)能夠?qū)崿F(xiàn)洗滌、甩干連續(xù)自動(dòng)功能,甩干后,洗衣機(jī)會(huì)通過蜂鳴器發(fā)出報(bào) 警聲音; 2.2 附件功能要求 (1)能夠?qū)崿F(xiàn)洗衣機(jī)單獨(dú)甩干功能,此時(shí)電機(jī)旋轉(zhuǎn)速度很快; (2)能夠?qū)崿F(xiàn)洗衣機(jī)進(jìn)水、排水或者洗滌、漂洗、甩干等不同功能使用不同顏 色的指示燈; (3)能夠?qū)崿F(xiàn)洗滌、漂洗、甩干全過程
5、自動(dòng)化; (4)能夠?qū)崿F(xiàn)洗衣機(jī)甩干后,發(fā)出優(yōu)美的音樂,音樂一直響直到人為關(guān)掉或者 音樂響一定時(shí)間后自動(dòng)關(guān)閉。 (5)自己設(shè)計(jì)的其他有特色的功能。 三、系統(tǒng)方案論證 3.1 方案一 輸入設(shè)備主要有啟動(dòng)按鈕、暫停按鈕、檔位選擇、排水按鈕、及脫水按鈕。輸出設(shè)備主要有電源指示燈、數(shù)碼管、步進(jìn)電機(jī)、蜂鳴器等。 首先構(gòu)思系統(tǒng)的總體結(jié)構(gòu),根據(jù)設(shè)計(jì)要求確定好系統(tǒng)大致的硬件組成及其結(jié)構(gòu),其次根據(jù)系統(tǒng)的各個(gè)功能把軟件分成幾個(gè)不同的模塊,依次實(shí)現(xiàn)各個(gè)模塊的功能,最后把各個(gè)模塊組合起來完成整個(gè)系統(tǒng)的功能。 3.2 方案二 根據(jù)任務(wù)的要求,選擇了4個(gè)數(shù)碼管作為信號(hào)輸出,以狀態(tài)輸入開關(guān)作為輸入信號(hào),都
6、連接至8255A芯片上。步進(jìn)電動(dòng)機(jī)由8255PC4-PC7口驅(qū)動(dòng),其中洗衣過程漂洗過程排水過程的時(shí)間都由8254提供定時(shí)信號(hào),實(shí)現(xiàn)在預(yù)定時(shí)間狀態(tài)的轉(zhuǎn)換。 在對(duì)芯片進(jìn)行初始化之后,先判斷輸入信號(hào)的狀態(tài),根據(jù)輸入狀態(tài)的不同調(diào)用不同的子程序,鑒于定時(shí)程序在很多子程序里調(diào)用到,多次編寫加長了程序的長度,所以每次在調(diào)用之前先將計(jì)數(shù)值讀入一個(gè)寄存器中,在延時(shí)程序中讀取此寄存器中的數(shù)值即可。 當(dāng)按照輸入狀態(tài)運(yùn)行完之后,最后檢測(cè)到已完成的時(shí)候就啟動(dòng)蜂鳴報(bào)警,洗衣過程完成。 3.3 方案比較 方案一相對(duì)來說剛開始容易,但是后續(xù)工作麻煩,不容易將每個(gè)模塊有機(jī)的整合起來,會(huì)出現(xiàn)接口沖突,而方案二在設(shè)計(jì)初就從
7、全局出發(fā),充分分配好各個(gè)端口的配置及用途,避免了方案一中的沖突,所以方案二更優(yōu)越。 四、系統(tǒng)硬件設(shè)計(jì) 4.1 系統(tǒng)硬件原理 (1)8255A芯片 8255A是一個(gè)通用的可編程的并行接口芯片,內(nèi)部有2個(gè)8位I/O口(A、B),兩個(gè)4位I/O口(PC7~4、PC3~0).通過編程可設(shè)置3種工作方式,可適用于CPU與I/O設(shè)備之間的多種數(shù)據(jù)傳送方式的要求。C口可作為數(shù)據(jù)口,可作為信號(hào)線( CPU與I/O設(shè)備之間的應(yīng)答信號(hào)),可作為狀態(tài)口,可按位置位/復(fù)位。 8255A的內(nèi)部結(jié)構(gòu)如圖1所示: 圖1 8255的內(nèi)部結(jié)構(gòu)圖 8255的引腳分配: (1)D0~D7:8位,雙向,三態(tài)
8、數(shù)據(jù)線,用來與系統(tǒng)數(shù)據(jù)總線相連; (2)端口A、B、C:PA0~PA7( A組數(shù)據(jù)信號(hào),用來連接外設(shè)); PB0~PB7( B組數(shù)據(jù)信號(hào),用來連接外設(shè));PC0~PC7(C組數(shù)據(jù)信號(hào),用來連接外設(shè)或者作為控制信號(hào))。 (3)CS、RESET、WR、RD、A1、A0(內(nèi)部4個(gè)端口)。 (4)VCC、GND。 8255A有三種工作方式,用戶可以通過編程來設(shè)置。方式0――簡(jiǎn)單輸入/輸出――查詢方式;A,B,C三個(gè)端口均可。方式1――選通輸入/輸出――中斷方式;A ,B,兩個(gè)端口均可。方式2――雙向輸入/輸出――中斷方式。只有A端口才有。工作方式的選擇可通過向控制端口寫入控制字來實(shí)現(xiàn)。
9、(2)芯片8254 8254是可編程計(jì)數(shù)器/定時(shí)器。它的引腳及功能示意圖如圖2所示。數(shù)據(jù)總線緩沖器是8254與CPU之間的數(shù)據(jù)接口,它是一個(gè)8位雙向三態(tài)緩沖器。讀/寫控制邏輯接受CPU送來的讀/寫控制信號(hào),并加以組合完成對(duì)8254內(nèi)部操作的控制。8254內(nèi)部包含三個(gè)獨(dú)立的結(jié)構(gòu)功能完全相同的16位可預(yù)置的遞減計(jì)數(shù)器。控制字寄存器用來存放由CPU寫入8254的方式選擇控制字,以確定計(jì)數(shù)器的操作方式。 (3)8259芯片 8259A,可編程中斷控制器芯片。它的引腳圖如圖3所示。 它是可以用程序控制的中斷控制芯片。單個(gè)的8259A能管理8級(jí)向量優(yōu)
10、先級(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指令對(duì)8259A芯片進(jìn)行初始化編程的狀態(tài)。 (4)0809芯片 ADC0809是8位逐次逼近型A/D轉(zhuǎn)換器。它由一個(gè)八路模擬開關(guān),一個(gè)地址譯碼器,一個(gè)A/D轉(zhuǎn)換器和一個(gè)三態(tài)輸出所存器組成,多路開關(guān)可選通8個(gè)模擬通道,允許8路模擬量分時(shí)輸入,共用A/D轉(zhuǎn)換器進(jìn)行轉(zhuǎn)換,三態(tài)輸出用于鎖存A/D轉(zhuǎn)換完的數(shù)據(jù),當(dāng)OE端為高電平時(shí),才可以從三態(tài)輸
11、出鎖存器取走轉(zhuǎn)換完成的數(shù)據(jù)。IN0-IN7:8條模擬量輸入通道ADC0809對(duì)輸入模擬量要求:信號(hào)單極性,電壓范圍是0-5V,若信號(hào)太小,必須進(jìn)行放大;輸入的模擬量在轉(zhuǎn)換過程中應(yīng)該保持不變,如若模擬量變化太快,則需在輸入端前加采樣保持電路。地址輸入和控制線:4條ALE為地址鎖存允許輸入線,高電平有效,當(dāng)ALE線為高電平時(shí),地址鎖存與譯碼器將A,B,C三條地址線的地址信號(hào)進(jìn)行鎖存,經(jīng)譯碼后被選中的通道模擬量通過轉(zhuǎn)換器進(jìn)行轉(zhuǎn)換。A,B和C為地址輸入線,用于選通IN0-IN7上的一路模擬量輸入。通道選擇表如下表一所示。 表1 0809通道選擇表 C B A 選擇的通道 0 0 0
12、 IN0 0 0 1 IN1 0 1 0 IN2 0 1 1 IN3 1 0 0 IN4 1 0 1 IN5 1 1 0 IN6 1 1 1 IN7 數(shù)字量輸出及控制線:11條ST為轉(zhuǎn)換啟動(dòng)信號(hào)。當(dāng)ST上跳沿時(shí),所有內(nèi)部寄存器清零;下跳沿時(shí),開始進(jìn)行A/D轉(zhuǎn)換;在跳轉(zhuǎn)期間,ST應(yīng)保持低電平,EOC為轉(zhuǎn)換結(jié)束信號(hào),當(dāng)EOC為高電平時(shí),表明轉(zhuǎn)換結(jié)束;否則表明正在進(jìn)行A/D轉(zhuǎn)換,OE為輸出允許信號(hào),用于控制三條輸出鎖存器想單片機(jī)輸出轉(zhuǎn)換得到的數(shù)據(jù),OE=1,輸出轉(zhuǎn)換得到的數(shù)據(jù)‘OE=0輸出數(shù)據(jù)線呈高阻狀態(tài)。D7-D0為數(shù)字量輸出線CLK為
13、時(shí)鐘輸入信號(hào)線,因ADC0809的內(nèi)部沒有時(shí)鐘電路,所需時(shí)鐘信號(hào)必須由外界提供,通常頻率為500KHZ。VREF(+),VREF(-)為參考電壓輸入。 4.2 功能模塊設(shè)計(jì) 圖4 硬件功能圖 圖4硬件功能圖中,系統(tǒng)總體功能模塊在具體實(shí)踐中,因硬件資源的限制有所調(diào)整,比如有些電路采用其他電路來模擬,進(jìn)水部分有電位器來模擬,電機(jī)驅(qū)動(dòng)用直流系統(tǒng)來模擬。 其接線圖如圖5所示: 圖5 系統(tǒng)接線圖 4.3 遇到問題及解決措施 問題1: 當(dāng)把所有線路按照設(shè)計(jì)要求連接好過后,發(fā)現(xiàn)芯片8254沒有輸出時(shí)鐘信號(hào)。 解決方法:芯片8254沒有輸出時(shí)鐘信號(hào),這表示8254沒有起作用,原以為
14、是芯片壞了,換了好幾個(gè)新品牌還是一樣不起作用,后來經(jīng)過不斷排查是由于采用了12V供電電壓,實(shí)際要求是5V。 問題2:當(dāng)把所有的線路按照設(shè)計(jì)要求連接好之后,發(fā)現(xiàn)電機(jī)不能運(yùn)轉(zhuǎn)。 解決方法:經(jīng)檢查是連接到電機(jī)驅(qū)動(dòng)電路上的接線出現(xiàn)斷路,換根接線就把問題解決了 五、系統(tǒng)軟件設(shè)計(jì) 5.1 總體設(shè)計(jì)思想 程序首先要用偽指令定義一下。然后是8255、8254與8259的初始化,如: MOV DX,CADDR ;8255初始化 MOV AL,MODE OUT DX,AL MOV DX,MY8254_MODE ;初
15、始化8254工作方式 MOV AL,36H ;計(jì)數(shù)器0,方式3 OUT DX,AL MOV DX,MY8259_ICW1 ;初始化實(shí)驗(yàn)系統(tǒng)中8259的ICW1 MOV AL,1BH ;邊沿觸發(fā)、單片8259、需要ICW4 OUT DX,AL MOV DX,MY8259_ICW2 ;初始化實(shí)驗(yàn)系統(tǒng)中8259的ICW2 MOV AL,08H OUT DX,AL MOV DX,MY8259_ICW4
16、 ;初始化實(shí)驗(yàn)系統(tǒng)中8259的ICW4 MOV AL,01H ;非自動(dòng)結(jié)束EOI OUT DX,AL MOV DX,MY8259_OCW1 ;初始化實(shí)驗(yàn)系統(tǒng)中8259的OCW1 MOV AL,0FCH ;打開IR0和IR1的屏蔽位 OUT DX,AL 然后按照原先設(shè)計(jì)好的原理框圖的步驟設(shè)計(jì)檢測(cè)洗衣機(jī)開/停信號(hào),如; CHECK: MOV DX,PORTB IN AL,DX
17、 TEST AL,80H JZ CHECK 還有接下來的點(diǎn)亮運(yùn)行指示燈等程序。在設(shè)計(jì)中用到了子程序調(diào)用、循環(huán)、測(cè)試等程序。 在編程時(shí)按照設(shè)計(jì)好的原理框圖,結(jié)合微機(jī)課程上所學(xué)的具有一定功能的程序一一編出來,然后在計(jì)算機(jī)上進(jìn)行調(diào)試,發(fā)現(xiàn)錯(cuò)誤后再進(jìn)行修改。在編程過程中要注意程序的嵌套使用,即有些程序按照前面流程圖設(shè)計(jì)好了但在后面的程序中然要用,所以就要注意調(diào)用。 軟件可分為10個(gè)模塊:主程序、鍵盤掃描子程序、參數(shù)設(shè)置子程序、延時(shí)子程序、顯示子程序、自檢程序、甩干子程序、暫停子程序、蜂鳴器子程序。 系統(tǒng)的總體流程圖如圖6所示: 開始 8255等初始化
18、檢測(cè)開關(guān)信號(hào) 是否為脫水 Y N 設(shè)洗衣標(biāo)志 調(diào)用洗衣子程序 結(jié)束 啟動(dòng)蜂鳴器 關(guān)閉脫水標(biāo)志 調(diào)用脫水子程序 設(shè)脫水標(biāo)志 關(guān)閉洗衣標(biāo)志 圖6 整體流程方框圖 5.2 功能模塊設(shè)計(jì) (1)延時(shí)功能模塊設(shè)計(jì) 根據(jù)機(jī)箱上給出的芯片我們選用了8254作為定時(shí)計(jì)數(shù)器,在延時(shí)程序中計(jì)時(shí),在加水過程中計(jì)量加水的量。 由于需要多次調(diào)用延時(shí)子程序,所以把他寫成一個(gè)DALLY程序,每次調(diào)用的時(shí)候配合CALL和RET就能往返于子程序和主程序之間,之前把要記的數(shù)值放在SI寄存器中,
19、在子程序中讀取該寄存器就可以知道要記的數(shù)是多少而不必每次都重新給計(jì)數(shù)器賦值,減少了程序的步驟也使得更易讀。 (2)洗衣功能模塊設(shè)計(jì) 洗衣子程序中是一個(gè)不停的在正傳反轉(zhuǎn)間循環(huán)的過程,期間每次正轉(zhuǎn)或者反轉(zhuǎn)都調(diào)用了延時(shí)子程序,定時(shí)3S,在完成5次循環(huán)過后,洗衣過程完成。 (3)脫水功能模塊設(shè)計(jì) 脫水子程序中只需調(diào)用上面做好的延時(shí)程序,并在該延時(shí)之前打開或關(guān)閉相應(yīng)的指示燈即可。然后用8086的片選信號(hào)加給0832控制電動(dòng)機(jī)正轉(zhuǎn)反轉(zhuǎn),根據(jù)公式 : V0= -NVREF/256計(jì)算得到要使電動(dòng)機(jī)保持不轉(zhuǎn)的時(shí)候要輸入給80H,而正轉(zhuǎn)則取最大值FFH,反轉(zhuǎn)取最小值00H,由于這樣得到的V0不相同,所以
20、引起了正傳反轉(zhuǎn)時(shí)候的速度有些差異,最后等延時(shí)子程序執(zhí)行完畢后,關(guān)閉相應(yīng)指示燈即可完成。脫水、延時(shí)、加水等子程序后面都要加上RET,否則將無法跳回主程序MAIN。當(dāng)時(shí)在前幾次通電試驗(yàn)的時(shí)候每次都出現(xiàn)在排水的時(shí)候加水指示燈亮起,需要加水后才能熄滅,后檢查發(fā)現(xiàn)就是少了一個(gè)RET導(dǎo)致的,執(zhí)行完排水程序后沒返回而是接下去執(zhí)行了加水程序。 (4) 甩干、報(bào)警功能模塊設(shè)計(jì) 甩干子程序是一個(gè)不停的在正轉(zhuǎn)的過程,甩干可以分為快甩和慢甩兩種檔位,甩干子程序還可以通過按鍵直接跳過洗衣進(jìn)行調(diào)用。當(dāng)甩干程序運(yùn)行結(jié)束后,8254會(huì)產(chǎn)生一個(gè)時(shí)鐘信號(hào)給蜂鳴器從而讓蜂鳴器報(bào)警,表示洗衣過程結(jié)束。 (5)加水子程序設(shè)計(jì)
21、加水是這個(gè)總程序中很重要的部分,特別是如何將水位信號(hào)讀取和比較,最終還要輸出到8253進(jìn)行計(jì)數(shù)。首先打開加水指示燈,將水位信號(hào)掃描到寄存器AL中。然后根據(jù)與設(shè)定好的數(shù)據(jù)進(jìn)行比較確定水位信號(hào)是什么,假如檢測(cè)到的是高水位的話,跳轉(zhuǎn)到LEVEL,否則給AL置為3,高水位的時(shí)候?qū)⒖刂谱謱懡o計(jì)數(shù)器0,繼續(xù)執(zhí)行下去直到給BL加上1,當(dāng)加到與原來保存的水位信號(hào)數(shù)值相等的時(shí)候,由PC7口將信號(hào)傳遞給8253,告之加水計(jì)數(shù)程序完成,跳出加水程序,然后關(guān)閉加水指示燈,執(zhí)行下面的程序。 5.3 遇到問題及解決措施 問題1.通過中斷實(shí)現(xiàn)數(shù)碼管計(jì)時(shí)顯示與步進(jìn)電機(jī)延時(shí)相互沖突,導(dǎo)致步進(jìn)電機(jī)不能正常運(yùn)轉(zhuǎn)。 解決方法:
22、經(jīng)過很長時(shí)間調(diào)試,還是不能成功,由于時(shí)間有限,所以最后只好通過步進(jìn)電機(jī)正反轉(zhuǎn)次數(shù)來計(jì)時(shí)。 問題2.報(bào)警功能實(shí)現(xiàn)后不知道如何使它停止下來。 解決辦法:在進(jìn)入報(bào)警子程序前加變量判斷,通過按鍵控制變量的取反改變,停止報(bào)警。 六、總結(jié) 這次微機(jī)原理課程設(shè)計(jì)歷時(shí)兩個(gè)星期,在整整兩星期的日子里,可以說得是苦多于甜,但是可以學(xué)到很多很多的的東西,同時(shí)不僅可以鞏固了以前所學(xué)過的知識(shí),而且學(xué)到了很多在書本上所沒有學(xué)到過的知識(shí)。以前在上課的時(shí)候,老師經(jīng)常強(qiáng)調(diào)在寫一個(gè)程序的時(shí)候,一定要事先把程序原理方框圖化出來,但是我開始總覺得這樣做沒必要,很浪費(fèi)時(shí)間。但是,這次課程設(shè)計(jì)完全改變了我以前的那種錯(cuò)誤的認(rèn)識(shí),以
23、前我接觸的那些程序都是很短、很基礎(chǔ)的,但是在課程設(shè)計(jì)中碰到的那些需要很多代碼才能完成的任務(wù),畫程序方框圖是很有必要的。因?yàn)橥ㄟ^程序方框圖,在做設(shè)計(jì)的過程中,我們每一步要做什么,每一步要完成什么任務(wù)都有一個(gè)很清楚的思路,而且在程序測(cè)試的過程中也有利于查錯(cuò)。 其次,以前對(duì)于編程工具的使用還處于一知半解的狀態(tài)上,但是經(jīng)過一段上機(jī)的實(shí)踐,對(duì)于怎么去排錯(cuò)、查錯(cuò),怎么去看每一步的運(yùn)行結(jié)果,怎么去了解每個(gè)寄存器的內(nèi)容以確保程序的正確性上都有了很大程度的提高。 通過這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為
24、社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會(huì)遇到過各種各樣的問題,同時(shí)在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過的知識(shí)理解得不夠深刻,掌握得不夠牢固。 這次課程設(shè)計(jì)終于順利完成了,在設(shè)計(jì)中遇到了很多編程問題,通過網(wǎng)絡(luò)和與同學(xué)的討論基本上得到解決,提高了自己解決和分析問題的能力。 7、 附錄 洗衣機(jī)程序 ;****************根據(jù)查看端口資源修改下列符號(hào)值*******************
25、 IOY1 EQU 3040H IOY0 EQU 3000H ;片選IOY0對(duì)應(yīng)的端口始地址 ;***************************************************************** MY8255_A EQU IOY0+00H*4 ;8255的A口地址 MY8255_B EQU IOY0+01H*4 ;8255的B口地址 MY8255_C EQU IOY0+02H*4 ;8255的C口地址 MY825
26、5_MODE EQU IOY0+03H*4 ;8255的控制寄存器地址 MY8254_COUNT0 EQU IOY1+00H*4 ;8254計(jì)數(shù)器0端口地址 MY8254_COUNT1 EQU IOY1+01H*4 ;8254計(jì)數(shù)器1端口地址 MY8254_COUNT2 EQU IOY1+02H*4 ;8254計(jì)數(shù)器2端口地址 MY8254_MODE EQU IOY1+03H*4 ;8254控制寄存器端口地址 IOY2 EQU 3080H ;片選IOY0對(duì)應(yīng)的端口始地址 ;**
27、*************************************************************** MY8259_ICW1 EQU IOY2+00H ;實(shí)驗(yàn)系統(tǒng)中8259的ICW1端口地址 MY8259_ICW2 EQU IOY2+04H ;實(shí)驗(yàn)系統(tǒng)中8259的ICW2端口地址 MY8259_ICW3 EQU IOY2+04H ;實(shí)驗(yàn)系統(tǒng)中8259的ICW3端口地址 MY8259_ICW4 EQU IOY2+04H ;實(shí)驗(yàn)系統(tǒng)中8259的ICW4端口地址 MY8259_OCW1 EQ
28、U IOY2+04H ;實(shí)驗(yàn)系統(tǒng)中8259的OCW1端口地址 MY8259_OCW2 EQU IOY2+00H ;實(shí)驗(yàn)系統(tǒng)中8259的OCW2端口地址 MY8259_OCW3 EQU IOY2+00H ;實(shí)驗(yàn)系統(tǒng)中8259的OCW3端口地址 STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DATA SEGMENT DTABLE1 DB 06H,3FH,73H,77H,39H,06H,5BH,4FH,66H,80H DTABLE3 DB 10H,30H,20H,60H
29、,40H,0C0H,80H,90H DTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H TIME1 DB 05H TIME2 DB 05H TIME3 DB 0FH MES DB Press any key to exit!,0AH,0DH,0AH,0DH,$ FREQ_LIST DW 371,495,495,495,624,556,495,556,624 ;頻率表 DW 495,495,624,742,833,833,833
30、,742,624 DW 624,495,556,495,556,624,495,416,416,371 DW 495,833,742,624,624,495,556,495,556,833 DW 742,624,624,742,833,990,742,624,624,495 DW 556,495,556,624,495,416,416,371,495,0 TIME_LIST DB 4, 6, 2, 4, 4, 6, 2, 4, 4 ;時(shí)間表
31、 DB 6, 2, 4, 4, 12, 1, 3, 6, 2 DB 4, 4, 6, 2, 4, 4, 6, 2, 4, 4 DB 12, 4, 6, 2, 4, 4, 6, 2, 4, 4 DB 6, 2, 4, 4, 12, 4, 6, 2, 4, 4 DB 6, 2, 4, 4, 6, 2, 4, 4, 12 DATA ENDS
32、 CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DX,MY8254_MODE ;初始化8254工作方式 MOV AL,36H ;計(jì)數(shù)器0,方式3 OUT DX,AL MOV DX,MY8254_COUNT0 ;裝入計(jì)數(shù)初值 MOV AL,00H ;18432分頻
33、 OUT DX,AL MOV AL,48H OUT DX,AL MOV DX,MY8254_MODE ;初始化8254工作方式 MOV AL,050H ;計(jì)數(shù)器2,方式0 OUT DX,AL MOV DX,MY8254_COUNT1 ;裝入計(jì)數(shù)初值 MOV AL,03H ;18432分頻 OUT DX,AL MOV
34、 AL,00H OUT DX,AL MOV DX,MY8254_MODE ;初始化8254工作方式 MOV AL,0B6H ;計(jì)數(shù)器2,方式3 OUT DX,AL MOV DX,MY8254_COUNT2 ;裝入計(jì)數(shù)初值 MOV AL,00H ;18432分頻 OUT DX,AL MOV AL,05H OUT DX,AL
35、 MOV DX,MY8259_ICW1 ;初始化實(shí)驗(yàn)系統(tǒng)中8259的ICW1 MOV AL,1BH ;邊沿觸發(fā)、單片8259、需要ICW4 OUT DX,AL MOV DX,MY8259_ICW2 ;初始化實(shí)驗(yàn)系統(tǒng)中8259的ICW2 MOV AL,08H OUT DX,AL MOV DX,MY8259_ICW4 ;初始化實(shí)驗(yàn)系統(tǒng)中8259的ICW4 MOV AL,01H
36、 ;非自動(dòng)結(jié)束EOI OUT DX,AL MOV DX,MY8259_OCW1 ;初始化實(shí)驗(yàn)系統(tǒng)中8259的OCW1 MOV AL,0FCH ;打開IR0和IR1的屏蔽位 OUT DX,AL MOV SI,3000H MOV [SI],00H ;數(shù)碼管顯示1 MOV [SI+02H],05H ;數(shù)碼管顯示2
37、 MOV [SI+04H],01H ;洗滌,甩干判斷變量 MOV [SI+06H],01H ;電機(jī)速度檔位 MOV [SI+08H],01H ;電機(jī)輸入節(jié)拍倒轉(zhuǎn)判斷變量 MOV [SI+0AH],02H ;電機(jī)方向控制變量 MOV [SI+0CH],02H ;判斷是否進(jìn)入電機(jī)運(yùn)行程序的變量 MOV [SI+0EH],01H ;警報(bào)器關(guān)閉判斷變量 MOV
38、 DX,MY8255_MODE ;初始化8255工作方式 MOV AL,81H ;方式0,A口、B口輸出,C口低4位輸入 OUT DX,AL KAISHI: MOV SI,3000H ;讀取變量首地址 MOV DH,[SI+8] CMP DH,8 JA ZHI1 ;跳轉(zhuǎn)到節(jié)拍1開始轉(zhuǎn)動(dòng) CMP DH,1
39、 JB ZHI8 ;跳轉(zhuǎn)到節(jié)拍8開始轉(zhuǎn)動(dòng) JMP JIXU ZHI1: MOV [SI+8],01H JMP JIXU ZHI8: MOV [SI+8],08H JIXU: CALL KEYSCAN ;鍵盤掃描 CMP [SI+0EH],02H JNZ C MOV DX,MY8254_MODE ;初始化8254工作方式 MOV AL,0
40、F6H ;計(jì)數(shù)器2,方式3 OUT DX,AL MOV AX,0000H MOV DX,MY8254_COUNT2 OUT DX,AL ;裝入計(jì)數(shù)初值 MOV AL,AH OUT DX,AL C: MOV AH,1 ;判斷是否有按鍵按下 INT 16H JZ SFRUN ;無按鍵則跳回繼續(xù)循環(huán),
41、有則退出 QUIT: MOV AX,4C00H ;結(jié)束程序退出 INT 21H SFRUN: MOV SI,3000H ;讀取變量首地址 MOV DH,[SI+0CH] CMP DH,01H ;判斷變量[SI+0CH] JNZ JIXU ;不相等跳轉(zhuǎn)到JIXU MOV DH,[SI+0AH]
42、 CMP DH,01H ;判斷電機(jī)運(yùn)行方向 JNZ ZIJIAN INC [SI+08H] ;正向節(jié)拍加1 JMP RUN KAISHI1: JMP KAISHI ZIJIAN: DEC [SI+8] ;反向節(jié)拍減一 RUN: MOV AL,[SI+8] ;將變量與節(jié)拍表對(duì)應(yīng) MOV BX,OFFSET DTABLE3 AND AX,00FFH
43、 ADD BX,AX DEC BX MOV AL,[BX] MOV DX,MY8255_C OUT DX,AL DANG1: MOV DH,[SI+6] ;PC口輸出節(jié)拍數(shù)值 CMP DH,05H ;判斷速度檔位調(diào)用相應(yīng)的延遲時(shí)間 JNZ DANG2 PUSH CX MOV CX,10H
44、 ;運(yùn)行個(gè)節(jié)拍 DA1: CALL DALLY1 CALL DALLY1 CALL DALLY1 CALL KEYSCAN ;鍵盤掃描 JMP PP ;跳轉(zhuǎn)到PP DANG2: CMP DH,01H JNZ DANG3 DA2: CALL DALLY1 CALL DALLY1 CALL KEYSCAN JMP PP DANG3: CMP DH,02H JNZ PP DA3: CALL DALLY1 CALL KEYSCAN
45、JMP PP DANG4: CMP DH,03H JNZ KAISHI1 DA4: CALL KEYSCAN PP: MOV DX,MY8259_OCW3 ;向8259的OCW3發(fā)送查詢命令 MOV AL,0CH OUT DX,AL IN AL,DX ;讀出查詢字 TEST AL,80H ;判斷中斷是否已響應(yīng) JZ AA ;沒有響應(yīng)則繼續(xù)查詢
46、 AND AL,03H CMP AL,00H JE IR0ISR ;若為IR0請(qǐng)求,跳到IR0處理程序 JNE IR1ISR ;若為IR1請(qǐng)求,跳到IR1處理程序 AA: JMP KAISHI DANG4: CMP DH,03H JNZ KAISHI1 DA4: CALL KEYSCAN JMP KAISHI ;跳轉(zhuǎn)到KAISHI循環(huán) IR0ISR: MOV SI,3000H
47、 CMP [SI+4H],02H ;判斷是否是甩干模式 JZ M2 DIR: CMP [SI+0AH],01H ;判斷是否是正向 JZ DIR1 MOV [SI+0AH],01H JMP M1 DIR1: MOV [SI+0AH],02H CALL KEYSCAN M1: DEC TIME1 ;洗滌圈數(shù)減1 MOV AX,10D DIV TIM
48、E1 MOV AL,TIME1 MOV [SI+02H],AL CALL KEYSCAN CMP TIME1,00H ;是否洗滌結(jié)束 JZ M JMP CTU ;轉(zhuǎn)入計(jì)數(shù)初值 M: MOV [SI+4H],02H ;進(jìn)入甩干模式 MOV [SI+6],02H ;速度檔位選2 M2: DEC TIME2
49、 ;甩干 計(jì)數(shù)減一 MOV [SI],0 MOV AL,TIME2 MOV [SI+02H],AL ;將計(jì)數(shù)值放入數(shù)碼管顯示 CMP [SI+02H],00H JZ FINISH JNZ EOI CTU: MOV DX,MY8254_COUNT1 ;裝入計(jì)數(shù)初值 MOV AL,00H ;18432分頻 OUT DX,AL
50、 MOV AL,03H OUT DX,AL JMP EOI EOI: MOV DX,MY8259_OCW2 ;向?qū)嶒?yàn)系統(tǒng)中8259發(fā)送中斷結(jié)束命令 MOV AL,20H OUT DX,AL JMP KAISHI FINISH: MOV [SI+0CH],02H ;關(guān)閉進(jìn)入電機(jī)程序標(biāo)志 CALL PLAY ;調(diào)用報(bào)警程序 JMP KAISH
51、I PLAY PROC NEAR SOUND: CMP [SI+0EH],02H JZ EOI MOV SI,OFFSET FREQ_LIST ;裝入頻率表起始地址 MOV DI,OFFSET TIME_LIST ;裝入時(shí)間表起始地址 P1: MOV DX,1CH ;輸入時(shí)鐘為1.0416667MHz,1.0416667M = 0FE502H MOV AX,02000H DIV WORD PTR
52、 [SI] ;取出頻率值計(jì)算計(jì)數(shù)初值,0F4240H / 輸出頻率 MOV DX,MY8254_COUNT2 OUT DX,AL ;裝入計(jì)數(shù)初值 MOV AL,AH OUT DX,AL MOV DL,[DI] ;取出演奏相對(duì)時(shí)間,調(diào)用延時(shí)子程序 CALL DALLY3 DEC TIME3 ADD SI,2 INC DI CM
53、P WORD PTR [SI],0 ;判斷是否到曲末? JE SOUND PLAY ENDP DALLY1 PROC NEAR ;軟件延時(shí)子程序 PUSH CX PUSH AX MOV CX,008FH D11: MOV AX,5000H D22: DEC AX JNZ D22 PUSH CX PUSH AX CALL KEYSCAN P
54、OP AX POP CX LOOP D11 POP AX POP CX RET DALLY1 ENDP KEYSCAN PROC NEAR ;鍵盤掃描子程序 BEGIN: CALL DIS ;顯示刷新 CALL CLEAR ;清屏 CALL CCSCAN ;掃描按鍵 JNZ GETKEY1
55、 ;有鍵按下則跳置GETKEY1 JMP GOBACK1 GETKEY1:CALL DIS ;顯示刷新 CALL DALLY CALL DALLY CALL CLEAR ;清屏 CALL CCSCAN ;再次掃描按鍵 JNZ GETKEY2 ;有鍵按下則跳置GETKEY2 JMP BEGIN
56、 ;否則跳回開始繼續(xù)循環(huán) GETKEY2:MOV CH,0FEH MOV CL,00H ;設(shè)置當(dāng)前檢測(cè)的是第幾列 COLUM: MOV AL,CH ;選取一列,將X1~X4中一個(gè)置0 MOV DX,MY8255_A OUT DX,AL MOV DX,MY8255_C ;讀Y1~Y4,用于判斷是哪一行按鍵閉合 IN AL,DX L1: TEST AL,01H
57、 ;是否為第1行 JNZ L2 ;不是則繼續(xù)判斷 MOV AL,00H ;設(shè)置第1行第1列的對(duì)應(yīng)的鍵值 JMP KCODE BEGIN1: JMP BEGIN L2: TEST AL,02H ;是否為第2行 JNZ L3 ;不是則繼續(xù)判斷 MOV AL,04H ;設(shè)置第2行第1列的對(duì)應(yīng)的鍵值 J
58、MP KCODE L3: TEST AL,04H ;是否為第3行 JNZ L4 ;不是則繼續(xù)判斷 MOV AL,08H ;設(shè)置第3行第1列的對(duì)應(yīng)的鍵值 JMP KCODE L4: TEST AL,08H ;是否為第4行 JNZ NEXT ;不是則繼續(xù)判斷 MOV AL,0CH ;設(shè)置第4行第1
59、列的對(duì)應(yīng)的鍵值 KCODE: ADD AL,CL ;將第1列的值加上當(dāng)前列數(shù),確定按鍵值 CALL PUTBUF ;保存按鍵值 PUSH AX KON: CALL DIS ;顯示刷新 CALL CLEAR ;清屏 CALL CCSCAN ;掃描按鍵,判斷按鍵是否彈起 JNZ KON ;未彈起則繼續(xù)循環(huán)等待彈起 POP AX NEXT: INC CL
60、 ;當(dāng)前檢測(cè)的列數(shù)遞增 MOV AL,CH TEST AL,08H ;檢測(cè)是否掃描到第4列 JZ BEGIN1 ROL AL,1 ;沒檢測(cè)到第4列則準(zhǔn)備檢測(cè)下一列 MOV CH,AL JMP COLUM GOBACK1: RET KEYSCAN ENDP CCSCAN PROC NEAR ;掃描是否有按鍵閉合子程序 MOV AL,00H
61、 MOV DX,MY8255_A ;將4列全選通,X1~X4置0 OUT DX,AL MOV DX,MY8255_C IN AL,DX ;讀Y1~Y4 NOT AL AND AL,0FH ;取出Y1~Y4的反值 RET CCSCAN ENDP CLEAR PROC NEAR ;清除數(shù)碼管顯示子程序
62、MOV DX,MY8255_B ;段位置0即可清除數(shù)碼管顯示 MOV AL,00H OUT DX,AL RET CLEAR ENDP DIS PROC NEAR ;顯示鍵值子程序 PUSH AX PUSH SI MOV SI,3006H MOV DL,0F7H MOV AL,DL AGAIN: PUSH DX
63、 MOV DX,MY8255_A OUT DX,AL ;設(shè)置X1~X4,選通一個(gè)數(shù)碼管 MOV AL,[SI] ;取出緩沖區(qū)中存放鍵值 MOV BX,OFFSET DTABLE AND AX,00FFH ADD BX,AX MOV AL,[BX] MOV DX,MY8255_B OUT DX,AL
64、 ;寫入數(shù)碼管A~Dp CALL DALLY DEC SI DEC SI ;取下一個(gè)鍵值 POP DX MOV AL,DL TEST AL,01H ;判斷是否顯示完? JZ OUT1 ;顯示完,返回 ROR AL,1 MOV DL,AL JMP AGAIN ;未顯示完,跳回繼續(xù) OUT1: POP S
65、I POP AX RET DIS ENDP PUTBUF PROC NEAR ;保存鍵值子程序 MOV SI,3000H CMP AL,00H ;是否案件0按下 JNZ MODE MDL: CMP [SI+4],01H JZ MDL1 MOV [SI+4],01H JMP LAST MDL1: MOV [SI+4],02H JMP LAST MODE
66、: CMP AL,01H ;是否案件1按下 JNZ STOP CMP [SI+0CH],01H JZ MODE1 MOV [SI+0CH],01H ;打開進(jìn)入電機(jī)程序標(biāo)志 JMP LAST CMP AL,03H MOV [SI+0EH],02H ;關(guān)閉進(jìn)入電機(jī)程序標(biāo)志 MODE1: MOV [SI+0CH],02H ;是否案件2按下 JMP LAST STOP: CMP AL,02H ;比較暫停標(biāo)志變量 JNZ GRD1 MOV [SI+0CH],02H ;關(guān)閉進(jìn)入電機(jī)程序標(biāo)志 MOV TIME1,05H ;洗滌,甩干次數(shù)重置 MOV TIME2,05H MOV [SI+4],01H ;重置洗滌模式 MOV [SI+6],02H
- 溫馨提示:
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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)英語語法詳解:常見冠詞及用法練習(xí)
- 小學(xué)常用100個(gè)英語口語
- 小學(xué)英語的39個(gè)知識(shí)點(diǎn)
- 小學(xué)英語選擇題解題方法
- 小學(xué)英語介詞用法解析
- 小學(xué)英語的詞綴用法
- 黨課PPT課件含講稿:以高質(zhì)量法治保障高質(zhì)量發(fā)展
- 小學(xué)英語語法專題一般將來時(shí)講解和練習(xí)
- 小學(xué)英語語法順口溜
- 對(duì)黨忠誠專題黨課PPT課件含講稿
- 小學(xué)英語介詞用法和重點(diǎn)句型練習(xí)題含答案
- 小學(xué)1-6年級(jí)英語語法巧記寶典
- 黨課PPT課件含講稿:筑牢政治忠誠鍛造四個(gè)鐵一般政法鐵軍
- 小學(xué)學(xué)習(xí)資料之衣食住行英語口語總結(jié)
- 小學(xué)英語語法口訣總結(jié)