




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、word格式文檔東南大學吳健雄學院微機實驗及課程設計課程設計報告FBI Warning:匯編代碼是好幾屆之前的一個學姐的,我只是修改了一下.修改后完美運行報告是我自己寫的轉載不需要注明出處,就說是你寫的姓 名:學 號:專 業:吳健雄學院實 驗 室:計算機硬件實驗室組 別:同組人員:設計時間:2012年5月17日 2012 年6月6日評定成績:審閱教師:目錄.課程設計目的與要求 22 .方案論證與原理設計 33 .詳細(機理)設計 34 .方案實現與測試(或調試) 65 .分析與總結 7專業整理課程設計目的與要求設計目的:微機課程綜合設計用于檢驗和提高學生在原理與接口綜合應用方面分析問題與解決問
2、題的能力,同時也給學生提供更多、更好的訓練機會,課程給出了10道微機硬件應用綜合測試題。為完成每道測試題,至少需要選用TPC微機實驗裝置中三部分以上的硬件電路(還需將它們有機組合起來) 并編制相應的應用。通過試驗還能夠讓學生更好的了解所學知識在實際控制中的運用,增加對本專業的認識和學習興趣。設計要求:1)設計基本要求用鍵盤、按鈕、八段碼和 LED模擬電梯工作過程。樓層設為 8層,鍵盤數字鍵18用來鍵入希望停的樓層,8個LED顯示希望停的樓層,2位八段碼指示電梯當前所在樓層,按鈕用來啟、停電梯。電梯正常運行時以每2秒1層的速度上升或下降。要求“電梯”能按以下方式運行:(1)設當前電梯停在某層(2
3、位八段碼顯示相應樓層,8個LED全滅)。鍵入18數字鍵,如鍵入的數字與當前電梯停層同,則什么亦不動作,若不同則相應樓層的LED亮;如再按運行鍵,則電梯自動判別上升或下降(在運行過程中八段碼顯示樓層變化)一直到達希望停的樓層(八段碼顯示該樓層,相應LED滅);(2)設當前電梯正在上升或下降運行(此時八段碼顯示樓層變化,LED指示希望抵達的樓層),若鍵入新的希望停的樓層數字(相應的LED亮),則對同方向(上升或下降)未到的樓層能停,對其它情況則先停原希望停的樓層,然后按運行鍵后繼續運行)。如下幾例: 設電梯當前在2層,向上運行,LED指示希望在6層停,此日若鍵入4,則電梯將在4樓停,若再按運 行鍵
4、,則繼續運行至6層停; 同上情況,若鍵入的不是 4而是8,則電梯將先停在6層,再按運行鍵,運行至 8層停;同上情況,若鍵入的不是 4 (或8),而是1,則電梯先停在6層,再按運行鍵,運行至1層停。2)進一步設計要求除運行按鈕外,再設計幾個按鈕,模擬更多的電梯運行功能,如: 同步在8*8點陣顯示器顯示上升與下降箭頭 ,當停止時顯示當前所在樓層號 .直達按鈕。若按此按鈕,電梯按直達方式運行,即對運行期間新鍵入的??繕菍樱词故峭较蛭吹?樓層)亦不停,直達終點樓層;急停按鈕。電梯運行中,若按此按鈕,則電梯立即停在下一到達的樓層; 斷電待修按鈕。按下該鈕電梯不能工作,再按一下才能重新工作;設置急停開
5、關(K0-K7至一),引入中斷處理,立即響應,就近???分工情況:我跟XXX一組,我主要負責程序框架的構建和大部分代碼的編寫,XXX負責其他的程序編寫和硬件連接等工作。二.方案論證與原理設計我們在成熟考慮程序的整體要求和框架后,決定把程序總共分為四個模塊,分別為電梯運行模塊,電 梯接受請求判斷模塊,顯示模塊,計時模塊。電梯運行模塊是整個程序的主模塊,其主要功能就是判斷電梯的運行方向和??克菍拥膬炏软?序。電梯接受請求判斷模塊主要是應急停,直達,等待維修等命令。計時模塊用于對系統每二秒停一樓層 的計數。顯示模塊則包括所要到的樓層的顯示和運行過程中所到樓層的實時顯示。有8個樓層,需要用8個按
6、鍵模擬電梯中的請求按鈕;當電梯靜止狀態時,無論外部哪一層有請求,電梯都由靜止狀態轉入向上或向下運行的狀態,直到到 達請求的樓層;當電梯處于向上運行的狀態時,此時高于該樓層向上的請求和內部請求級別最高,其次是 所有樓層向下的請求,再次是低于該樓層向上的請求;當電梯處于向下運行的狀態時則情況相反;由于中斷級別在隨著電梯所處樓層的不同而變化,而且中斷源比較多。所以用每一個中斷源直接和中斷控制器相連,需要用到多個8259A級聯,很不方便。為解決這個問題,首先定義三個單字節變量REQ_UREQ_D和REQ_IN分別存儲電梯每一層向上、向下和內部的請求,每一位代表一層。例如,REQ_U為00000110B
7、,這代表在2層和3層有向上白請求。8253定時器每隔20ms產生一次中斷,中斷程序便去執行 掃描鍵盤,當掃描到有電梯內部或者外部按鍵時,將請求存儲到變量中。每到一個狀態時再檢查請求變量REQ_U REQ_印REQ_IN的值,根據電梯的運行方向和變量中的請求,來決定電梯下一步的運行。設電梯的當前樓層為 floor (floor=18 ),運行方向為 dir (dir=0 ,向上;dir=1 ,向下),在電梯運 行的工程中,用數碼管輸出floor值顯示當前的樓層。LED輸出REQ_IN的值顯示電梯內已經請求的樓層。主要的模塊如下:1.可編程定時/計數器8253定時/計數器8253主要是用于定時20
8、ms,觸發中斷進行鍵盤掃描。電路連線是CLOCK展Q5分頻后頻率為46875Hz, OUT唳中斷IRQ2,每20ms中斷一次,GATE唳5v。計數器的初值應該是 3A9H 2. 8255并行接口單元8255主要是用于數碼管和發光二極管的數據輸出。所以用8255B 口 8接8個發光二極管,A 口接數碼管的數據端。3 LED點陣顯示由于提高要求需要顯示上下箭頭,所以使用8*8點陣顯示箭頭。4微機控制器程序在微機上運行,通過總線控制實驗箱上各部件的運行。三.詳細(機理)設計1)軟件流程圖(總流程圖)本設計的軟件設計的思路:通過軟件編程使8253輸出定時信號申請中斷,在中斷服務程序中掃描鍵盤,如果有按
9、鍵,修改相應的變量位,并輸出內部請求變量REQ_IN到發光二極管顯示當前的內部請求樓層。在主程序中,查詢變量的值,根據電梯調度算法運行電梯。初始化各芯片N?V等待輸入于海磊61010317退出程序向下運行先到目標樓層先到新插入樓層IY T調用八段碼和 LED顯示子程序圖表1電梯系統總流程圖2)電梯控制算法模塊邏輯實現:當電梯向上運行時:a)位于當前層以下的向上請求都被忽略留到下次向上運行時處理。b)位于當前層以上的向上請求都被記錄留到此次運行處理。c)無論哪層的向下請求都被忽略留到下次向下運行時處理。當電梯向下運行時:a)位于當前層以上的向下請求都被忽略留到下次向下運行時處理。b)位于當前層以
10、下的向下請求都被記錄留到此次運行處理。c)無論哪層的向上請求都被忽略留到下次向上運行時處理。算法實現:dir代表電梯的運行方向,0代表電梯向上運行,1代表向下運動。設REQ_U(n)(弋表第n層向上的請求, 同樣,REQ_D(n)代表第n層向下的請求,REQ_IN(n)代表第n層內部的請求。求next的方法為:電梯向上 時,next為內部請求的最小值和向上請求的大于floor的最小值之間的小者。電梯向下時,next為內部請求的最大值和向下請求中小于floor的最大值之間的大者。沒有滿足要求的時返回0。dir0floor + +延時清除請求變量 相應位并延時清除請求變量 相應位并延時圖表2電梯控
11、制算法流程圖3) LED顯示程序:本設計只用到了一個LED,只要將floor轉換為相應的段碼。先輸出位碼,再輸出段碼,循環輸出就可以動態顯示。為了循環的顯示,將LED顯示程序放在中斷服務程序中。(將“樓層”作偏移碼,利用XLAT很簡單就可以實現譯碼)圖表3電梯按鍵、顯示中斷流程圖4)硬件連接圖VCC四.方案實現與測試(或調試)首先根據設計思路,選擇采用8253和8255芯片,規避了使用較為復雜的中斷。然后調試硬件,8253、確定位選、芯片等工作正常。這可以通過手動輸入控制字,進行簡單輸入輸出實現。然后確定 8255芯片的地址,開始軟件編程。軟件編程首先完成整體的邏輯框架,然后具體編寫子程序。剛
12、開始時采用軟件延時,優先調試8255。采用8255的A、B 口的0方式,A B 口的變化將反映在八段碼和LED燈上。子程序的編寫即將設計好的算法轉換為程序流,用程序流的方向實現選擇,用調用子程序實現具體操作。然后加入8253的硬件延時,將 OUT1連至PCQ通過不斷查詢 PC0口的狀態進行延時。由于前面 8255已經調好,所 以8253的調試比較順利。最終將全部硬件連線接好,進行整機聯調。當中發現許多問題,首先利用示波器排除硬件故障, 再回過頭來對軟件進行單步,這時由于有現象,進行軟件調試的時候也更有針對性。通過設置斷點, 逐步跟蹤寄存器值,經過幾次的修改之后,成功實現了預定方案。由于數碼管和
13、LED燈顯示都是采用查表法,根據輸入字符的ASCII碼查表得到輸出,有時出現LED不正常亮滅的現象,是在查表時出錯,比如沒有減去31H,就會使燈的顯示雜亂無章。實物連接圖:五.分析與總結1)設計要求每次電梯開關時間為2秒,而一開始我們無法保證精確的時間。后來經過討論后發現可以用8253計數器達到此功能,我們翻閱書籍后分別用方式3和方式0實現了精確2秒的要求。2)編程中遇到的大多是邏輯問題 .另一個經常遇到的問題就是跳轉語句超出范圍的錯誤,這個錯誤的解 決是通過改變語句的順序,如實在無法通過改變順序來消除錯誤,則通過二次跳轉,即跳過中間過程再跳 至目標。3)我們寫的電梯程序,d的意義為當前樓層,
14、當輸入要去的樓層bl時,判斷bl與cl的大小關系,假設bl>cl ,則程序先把cl加1,再延時兩秒,再比較 bl與cl的大小是否相等,如果相等則跳出,不等則把 cl加1 ,再延時,再判斷。4)當在上行過程中再輸入另一個想去的樓層 ch時,則跳轉至ch處理過程。因為是在延時前就把 cl加 1 了,因此在這上行兩秒內, cl已經上了一層了。因此就必須判斷 ch以及bl是否與此時的cl相等,如 相等則在即將到達的這一層停。由于一開始我們來判斷bl與cl是否相等,導致如果在即將到 bl層的時候按下ch則會使cl不斷增大,即 ASCII碼不斷增大,又返回至 0,又增大至bl才停止。5)另外一個問題
15、就是 8個LED顯示要去哪個樓層的問題。我們是用數據DD0-DD7接到74LS273輸出的。bl , ch同時要被顯示。我們于是就把 bl,ch的0, 1 2, 3, .8分別對應于0B,1B,10B, 10000000B,然后把兩者相加就能顯示了。如果到達bl則把bl賦為0,則對應燈滅。如果到達ch,則把ch賦為0,則ch對應樓層燈滅。現在如果輸入ch等于bl ,按要求是對應燈亮,到該層停,而實際上變成上一層燈亮,因為ch與bl對應二進制相加,產生進位。解決方法是,如果 bl,ch相等,則先把cl復位為0,然后再 調用LED顯示。6)電梯這個題目的特點就是狀態多,各種大小循環相互嵌套,很難寫
16、代碼。但是,由于每一層的代碼都 是相似的,在調試出某一層之后,其他七層的代碼也很好寫。在設計過程中我們遇到了很多問題,而匯編語言本身不是像高級語言一樣直觀和簡潔,剛開始走了不少彎 路,但不斷調試和查資料之后感覺好多了,程序的編寫速度也大大加快了。實驗過程中,我不斷翻書,鞏固了上課沒聽懂的知識,加深了對各個芯片的直觀的印象,也培養了細心實 驗的能力。參考書目:1 楊素行等,微型計算機系統原理及應用,北京,清華大學出版社,2009年2 東南大學微機系統與接口課程組,微機實驗及課程設計教程試用版3.0,南京,東南大學出版社,2010 年附錄.代碼程序data segmentioportequ 0ec
17、00h-0280hio8253aequ ioport+280h;0計數端口計數為 10000,方式 3io8253bequ ioport+281h;1計數端口計數為 200,方式 0io8253cequ ioport+283h;8253 控制端;shangmian shi 8253io8255aequ ioport+288h;8255 控制端以及 a,b,c 端口地址io8255bequ ioport+289hio8255cequ ioport+28ahio8255equ ioport+28bhprothequ ioport+290h;點陣燈顯示,行陣protlrequ ioport+298h
18、;點陣燈顯示,歹!J陣 number db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh; 七段碼min db 00h,01h,02h,03h,04h,05h,06h,07h;點陣的行;buff1db 10h,30h,7fh,0ffh,0ffh,7fh,30h,10h; 向上箭頭buff1 db 10h,20h,40h,0ffh,0ffh,40h,20h,10h;buff2db 08h,0ch,0feh,0ffh,0ffh,0feh,0ch,08h;向下箭頭buff2 buff3 menudbdbdb 08h,04h,02h,0ffh,0ffh,02h,04h
19、,08h00h,00h,00h,00h,00h,00h,00h,00h,*,0DH,0AH db '* DianTiKongZhiQi-elevator *',0Dh,0Ahdb db'*61010207 Jia Xiawen'*61010317 Yu Hailei*',0DH,0AH*',0Dh,0Ahdb*1,0Dh,0Ahdb 'input a number to go to the corresponding level',0DH,0AHdb 'escexit',0DH,0AHdb 'entergo
20、',0DH,0AHdb'zgo directly',0Dh,0Ahdb'xquickstop',0Dh,0Ahdb'cwaiting for fixing',0Dh,0Ahdb '280H8253CS',0Dh,0Ahdb'1MHz-8253_clk0',0Dh,0Ahdb 'VCC-8253_gate0',0Dh,0Ahdb '8253_clk1-8253_out0',0Dh,0Ahdb '8253_gate1-K0',0Dh,0Ahdb '8253
21、_out1-8255_PC0',0Dh,0Ahdb '28bH-8255_cs',0Dh,0Ahdb 'PA07SHU MA GUAN',0Dh,0Ahdb 'PB07led07',0Dh,0Ahdb 'MOVE!',0Dh,0Ah ,'$'data endsstacks segment stack db 100 dup (?)stacks endscode segmentassume cs:code,ds:data,ss:stacksstart:mov ax,data;初始化mov ds,axmov dx
22、,offset menu;打印菜單,說明硬件電路的連接等mov ah,09int 21hmov dx,io8255;8255初始化,a、b 輸出,c 口輸入mov al,89hout dx,almov bl,31h;bl代表當前電梯所在樓層,初始值設為1main: mov al,0call shownumber; 顯示當前樓層mov cl,0;cl為第一次輸入的要去的樓層mov ch,0;ch為在中途中再次輸入的要去的樓層call showledmov ah,01;通過鍵盤輸入第一次要去得樓層clint 21hcmp al,1bh; 是 esc 退出 je exitcmp al,31h;鍵入的
23、數字是否在1-8之間,如不是重新輸入jl maincmp al,38h; 跟8比較,如果比8大,則循環輸入jg mainmov cl,alcall showled;8 個led燈顯示cl對應的樓層cmp cl,bl;cl 與 bl 比較je main;相等則返回重新輸入jg up;大于則向上運行jl todown; 小于則向下運行exit: mov ah,4chint 21h;-電梯上行up:call judge; 電梯上行的情況up1: add bl,1call updelay;調用向上運行延時子程序,出現向上的箭頭blcall shownumber;調用顯示子程序,通過數碼管顯示當前樓層c
24、mp bl,cl;bl,cl不等則繼續je main;相等則返回jmp up1upgetch:mov ah,1;在上升過程中如果有其他的鍵按下時int 21hcmp al,78h;判斷是否為急停鍵xje jitcmp al,63h;判斷是否為斷電待修鍵cje duandiancmp al,31h; 數字是否在1-8之間如不是繼續上行jl gotoupcmp al,38hjg gotoupmov ch,alcall showledcall delayupcall shownumbercall judgeequ;判斷當前樓層與第一次要去的樓層是否相同cmp ch,bl; 比較ch與bl的區別je
25、loucengxiangdeng;相等則在該層停,等待運行信號輸入jl xianshanghouxia;ch 小于 bl貝先上行至 cl在下行至 ch cmp ch,cl;ch 大于bl則在判斷ch與cl的大小關系 je xiangdengup; 相等貝直上行至 cljl sameup;ch 大于bl小于cl則先上行到ch在上行到cljg tosameup2;ch 大于cl則先上行到cl在上行到ch gotoup:call delayupjmp up1duandian: mov al,0;上升時遇到了斷電的情況,則等待鍵入,除非再次鍵入的為c才繼續運行mov ah,7 int 21h cmp
26、al,63h jne duandian call delayup call shownumber jmp up1jit:call delayup;上升時遇到了急停的情況,則停在下一層,然后回到maincall shownumberjmp maintodown: jmp downupdelay proc near; 向上運行的延時子程序call delayfirst;用于初始化 8253push dxcall cleardots ; 調用使其能夠清零updelay1:call dotsup;循環調用向上的箭頭顯示mov ah,1;鍵盤是否有輸入int 16hjne upgetch;如有則跳轉到輸
27、入處理mov dx,io8255c;8255c 口輸入,看2s延時是否結束 in al,dx and al,01; 是否計時結束 jz updelay1 pop dx retupdelay endp tomain: jmp main tosameup2:jmp sameup2 ;-上行中遇到的各種情況列舉loucengxiangdeng:call shownumber;第二次要去得樓層與當前樓層相同,直接停在該層mov ch,0 call showled call stop2 call upcl jmp mainxianshanghouxia:call showled;先上行至U cl 再下彳
28、T至U chcall upclmov cl,0call showledcall stop2call downchjmp mainxiangdengup:mov ch,0;二次要去的樓層與第一次要去的相同,直接上行到第一次要取得樓層 call showled call upcl jmp mainsameup:call showled; 同方向的樓層,先上行到 ch再上彳T到clcall upchmov ch,0 call showledcall stop2call upcljmp mainsameup2:call showled; 同方向的樓層,先上行到 cl 再上行到ch ;call upcl
29、mov cl,0 call showledcall stop2 call upch jmp mainjittt:jmp jit電梯下行,與電梯上行的;情況基本類似,稍作修改即可 down:call judgedown1:sub bl,1call downdelaycall shownumber cmp bl,cl je tomainjmp down1downgetch:mov ah,1 int 21h cmp al,78h je jit1 cmp al,63h je duandian1cmp al,31hjl gotodowncmp al,38hjg gotodown mov ch,alcal
30、l showledcall delaydowncall shownumbercall judgeequcmp ch,blje stopdowncljg downclupch;ch 大于 bl則先下行至 cl 在上彳亍至 chcmp ch,cl;ch 小于bl則在判斷ch與cl的大小關系je jmpdowncl; 相等則一直下行至 cljl downcldownch;ch 小于bl小于cl則先下行到cl在下行到chjg todownchdowncl;ch 大于 cl貝先下行至U ch 在下行至U cl gotodown:call delaydownjmp downlduandianl: mov
31、al,0;下降遇到了斷電的情況,則等待鍵入,除非再次鍵入的為c才繼續運mov ah,7int 21hcmp al,63hjne duandian1call delaydowncall shownumberjmp down1jit1:call delaydown;下降時遇到了急停的情況,則停在下一層,然后回到 maincall shownumberjmp maindowndelay proc near;向下運行延時子程序,與向上運行延時子程序大體相同call delayfirstpush dxcall cleardots;調用使其能夠清零ddy: call dotsdown;循環調用向下的箭頭顯
32、示mov ah,1int 16hjne downgetchmov dx,io8255cin al,dxand al,01jz ddypop dxretdowndelay endptodownchdowncl:jmp downchdowncl;-下行中遇到的各種情況列舉stopdowncl:call showledmov ch,0 call showled call stop2 call downcl jmp main downclupch:call showled call downcl mov cl,0 call showled call stop2 call upch jmp main j
33、mpdowncl:mov ch,0 call showled call downcl jmp main downcldownch:call showled call downclmov cl,0 call showled call stop2 call downch jmp main downchdowncl:call showled call downch mov ch,0call showled電梯上、下行call stop2 call downcl jmp main ;中遇到的各種情況處理方法 jitt: jmp jitttjudgeequ proc near ;判斷當前樓層與第一次要去
34、的樓層的關系cmp cl,bl jne back cmp cl,chje clequch mov cl,0 call shownumber call showled call stop2cmp ch,bl jg upchherejl downchhere upchhere:call upch jmp main downchhere:call downch jmp main clequch:mov ch,0call showledcall onlydelay;jmp mainback: retjudgeequ endpupcl proc near;上行至U cl的子程序upcl1: inc bl
35、call dirdelay1 call shownumber cmp bl,cl jl upcl1 retupcl endpjitt1:jmp jit1upch proc near; 上行至U ch的子程序 upch1: add bl,1call dirdelay1call shownumber cmp bl,chjl upch1 ret upch endp downcl proc near; 下行至U cl 的子程序 downcl1:sub bl,1call dirdelay2 call shownumber cmp bl,cljg downcl1 retdowncl endpdownch
36、proc near; 下行至U ch的子程序 downch1:sub bl,1call dirdelay2call shownumbercmp bl,chjg downch1 retdownch endpJ行時對按鍵情況的處理stop2 proc near;沒有直達鍵的暫停子程序gostop2:mov al,0mov ah,1int 21hcmp al,13jne gostop2mov al,0retstop2 endpdirgetch1:mov ah,1;直接上行對按鍵的處理int 21hcmp al,63hje dirduandianlcmp al,78hje jit21jmp dirba
37、ckldirgetch2:mov ah,1;直接下行對按鍵的處理int 21hcmp al,63hje dirduandian2cmp al,78hje jit22jmp dirback2jit21: call delayup;call shownumberjmp mainjit22: call delaydown;call shownumberjmp maindirduandian1:mov al,0;直接上行時遇到了斷電待修的情況mov ah,1int 21hcmp al,63hjne dirduandian1call delayup;call shownumberjmp dirback1
38、dirduandian2:mov al,0;直接下行時遇到了斷電待修的情況mov ah,1int 21hcmp al,63h直接上下jne dirduandian2call delaydown;call shownumberjmp dirback2tojit:jmp jittdirdelayl proc near;直接上行的延時子程序call delayfirstpush dxcall cleardotsdirback1:call dotsup;mov ah,1int 16hjne dirgetch1mov dx,io8255cin al,dxand al,01jz dirback1pop d
39、xretdirdelay1 endptojit1:jmp jitt1dirdelay2 proc near;直接下行的延時子程序call delayfirstpush dxcall cleardotsdirback2:call dotsdown;mov ah,1int 16hjne dirgetch2mov dx,io8255cin al,dxand al,01jz dirback2pop dxret dirdelay2 endp ; 直達情況的處理 judge proc near;判斷是否為直達鍵,如果是就直接到達,如果為 enter正常執行 next1: mov al,0mov ah,1i
40、nt 21hcmp al,7ah;是否為直達鍵 je zhida cmp al,13jne nextlmov al,0retjudge endpzhida: cmp cl,bljl zhidadownjg zhidaupjmp mainzhidadown:call delaydownsub bl,1call zhidadelay2call shownumberjmp zhidazhidaup:call delayupadd bl,1call zhidadelay1call shownumberjmp zhidazhidabutton1:mov ah,1;直達對按鍵情況的處理,在上升時跳到此處i
41、nt 21hcmp al,63hje zhidaduandian1cmp al,78hje tojitjmp zhidazhidabutton2:mov ah,1;直達對按鍵情況的處理,在下降時跳到此處int 21hcmp al,63hje zhidaduandian2cmp al,78hje tojit1jmp zhidazhidaduandian1:mov al,0;上升時遇到斷電待修時mov ah,1int 21hcmp al,63h;cjne zhidaduandian1call delayup;call shownumberjmp zhidazhidaduandian2:mov al
42、,0;下降時遇到斷電待修時mov ah,1int 21hcmp al,63hjne zhidaduandian2call delaydown;call shownumberjmp zhidazhidadelayl proc near; 直達延時程序call delayfirstpush dxcall cleardotsnext21:call dotsup;mov ah,1int 16hjne zhidabutton1mov dx,io8255cin al,dxand al,01jz next21pop dxretzhidadelay1 endpzhidadelay2 proc near; 直達
43、延時程序call delayfirstpush dxcall cleardotsnext22:call dotsdown;mov ah,1int 16hjne zhidabutton2mov dx,io8255c in al,dxand al,01jz next22pop dxretzhidadelay2 endp;判斷延時是否結束以及8253初始化delayfirst proc near; 初始化8253的子程序,兩計數器連級,接入1MHZ勺脈沖,2s每次第二個out接pc0push dxmov dx,io8253c;8253 的計數器0置方式3mov al,36h out dx,almov
44、 dx,io8253a; 計數器0初始值為10000mov ax,10000out dx,almov al,ahout dx,almov dx,io8253c;8253的計數器1置方式0mov al,70hout dx,almov dx,io8253b; 計數器1初始值為200mov ax,200out dx,almov al,ahout dx,alpop dxretdelayfirst endponlydelay proc near;判斷延時時是否結束的子程序,注意由于點陣燈的顯示要寫進循環中, 所以分類,該延時僅用于延時push dxdelayx: mov dx,io8255cin al,
45、dx ;查詢8255的Pc0是否為高電平and al,01jz delayxpop dxretonlydelay endpdelayup proc near;判斷上升延時是否結束的子程序,包括了顯示向上箭頭的部分push dxcall cleardotsdelayy:call dotsupmov dx,io8255cin al,dx ;查詢8255的Pc0是否為高電平and al,01jz delayypop dxretdelayup endpdelaydown proc near;判斷下降延時是否結束的子程序,包括了顯示向下箭頭的部分push dxcall cleardotsdelayz:c
46、all dotsdownmov dx,io8255cin al,dx ;查詢8255的Pc0是否為高電平and al,01jz delayzpop dxret delaydown endp; 顯小的子程序cleardots proc near; 用于對點陣顯示的清零,在第一次要循環前使用push dxpush axmov al,00mov dx,protlrout dx,alpop axpop dx cleardots endpdotsup proc near;點陣箭頭的顯示,向上箭頭的顯示子程序push cxpush axpush bxmov cx,0008hmov si,offset minmov ah,01movex: mov al,simov bx,offset buff1xlat;得到第一行碼mov dx,prothout dx,almov al,ahmov dx,protlrout dx,al;顯示第一行紅shl ah,01inc sipush cxmov
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2022年度河南省新鄉市某中學高一歷史模擬試卷
- 健身房設備使用責任考核
- 藍色手繪風口腔潰瘍的中醫診療策略
- 《移動電子商務》課件55.微信營銷微店開設2
- 2025年古典文學與現代文學綜合考試卷及答案
- 幼兒發展指南培訓
- 2025年工程項目管理與實務考核考試題及答案
- 國學成語接龍課件
- 2025年育嬰師職業資格考試試題及答案
- 子癇病人術后護理措施
- 2025春季學期國開電大本科《管理英語3》一平臺機考真題及答案(第十套)
- 湖南省2025年高考公安院校公安專業考生檔案審核表
- 定額〔2025〕1號文-關于發布2018版電力建設工程概預算定額2024年度價格水平調整的通知
- 《云南省建筑工程資料管理規程應用指南)(上下冊)
- 數列求和中常見放縮方法和技巧(含答案)
- 寶興縣中藥材生產現狀及發展思路
- 臺州市幼兒園教師考核表.
- 小兒霧化吸入課件.ppt
- TM92成品鞋彎折測試
- 鎖骨骨折幻燈片
- 高填方、深挖路塹邊坡和軟基監測方案
評論
0/150
提交評論