東南大學(xué)吳健雄學(xué)院微機(jī)專(zhuān)業(yè)課程設(shè)計(jì)電梯控制器_第1頁(yè)
東南大學(xué)吳健雄學(xué)院微機(jī)專(zhuān)業(yè)課程設(shè)計(jì)電梯控制器_第2頁(yè)
東南大學(xué)吳健雄學(xué)院微機(jī)專(zhuān)業(yè)課程設(shè)計(jì)電梯控制器_第3頁(yè)
東南大學(xué)吳健雄學(xué)院微機(jī)專(zhuān)業(yè)課程設(shè)計(jì)電梯控制器_第4頁(yè)
東南大學(xué)吳健雄學(xué)院微機(jī)專(zhuān)業(yè)課程設(shè)計(jì)電梯控制器_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

東南大學(xué)吳健雄學(xué)院《微機(jī)試驗(yàn)及課程設(shè)計(jì)》課程設(shè)計(jì)匯報(bào)FBIWarning:匯編代碼是好幾屆之前一個(gè)學(xué)姐,我只是修改了一下.修改后完美運(yùn)行匯報(bào)是我自己寫(xiě)轉(zhuǎn)載不需要注明出處,就說(shuō)是你寫(xiě)姓名:學(xué)號(hào):專(zhuān)業(yè):吳健雄學(xué)院實(shí)驗(yàn)室:計(jì)算機(jī)硬件試驗(yàn)室組別:同組人員:設(shè)計(jì)時(shí)間:年5月17日——年6月6日評(píng)定成績(jī):審閱老師:目錄一.課程設(shè)計(jì)目標(biāo)和要求……………………2二.方案論證和原理設(shè)計(jì)………………………3三.具體(機(jī)理)設(shè)計(jì)………………………3四.方案實(shí)現(xiàn)和測(cè)試(或調(diào)試)……………6五.分析和總結(jié)………………7一.課程設(shè)計(jì)目標(biāo)和要求設(shè)計(jì)目標(biāo):微機(jī)課程綜合設(shè)計(jì)用于檢驗(yàn)和提升學(xué)生在原理和接口綜合應(yīng)用方面分析問(wèn)題和處理問(wèn)題能力,同時(shí)也給學(xué)生提供更多、愈加好訓(xùn)練機(jī)會(huì),課程給出了10道微機(jī)硬件應(yīng)用綜合測(cè)試題。為完成每道測(cè)試題,最少需要選擇TPC微機(jī)試驗(yàn)裝置中三部分以上硬件電路(還需將它們有機(jī)組合起來(lái))并編制對(duì)應(yīng)應(yīng)用。經(jīng)過(guò)試驗(yàn)還能夠讓學(xué)生愈加好了解所學(xué)知識(shí)在實(shí)際控制中利用,增加對(duì)本專(zhuān)業(yè)認(rèn)識(shí)和學(xué)習(xí)愛(ài)好。設(shè)計(jì)要求:1)設(shè)計(jì)基礎(chǔ)要求用鍵盤(pán)、按鈕、八段碼和LED模擬電梯工作過(guò)程。樓層設(shè)為8層,鍵盤(pán)數(shù)字鍵1~8用來(lái)鍵入期望停樓層,8個(gè)LED顯示期望停樓層,2位八段碼指示電梯目前所在樓層,按鈕用來(lái)啟、停電梯。電梯正常運(yùn)行時(shí)以每2秒1層速度上升或下降。要求“電梯”能按以下方法運(yùn)行:(1)設(shè)目前電梯停在某層(2位八段碼顯示對(duì)應(yīng)樓層,8個(gè)LED全滅)。鍵入1~8數(shù)字鍵,如鍵入數(shù)字和目前電梯停層同,則什么亦不動(dòng)作,若不一樣則對(duì)應(yīng)樓層LED亮;如再按運(yùn)行鍵,則電梯自動(dòng)判別上升或下降(在運(yùn)行過(guò)程中八段碼顯示樓層改變)一直抵達(dá)期望停樓層(八段碼顯示該樓層,對(duì)應(yīng)LED滅);(2)設(shè)目前電梯正在上升或下降運(yùn)行(此時(shí)八段碼顯示樓層改變,LED指示期望抵達(dá)樓層),若鍵入新期望停樓層數(shù)字(對(duì)應(yīng)LED亮),則對(duì)同方向(上升或下降)未到樓層能停,對(duì)其它情況則先停原期望停樓層,然后按運(yùn)行鍵后繼續(xù)運(yùn)行)。以下幾例:①設(shè)電梯目前在2層,向上運(yùn)行,LED指示期望在6層停,此時(shí)若鍵入4,則電梯將在4樓停,若再按運(yùn)行鍵,則繼續(xù)運(yùn)行至6層停;②同上情況,若鍵入不是4而是8,則電梯將先停在6層,再按運(yùn)行鍵,運(yùn)行至8層停;③同上情況,若鍵入不是4(或8),而是1,則電梯先停在6層,再按運(yùn)行鍵,運(yùn)行至1層停。2)深入設(shè)計(jì)要求除運(yùn)行按鈕外,再設(shè)計(jì)多個(gè)按鈕,模擬更多電梯運(yùn)行功效,如:同時(shí)在8*8點(diǎn)陣顯示器顯示上升和下降箭頭,當(dāng)停止時(shí)顯示目前所在樓層號(hào).直達(dá)按鈕。若按此按鈕,電梯按直達(dá)方法運(yùn)行,即對(duì)運(yùn)行期間新鍵入??繕菍樱词故峭较蛭吹綐菍樱┮嗖煌#边_(dá)終點(diǎn)樓層;急停按鈕。電梯運(yùn)行中,若按此按鈕,則電梯立即停在下一抵達(dá)樓層;eq\o\ac(○,4)斷電待修按鈕。按下該鈕電梯不能工作,再按一下才能重新工作;eq\o\ac(○,5)設(shè)置急停開(kāi)關(guān)(K0-K7至一),引入中止處理,立即響應(yīng),就近停靠;分工情況:我跟XXX一組,我關(guān)鍵負(fù)責(zé)程序框架構(gòu)建和大部分代碼編寫(xiě),XXX負(fù)責(zé)其它程序編寫(xiě)和硬件連接等工作。二.方案論證和原理設(shè)計(jì)我們?cè)诔墒炜紤]程序整體要求和框架后,決定把程序總共分為四個(gè)模塊,分別為電梯運(yùn)行模塊,電梯接收請(qǐng)求判定模塊,顯示模塊,計(jì)時(shí)模塊。電梯運(yùn)行模塊是整個(gè)程序主模塊,其關(guān)鍵功效就是判定電梯運(yùn)行方向和??克菍觾?yōu)先次序。電梯接收請(qǐng)求判定模塊關(guān)鍵是應(yīng)急停,直達(dá),等候維修等命令。計(jì)時(shí)模塊用于對(duì)系統(tǒng)每二秒停一樓層計(jì)數(shù)。顯示模塊則包含所要到樓層顯示和運(yùn)行過(guò)程中所到樓層實(shí)時(shí)顯示。有8個(gè)樓層,需要用8個(gè)按鍵模擬電梯中請(qǐng)求按鈕;當(dāng)電梯靜止?fàn)顟B(tài)時(shí),不管外部哪一層有請(qǐng)求,電梯全部由靜止?fàn)顟B(tài)轉(zhuǎn)入向上或向下運(yùn)行狀態(tài),直到抵達(dá)請(qǐng)求樓層;當(dāng)電梯處于向上運(yùn)行狀態(tài)時(shí),此時(shí)高于該樓層向上請(qǐng)求和內(nèi)部請(qǐng)求等級(jí)最高,其次是全部樓層向下請(qǐng)求,再次是低于該樓層向上請(qǐng)求;當(dāng)電梯處于向下運(yùn)行狀態(tài)時(shí)則情況相反;因?yàn)橹兄沟燃?jí)在伴隨電梯所處樓層不一樣而改變,而且中止源比較多。所以用每一個(gè)中止源直接和中止控制器相連,需要用到多個(gè)8259A級(jí)聯(lián),很不方便。為處理這個(gè)問(wèn)題,首先定義三個(gè)單字節(jié)變量REQ_U、REQ_D和REQ_IN分別存放電梯每一層向上、向下和內(nèi)部請(qǐng)求,每一位代表一層。比如,REQ_U為00000110B,這代表在2層和3層有向上請(qǐng)求。8253定時(shí)器每隔20ms產(chǎn)生一次中止,中止程序便去實(shí)施掃描鍵盤(pán),當(dāng)掃描到有電梯內(nèi)部或外部按鍵時(shí),將請(qǐng)求存放到變量中。每到一個(gè)狀態(tài)時(shí)再檢驗(yàn)請(qǐng)求變量REQ_U、REQ_D和REQ_IN值,依據(jù)電梯運(yùn)行方向和變量中請(qǐng)求,來(lái)決定電梯下一步運(yùn)行。設(shè)電梯目前樓層為floor(floor=1~8),運(yùn)行方向?yàn)閐ir(dir=0,向上;dir=1,向下),在電梯運(yùn)行工程中,用數(shù)碼管輸出floor值顯示目前樓層。LED輸出REQ_IN值顯示電梯內(nèi)已經(jīng)請(qǐng)求樓層。關(guān)鍵模塊以下:1.可編程定時(shí)/計(jì)數(shù)器8253定時(shí)/計(jì)數(shù)器8253關(guān)鍵是用于定時(shí)20ms,觸發(fā)中止進(jìn)行鍵盤(pán)掃描。電路連線是CLOCK0接Q6,分頻后頻率為46875Hz,OUT0接中止IRQ2,每20ms中止一次,GATE0接5v。計(jì)數(shù)器初值應(yīng)該是3A9H;2.8255并行接口單元 8255關(guān)鍵是用于數(shù)碼管和發(fā)光二極管數(shù)據(jù)輸出。所以用8255B口8接8個(gè)發(fā)光二極管,A口接數(shù)碼管數(shù)據(jù)端。3LED點(diǎn)陣顯示 因?yàn)樘嵘笮枰@示上下箭頭,所以使用8*8點(diǎn)陣顯示箭頭。4微機(jī)控制器 程序在微機(jī)上運(yùn)行,經(jīng)過(guò)總線控制試驗(yàn)箱上各部件運(yùn)行。三.具體(機(jī)理)設(shè)計(jì)1)軟件步驟圖(總步驟圖)本設(shè)計(jì)軟件設(shè)計(jì)思緒:經(jīng)過(guò)軟件編程使8253輸出定時(shí)信號(hào)申請(qǐng)中止,在中止服務(wù)程序中掃描鍵盤(pán),假如有按鍵,修改對(duì)應(yīng)變量位,并輸出內(nèi)部請(qǐng)求變量REQ_IN到發(fā)光二極管顯示目前內(nèi)部請(qǐng)求樓層。在主程序中,查詢變量值,依據(jù)電梯調(diào)度算法運(yùn)行電梯。圖表SEQ圖表\*ARABIC1電梯系統(tǒng)總步驟圖2)電梯控制算法模塊邏輯實(shí)現(xiàn):當(dāng)電梯向上運(yùn)行時(shí):

在目前層以下向上請(qǐng)求全部被忽略留到下次向上運(yùn)行時(shí)處理。

在目前層以上向上請(qǐng)求全部被統(tǒng)計(jì)留到此次運(yùn)行處理。不管哪層向下請(qǐng)求全部被忽略留到下次向下運(yùn)行時(shí)處理。

當(dāng)電梯向下運(yùn)行時(shí):

在目前層以上向下請(qǐng)求全部被忽略留到下次向下運(yùn)行時(shí)處理。

在目前層以下向下請(qǐng)求全部被統(tǒng)計(jì)留到此次運(yùn)行處理。

不管哪層向上請(qǐng)求全部被忽略留到下次向上運(yùn)行時(shí)處理。算法實(shí)現(xiàn):dir代表電梯運(yùn)行方向,0代表電梯向上運(yùn)行,1代表向下運(yùn)動(dòng)。設(shè)REQ_U(n)代表第n層向上請(qǐng)求,一樣,REQ_D(n)代表第n層向下請(qǐng)求,REQ_IN(n)代表第n層內(nèi)部請(qǐng)求。求next方法為:電梯向上時(shí),next為內(nèi)部請(qǐng)求最小值和向上請(qǐng)求大于floor最小值之間小者。電梯向下時(shí),next為內(nèi)部請(qǐng)求最大值和向下請(qǐng)求中小于floor最大值之間大者。沒(méi)有滿足要求時(shí)返回0。圖表SEQ圖表\*ARABIC2電梯控制算法步驟圖3)LED顯示程序:本設(shè)計(jì)只用到了一個(gè)LED,只要將floor轉(zhuǎn)換為對(duì)應(yīng)段碼。先輸出位碼,再輸出段碼,循環(huán)輸出就能夠動(dòng)態(tài)顯示。為了循環(huán)顯示,將LED顯示程序放在中止服務(wù)程序中。(將“樓層”作偏移碼,利用XLAT,很簡(jiǎn)單就能夠?qū)崿F(xiàn)譯碼)圖表SEQ圖表\*ARABIC3電梯按鍵、顯示中止步驟圖 VCC4)硬件連接圖VCC280H28bH1MHz/CS PA0-7 PB0-7PC0 8255/CSCLK0280H28bH1MHz/CS PA0-7 PB0-7PC0 8255/CSCLK0GATE0 OUT0 CLK1GATE1 OUT1 8253八段碼數(shù)碼管八段碼數(shù)碼管LEDLED小燈急停開(kāi)關(guān)急停開(kāi)關(guān)四.方案實(shí)現(xiàn)和測(cè)試(或調(diào)試)首先依據(jù)設(shè)計(jì)思緒,選擇采取8253和8255芯片,規(guī)避了使用較為復(fù)雜中止。然后調(diào)試硬件,確定位選、芯片等工作正常。這能夠經(jīng)過(guò)手動(dòng)輸入控制字,進(jìn)行簡(jiǎn)單輸入輸出實(shí)現(xiàn)。然后確定8253、8255芯片地址,開(kāi)始軟件編程。 軟件編程首先完成整體邏輯框架,然后具體編寫(xiě)子程序。剛開(kāi)始時(shí)采取軟件延時(shí),優(yōu)先調(diào)試8255。采取8255A、B口0方法,A、B口改變將反應(yīng)在八段碼和LED燈上。子程序編寫(xiě)立即設(shè)計(jì)好算法轉(zhuǎn)換為程序流,用程序流方向?qū)崿F(xiàn)選擇,用調(diào)用子程序?qū)崿F(xiàn)具體操作。然后加入8253硬件延時(shí),將OUT1連至PC0,經(jīng)過(guò)不停查詢PC0口狀態(tài)進(jìn)行延時(shí)。因?yàn)榍懊?255已經(jīng)調(diào)好,所以8253調(diào)試比較順利。 最終將全部硬件連線接好,進(jìn)行整機(jī)聯(lián)調(diào)。當(dāng)中發(fā)覺(jué)很多問(wèn)題,首先利用示波器排除硬件故障,再回過(guò)頭來(lái)對(duì)軟件進(jìn)行單步,這時(shí)因?yàn)橛鞋F(xiàn)象,進(jìn)行軟件調(diào)試時(shí)候也更有針對(duì)性。經(jīng)過(guò)設(shè)置斷點(diǎn),逐步跟蹤寄存器值,經(jīng)過(guò)幾次修改以后,成功實(shí)現(xiàn)了預(yù)定方案。因?yàn)閿?shù)碼管和LED燈顯示全部是采取查表法,依據(jù)輸入字符ASCII碼查表得到輸出,有時(shí)出現(xiàn)LED不正常亮滅現(xiàn)象,是在查表時(shí)犯錯(cuò),比如沒(méi)有減去31H,就會(huì)使燈顯示雜亂無(wú)章。實(shí)物連接圖:五.分析和總結(jié)1)設(shè)計(jì)要求每次電梯開(kāi)關(guān)時(shí)間為2秒,而一開(kāi)始我們無(wú)法確保正確時(shí)間。以后經(jīng)過(guò)討論后發(fā)覺(jué)能夠用8253計(jì)數(shù)器達(dá)成此功效,我們翻閱書(shū)籍后分別用方法3和方法0實(shí)現(xiàn)了正確2秒要求。2)編程中碰到大多是邏輯問(wèn)題.另一個(gè)常常碰到問(wèn)題就是跳轉(zhuǎn)語(yǔ)句超出范圍錯(cuò)誤,這個(gè)錯(cuò)誤處理是經(jīng)過(guò)改變語(yǔ)句次序,如實(shí)在無(wú)法經(jīng)過(guò)改變次序來(lái)消除錯(cuò)誤,則經(jīng)過(guò)二次跳轉(zhuǎn),即跳過(guò)中間過(guò)程再跳至目標(biāo)。3)我們寫(xiě)電梯程序,d意義為目前樓層,當(dāng)輸入要去樓層bl時(shí),判定bl和cl大小關(guān)系,假設(shè)bl>cl,則程序先把cl加1,再延時(shí)兩秒,再比較bl和cl大小是否相等,假如相等則跳出,不等則把cl加1,再延時(shí),再判定。4)當(dāng)在上行過(guò)程中再輸入另一個(gè)想去樓層ch時(shí),則跳轉(zhuǎn)至ch處理過(guò)程。因?yàn)槭窃谘訒r(shí)前就把cl加1了,所以在這上行兩秒內(nèi),cl已經(jīng)上了一層了。所以就必需判定ch和bl是否和此時(shí)cl相等,如相等則在立即抵達(dá)這一層停。因?yàn)橐婚_(kāi)始我們來(lái)判定bl和cl是否相等,造成假如在立即到bl層時(shí)候按下ch則會(huì)使cl不停增大,即ASCII碼不停增大,又返回至0,又增大至bl才停止。5)另外一個(gè)問(wèn)題就是8個(gè)LED顯示要去哪個(gè)樓層問(wèn)題。我們是用數(shù)據(jù)DD0—DD7接到74LS273輸出。bl,ch同時(shí)要被顯示。我們于是就把bl,ch0,1,2,3,…..8分別對(duì)應(yīng)于0B,1B,10B,………10000000B,然后把二者相加就能顯示了。假如抵達(dá)bl則把bl賦為0,則對(duì)應(yīng)燈滅。假如抵達(dá)ch,則把ch賦為0,則ch對(duì)應(yīng)樓層燈滅。現(xiàn)在假如輸入ch等于bl,按要求是對(duì)應(yīng)燈亮,到該層停,而實(shí)際上變成上一層燈亮,因?yàn)閏h和bl對(duì)應(yīng)二進(jìn)制相加,產(chǎn)生進(jìn)位。處理方法是,假如bl,ch相等,則先把cl復(fù)位為0,然后再調(diào)用LED顯示。6)電梯這個(gè)題目標(biāo)特點(diǎn)就是狀態(tài)多,多種大小循環(huán)相互嵌套,極難寫(xiě)代碼。不過(guò),因?yàn)槊恳粚哟a全部是相同,在調(diào)試出某一層以后,其它七層代碼也很好寫(xiě)。在設(shè)計(jì)過(guò)程中我們碰到了很多問(wèn)題,而匯編語(yǔ)言本身不是像高級(jí)語(yǔ)言一樣直觀和簡(jiǎn)練,剛開(kāi)始走了不少?gòu)澛罚煌U{(diào)試和查資料以后感覺(jué)好多了,程序編寫(xiě)速度也大大加緊了。試驗(yàn)過(guò)程中,我不停翻書(shū),鞏固了上課沒(méi)聽(tīng)懂知識(shí),加深了對(duì)各個(gè)芯片直觀印象,也培養(yǎng)了細(xì)心試驗(yàn)?zāi)芰Α⒖紩?shū)目:楊素行等,《微型計(jì)算機(jī)系統(tǒng)原理及應(yīng)用》,北京,清華大學(xué)出版社,東南大學(xué)微機(jī)系統(tǒng)和接口課程組,《微機(jī)試驗(yàn)及課程設(shè)計(jì)教程試用版3.0》,南京,東南大學(xué)出版社,附錄.代碼程序datasegmentioport equ0ec00h-0280hio8253a equioport+280h;0計(jì)數(shù)端口計(jì)數(shù)為10000,方法3io8253b equioport+281h;1計(jì)數(shù)端口計(jì)數(shù)為200,方法0io8253c equioport+283h;8253控制端;shangmianshi8253io8255a equioport+288h;8255控制端和a,b,c端口地址io8255b equioport+289hio8255c equioport+28ahio8255 equioport+28bhproth equioport+290h;點(diǎn)陣燈顯示,行陣protlr equioport+298h;點(diǎn)陣燈顯示,列陣number db3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;七段碼min db00h,01h,02h,03h,04h,05h,06h,07h;點(diǎn)陣行;buff1 db10h,30h,7fh,0ffh,0ffh,7fh,30h,10h;向上箭頭buff1 db10h,20h,40h,0ffh,0ffh,40h,20h,10h;buff2 db08h,0ch,0feh,0ffh,0ffh,0feh,0ch,08h;向下箭頭buff2 db08h,04h,02h,0ffh,0ffh,02h,04h,08hbuff3 db00h,00h,00h,00h,00h,00h,00h,00hmenu db'************************************************',0DH,0AH db'*DianTiKongZhiQi---elevator*',0Dh,0Ah db'*61010207JiaXiawen *',0DH,0AH db'*61010317YuHailei*',0Dh,0Ah db'************************************************',0Dh,0Ah db'inputanumbertogotothecorrespondinglevel',0DH,0AH db'esc----------exit',0DH,0AH db'enter--------go',0DH,0AH db'z------------godirectly',0Dh,0Ah db'x------------quickstop',0Dh,0Ah db'c------------waitingforfixing',0Dh,0Ah db '280H----8253CS',0Dh,0Ah db'1MHz----8253_clk0',0Dh,0Ah db'VCC----8253_gate0',0Dh,0Ah db '8253_clk1----8253_out0',0Dh,0Ah db '8253_gate1----K0',0Dh,0Ah db '8253_out1----8255_PC0',0Dh,0Ah db '28bH----8255_cs',0Dh,0Ah db 'PA0~7----SHUMAGUAN',0Dh,0Ah db 'PB0~7----led0~7',0Dh,0Ah db'MOVE!',0Dh,0Ah,'$'dataendsstackssegmentstack db100dup(?)stacksendscodesegmentassume cs:code,ds:data,ss:stacksstart: movax,data;初始化movds,ax movdx,offsetmenu;打印菜單,說(shuō)明硬件電路連接等 movah,09 int21hmovdx,io8255;8255初始化,a、b輸出,c口輸入moval,89houtdx,almovbl,31h;bl代表目前電梯所在樓層,初始值設(shè)為1main:moval,0callshownumber;顯示目前樓層movcl,0;cl為第一次輸入要去樓層movch,0;ch為在中途中再次輸入要去樓層callshowledmovah,01;經(jīng)過(guò)鍵盤(pán)輸入第一次要去得樓層clint21hcmpal,1bh;是esc則退出jeexitcmpal,31h;鍵入數(shù)字是否在1-8之間,如不是重新輸入jlmaincmpal,38h;跟8比較,假如比8大,則循環(huán)輸入jgmainmovcl,alcallshowled;8個(gè)led燈顯示cl對(duì)應(yīng)樓層cmpcl,bl;cl和bl比較jemain;相等則返回重新輸入jgup;大于則向上運(yùn)行 jltodown;小于則向下運(yùn)行exit:movah,4chint21h;---------------------------------------------------------------------------------電梯上行up: calljudge;電梯上行情況up1:addbl,1callupdelay;調(diào)用向上運(yùn)行延時(shí)子程序,出現(xiàn)向上箭頭callshownumber;調(diào)用顯示子程序,經(jīng)過(guò)數(shù)碼管顯示目前樓層blcmpbl,cl;bl,cl不等則繼續(xù)jemain;相等則返回 jmpup1upgetch:movah,1;在上升過(guò)程中假如有其它鍵按下時(shí)int21h cmpal,78h;判定是否為急停鍵x jejit cmpal,63h;判定是否為斷電待修鍵c jeduandiancmpal,31h;數(shù)字是否在1-8之間如不是繼續(xù)上行jlgotoupcmpal,38hjggotoupmovch,al callshowledcalldelayupcallshownumbercalljudgeequ;判定目前樓層和第一次要去樓層是否相同cmpch,bl;比較ch和bl區(qū)分jeloucengxiangdeng;相等則在該層停,等候運(yùn)行信號(hào)輸入jlxianshanghouxia;ch小于bl則先上行至cl在下行至chcmpch,cl;ch大于bl則在判定ch和cl大小關(guān)系jexiangdengup;相等則一直上行至cljlsameup;ch大于bl小于cl則先上行到ch在上行到cljgtosameup2;ch大于cl則先上行到cl在上行到chgotoup:calldelayupjmpup1duandian: moval,0;上升時(shí)碰到了斷電情況,則等候鍵入,除非再次鍵入為c才繼續(xù)運(yùn)行 movah,7 int21h cmpal,63h jneduandian calldelayup callshownumber jmpup1jit: calldelayup;上升時(shí)碰到了急停情況,則停在下一層,然后回到main callshownumber jmpmaintodown:jmpdownupdelayprocnear;向上運(yùn)行延時(shí)子程序calldelayfirst;用于初始化8253pushdx callcleardots;調(diào)用使其能夠清零updelay1:calldotsup;循環(huán)調(diào)用向上箭頭顯示 movah,1;鍵盤(pán)是否有輸入int16hjneupgetch;如有則跳轉(zhuǎn)到輸入處理movdx,io8255c;8255c口輸入,看2s延時(shí)是否結(jié)束inal,dxandal,01;是否計(jì)時(shí)結(jié)束jzupdelay1popdxretupdelayendptomain:jmpmaintosameup2:jmpsameup2;---------------------------------------------------------------------------------上行中碰到多種情況列舉loucengxiangdeng:callshownumber;第二次要去得樓層和目前樓層相同,直接停在該層movch,0callshowledcallstop2callupcljmpmainxianshanghouxia:callshowled;先上行到cl再下行到chcallupclmovcl,0callshowledcallstop2 calldownchjmpmainxiangdengup:movch,0;二次要去樓層和第一次要去相同,直接上行到第一次要取得樓層 callshowled callupcl jmpmainsameup:callshowled;同方向樓層,先上行到ch再上行到clcallupchmovch,0callshowledcallstop2 callupcljmpmainsameup2:callshowled;同方向樓層,先上行到cl再上行到ch;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;------------------------callupclmovcl,0callshowled callstop2 callupchjmpmainjittt: jmpjit;----------------------------------------------------------電梯下行,和電梯上行情況基礎(chǔ)類(lèi)似,稍作修改即可down: calljudgedown1: subbl,1calldowndelaycallshownumber cmpbl,cl jetomainjmpdown1downgetch:movah,1 int21h cmpal,78h jejit1 cmpal,63h jeduandian1 cmpal,31h jlgotodown cmpal,38h jggotodown movch,al callshowled calldelaydown callshownumber calljudgeequ cmpch,bl jestopdowncl jgdownclupch;ch大于bl則先下行至cl在上行至ch cmpch,cl;ch小于bl則在判定ch和cl大小關(guān)系 jejmpdowncl;相等則一直下行至cl jldowncldownch;ch小于bl小于cl則先下行到cl在下行到ch jgtodownchdowncl;ch大于cl則先下行到ch在下行到clgotodown:calldelaydown jmpdown1duandian1: moval,0;下降碰到了斷電情況,則等候鍵入,除非再次鍵入為c才繼續(xù)運(yùn)行 movah,7 int21h cmpal,63h jneduandian1 calldelaydown callshownumber jmpdown1jit1: calldelaydown;下降時(shí)碰到了急停情況,則停在下一層,然后回到main callshownumber jmpmaindowndelayprocnear;向下運(yùn)行延時(shí)子程序,和向上運(yùn)行延時(shí)子程序大致相同calldelayfirst pushdx callcleardots;調(diào)用使其能夠清零ddy: calldotsdown;循環(huán)調(diào)用向下箭頭顯示 movah,1 int16h jnedowngetchmovdx,io8255cinal,dx andal,01 jzddy popdx retdowndelayendptodownchdowncl:jmpdownchdowncl;---------------------------------------------------------------------------------下行中碰到多種情況列舉stopdowncl:callshowled movch,0 callshowled callstop2 calldowncl jmpmaindownclupch:callshowled calldowncl movcl,0 callshowled callstop2 callupch jmpmainjmpdowncl:movch,0 callshowled calldowncl jmpmaindowncldownch:callshowled calldowncl movcl,0 callshowled callstop2 calldownch jmpmaindownchdowncl:callshowled calldownch movch,0 callshowled callstop2 calldowncl jmpmain;--------------------------------------------------------------------電梯上、下行中碰到多種情況處理方法jitt: jmpjitttjudgeequprocnear;判定目前樓層和第一次要去樓層關(guān)系cmpcl,bljnebackcmpcl,ch jeclequch movcl,0 callshownumbercallshowledcallstop2 cmpch,bljgupchhere jldownchhereupchhere:callupchjmpmaindownchhere:calldownchjmpmainclequch:movch,0 callshowledcallonlydelay;jmpmainback:retjudgeequendpupclprocnear;上行到cl子程序upcl1:incbl calldirdelay1 callshownumber cmpbl,cl jlupcl1 retupclendpjitt1: jmpjit1upchprocnear;上行到ch子程序upch1:addbl,1 calldirdelay1 callshownumbercmpbl,ch jlupch1 retupchendpdownclprocnear;下行到cl子程序downcl1:subbl,1 calldirdelay2callshownumbercmpbl,cl jgdowncl1retdownclendpdownchprocnear;下行到ch子程序downch1:subbl,1calldirdelay2callshownumber cmpbl,chjgdownch1 retdownchendp;----------------------------------------------------------------------直接上下行時(shí)對(duì)按鍵情況處理stop2procnear;沒(méi)有直達(dá)鍵暫停子程序gostop2:moval,0movah,1 int21h cmpal,13 jnegostop2 moval,0retstop2endpdirgetch1:movah,1;直接上行對(duì)按鍵處理int21h cmpal,63h jedirduandian1 cmpal,78h jejit21 jmpdirback1dirgetch2:movah,1;直接下行對(duì)按鍵處理int21h cmpal,63h jedirduandian2 cmpal,78h jejit22 jmpdirback2jit21: calldelayup; callshownumber jmpmainjit22: calldelaydown; callshownumber jmpmaindirduandian1:moval,0;直接上行時(shí)碰到了斷電待修情況 movah,1 int21h cmpal,63h jnedirduandian1 calldelayup; callshownumberjmpdirback1dirduandian2:moval,0;直接下行時(shí)碰到了斷電待修情況 movah,1 int21h cmpal,63h jnedirduandian2 calldelaydown; callshownumberjmpdirback2tojit: jmpjittdirdelay1procnear;直接上行延時(shí)子程序calldelayfirstpushdx callcleardotsdirback1:calldotsup; movah,1 int16h jnedirgetch1movdx,io8255cinal,dxandal,01jzdirback1popdxretdirdelay1endptojit1: jmpjitt1dirdelay2procnear;直接下行延時(shí)子程序calldelayfirstpushdx callcleardotsdirback2:calldotsdown; movah,1 int16h jnedirgetch2movdx,io8255cinal,dxandal,01jzdirback2popdxretdirdelay2endp;----------------------------------------------------------------------直達(dá)情況處理judgeprocnear;判定是否為直達(dá)鍵,假如是就直接抵達(dá),假如為enter正常實(shí)施next1: moval,0 movah,1 int21h cmpal,7ah;是否為直達(dá)鍵 jezhida cmpal,13 jnenext1 moval,0 retjudgeendpzhida: cmpcl,bl jlzhidadown jgzhidaup jmpmainzhidadown:calldelaydown subbl,1 callzhidadelay2 callshownumber jmpzhidazhidaup:calldelayup addbl,1 callzhidadelay1 callshownumber jmpzhidazhidabutton1:movah,1;直達(dá)對(duì)按鍵情況處理,在上升時(shí)跳到此處 int21h cmpal,63h jezhidaduandian1 cmpal,78h jetojit jmpzhidazhidabutton2:movah,1;直達(dá)對(duì)按鍵情況處理,在下降時(shí)跳到此處 int21h cmpal,63h jezhidaduandian2 cmpal,78h jetojit1 jmpzhidazhidaduandian1:moval,0;上升時(shí)碰到斷電待修時(shí) movah,1 int21h cmpal,63h;;;;;;;;;;;;c jnezhidaduandian1 calldelayup; callshownumber jmpzhidazhidaduandian2:moval,0;下降時(shí)碰到斷電待修時(shí) movah,1 int21h cmpal,63h jnezhidaduandian2 calldelaydown; callshownumber jmpzhidazhidadelay1procnear;直達(dá)延時(shí)程序 calldelayfirst pushdx callcleardotsnext21: calldotsup; movah,1 int16h jnezhidabutton1 movdx,io8255c inal,dx andal,01 jznext21 popdx retzhidadelay1endpzhidadelay2procnear;直達(dá)延時(shí)程序 calldelayfirst pushdx callcleardotsnext22: calldotsdown; movah,1 int16h jnezhidabutton2 movdx,io8255c inal,dx andal,01 jznext22 popdx retzhidadelay2endp;------------------------------------------------------------------------------判定延時(shí)是否結(jié)束和8253初始化delayfirstprocnear;初始化8253子程序,兩計(jì)數(shù)器連級(jí),接入1MHZ脈沖,2s每次第二個(gè)out接pc0pushdx movdx,io8253c;8253計(jì)數(shù)器0置方法3moval,36houtdx,almovdx,io8253a;計(jì)數(shù)器0初始值為10000movax,10000outdx,almoval,ahoutdx,al movdx,io8253c;8253計(jì)數(shù)器1置方法0 moval,70h outdx,almovdx,io8253b;計(jì)數(shù)器1初始值為200 movax,200 outdx,al moval,ahoutdx,al popdx retdelayfirstendponlydelayprocnear;判定延時(shí)時(shí)是否結(jié)束子程序,注意因?yàn)辄c(diǎn)陣燈顯示要寫(xiě)進(jìn)循環(huán)中,所以分類(lèi),該延時(shí)僅用于延時(shí) pushdxdelayx:movdx,io8255c inal,dx;查詢8255Pc0是否為高電平 andal,01 jzdelayx popdx retonlydelayendpdelayupprocnear;判定上升延時(shí)是否結(jié)束子程序,包含了顯示向上箭頭部分 pushdx callcleardotsdelayy: calldotsup movdx,io8255c inal,dx;查詢8255Pc0是否為高電平 andal,01 jzdelayy popdx retdelayupendpdelaydownprocnear;判定下降延時(shí)是否結(jié)束子程序,包含了顯示向下箭頭部分 pushdx callcleardotsdelayz: calldotsdown movdx,io8255c inal,dx;查詢8255Pc0是否為高電平 andal,01 jzdelayz popdx retdelaydownendp;----------------------------------------------------------------------------------------------顯示子程序cleardotsprocnear;用于對(duì)點(diǎn)陣顯示清零,在第一次要循環(huán)前使用 pushdx pushax moval,00 movdx,protlr outdx,al popaxpopdxcleardotsendpdotsupprocnear;點(diǎn)陣箭頭顯示,向上箭頭顯示子程序 pushcx pushaxpushbx movcx,0008hmovsi,offsetminmovah,01movex:moval,[si] movbx,offsetbuff1 xlat;得到第一行碼 movdx,proth outdx,al moval,ah movdx,protlroutdx,al;顯示第一行紅 shlah,01 incsi pushcx movcx,0ffffhdelayp:loopdelayp;延時(shí) popcx loopmovex popbx popax popcx retdotsupendpdotsdownprocnear;點(diǎn)陣箭頭顯示,向下箭頭顯示子程序 pushcx pushaxpushbx movcx,0008h movsi,offsetminmovah,01movey: moval,[si] movbx,offsetbuff2 xlat;得到第一行碼 movdx,proth outdx,al moval,ah movdx,protlr outdx,al;顯示第一行紅 shlah,01 incsi pushcx movcx,0ffffhdelayq:loo

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論