2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩22頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  《微機實驗及課程設計》</p><p><b>  課程設計報告</b></p><p><b>  停車場出入管理系統</b></p><p>  姓 名: 學 號: </p><p>  專

2、 業: 電類強化班 實 驗 室: </p><p>  組 別: 同組人員: </p><p>  設計時間:2013 年 5月28日 —— 2013年 6月 4 日</p><p>  評定成績:

3、 審閱教師: </p><p>  目 錄</p><p>  一. 課程設計目的與要求……………………………………………………………………2</p><p>  二.方案論證與原理設計………………………………………………………………………2</p><p>  三.詳細(機理)設計…………

4、……………………………………………………………3</p><p>  四.方案實現與測試(或調試)……………………………………………………………7</p><p>  五.分析與總結………………………………………………………………………………8</p><p>  一. 課程設計目的與要求(含設計指標)</p><p>  1、設計項目名稱:

5、停車場出入管理系統</p><p><b>  2、目的:</b></p><p>  鞏固已學的微機原理與接口的基本知識;</p><p>  加強個人編程能力,學會用匯編語言編寫簡單使用的系統</p><p>  學會對8086,8253,8255等芯片的綜合應用,實現對停車場的出入進行智能管理。</p>

6、<p><b>  3、基本要求:</b></p><p>  設計實現一停車場實時管理系統。要求實時顯示車位空閑情況(初值可修改,最多99輛),并分別控制A、B兩個出入口。每個出入口需要控制進出欄桿,并檢測車輛進出,修改統計、顯示車位空閑情況,并根據空閑情況控制進入。用2*2個開關模擬兩個出入口的車輛進出光電信號,2個LED燈模擬欄桿輸出控制(亮代表有效,禁止出入)。允許A口

7、進B口出,反之亦是。</p><p><b>  4、設計指標</b></p><p>  要求用兩個數碼管實時顯示車位空閑數目(00~99);</p><p>  當有空位時,如有車輛到來,則在檢測到信號(有效)后2秒鐘打開進入欄桿,待車進入(信號</p><p>  無效)后1秒鐘放下欄桿,空車位數減1修改;若無空位

8、,則車輛等待,直至有車位空出;</p><p>  當有車出停車場時則在檢測到信號后2秒鐘打開出車欄桿,帶車離開3秒鐘放下欄桿,空車位數</p><p><b>  加1修改;</b></p><p>  車位發生變化時,PC上同步顯示記錄。</p><p><b>  5、拓展功能</b><

9、/p><p>  8*8點陣顯示進出箭頭,有車輛進出空時綠色,滿時紅色;</p><p>  自動記錄車將進出時間和屬性;</p><p>  考慮A、B、C、D四個出入口同時控制的情況,自動顯示空位數,控制車輛</p><p>  二.方案論證與原理設計(或基本原理)</p><p>  對上述基本要求和設計指標進行需求

10、分析,并基于所有的硬件資源,我們可以采用如下辦法進行實現:對于光電信號的采集(開關模擬)可以通過8255C口輸入并進行判斷,對于欄桿的控制同樣可</p><p>  通過8255C口進行輸出控制;對于雙數碼管的顯示,可以采用動態顯示的方法,利用8255A口輸出數</p><p>  碼管的七段譯碼,B口輸出數碼管的動態片選信號。實時的空車位保存于通用寄存器中(如BX,BH</p>

11、;<p>  表示十位,BL表示個位);對于等待時間的控制,可以通過微機內部的延遲得到,但若想要得到精確</p><p>  地時間,則可以利用8253定時器實現,具體做法是利用雙通道計數器的級聯實現對1MHz時鐘信號的</p><p>  1000*1000分頻,得到1HZ的信號,即可得到1s精確延遲。</p><p>  程序的基本框架如下:<

12、;/p><p>  1、對系統進行初始化,顯示當前空車位數;</p><p>  2、利用輸入指令從8255C口低四位輸出光電信號。若檢測到有效信號,則對其判斷端口和進出性質;若無有效信號,則繼續檢測信號;</p><p>  3、對有效信號的性質進行判定:若為出信號,則執行出車程序(跳轉指令實現);若為進信號,則先判斷是否有空位(判斷BX是否為0),若有空位,則執行進

13、車程序,否則等待并檢測是否有出車信號,至有空位出現;</p><p>  4、出車時首先需要一定得延遲,然后輸出控制打開柵欄信號,經過一定的延遲之后,檢測出車信號是否無效(表明車已經出去),無效則輸出關閉柵欄信號,修改計數值并顯示,否則繼續等待,重復檢測。進車和出車的流程差不多。</p><p>  三.詳細(機理)設計</p><p>  1、系統工作流程圖(如下

14、所示)</p><p>  2、關鍵部分程序片段</p><p> ?、俣丝谛盘柕臋z測和判斷控制</p><p>  mov bh,a[0];數碼管的高位</p><p>  mov bl,a[1];數碼管的低位</p><p>  cmp bx,0000h;如果沒有空車位就轉向b</p>

15、<p><b>  jz b</b></p><p>  test al,08h;00001000</p><p><b>  jz goon1</b></p><p>  call testa1;a口開關1撥上,監測a口狀態</p><p>  goon1: test al

16、,04h;00000100</p><p><b>  jz goon2</b></p><p>  call testa2</p><p>  goon2: call testa3</p><p>  mov bh,a[0]</p><p>  mov bl,a[1]</p>

17、<p>  cmp bx,0909h</p><p><b>  jz loops</b></p><p>  b:test al,02h;00000010</p><p><b>  jz goon3</b></p><p>  call testb1;b口開關1撥上,

18、監測a口狀態</p><p>  goon3: test al,01h;00000001</p><p><b>  jz goon4</b></p><p>  call testb2</p><p>  goon4: call testb3</p><p><b>  j

19、mp loops</b></p><p>  exit: mov ah,4ch</p><p><b>  int 21h</b></p><p> ?、谌胲嚦绦蚩刂?,以A口為例</p><p>  testa1 proc near</p><p><b>  push ax

20、</b></p><p>  push dx ;a口開關1撥上,監測a口狀態</p><p>  cmp state_a,00h ;空閑</p><p>  jz state_a1 </p><p>  cmp state_a,01h;a口狀態前</p>

21、;<p>  jz timecheck_a2s</p><p><b>  jmp exit1</b></p><p>  state_a1: </p><p>  mov dx,offset mess8;提示有車準備進入</p><p>  mov ah,09h</p><p>

22、;<b>  int 21h</b></p><p>  mov state_a,01h</p><p>  mov dx,io8253b;計數器通道1地址,計數器賦2s</p><p>  mov al,00h </p><p><b>  out dx,al</b></p>

23、<p>  mov al,08h ;clk1接的是out0,經過兩次分頻,得出兩秒</p><p><b>  out dx,al</b></p><p><b>  jmp exit1</b></p><p>  timecheck_a2s: </p><p>  mov

24、dx,io8255d ;8255B口地址</p><p><b>  in al,dx</b></p><p>  and al,02h ;00000010b</p><p><b>  jz exit1</b></p><p>  mov dx,offset mess3<

25、/p><p>  mov ah,09h</p><p><b>  int 21h</b></p><p>  mov state_a,02h</p><p>  mov dx,io8255b ;開燈(欄桿打開)</p><p>  mov al,0bh ;00001011(C

26、的5號口對應于欄桿信號)</p><p><b>  out dx,al</b></p><p>  exit1: pop dx</p><p><b>  pop ax</b></p><p><b>  ret</b></p><p>  testa

27、1 endp </p><p> ?、鄢鲕嚦绦蚩刂?,以A口為例</p><p>  testb1 proc near;b口開關1撥上,監測a口狀態</p><p><b>  push ax</b></p><p>  push dx</p><p>  cmp state_b,00

28、h</p><p>  jz state_b1</p><p>  cmp state_b,01h</p><p>  jz timecheck_b2s</p><p><b>  jmp exit4</b></p><p>  state_b1: </p><p>  m

29、ov dx,offset mess9;提示有車準備離開</p><p>  mov ah,09h</p><p><b>  int 21h</b></p><p>  mov state_b,01h</p><p>  mov dx,io8253c ;計數器賦2s</p><p&g

30、t;  mov al,00h</p><p><b>  out dx,al</b></p><p>  mov al,08h</p><p><b>  out dx,al</b></p><p><b>  jmp exit4</b></p><p>

31、;  timecheck_b2s: </p><p>  mov dx,io8255d</p><p><b>  in al,dx</b></p><p>  and al,01h</p><p><b>  jz exit4</b></p><p>  mov dx,of

32、fset mess4</p><p>  mov ah,09h</p><p><b>  int 21h</b></p><p>  mov state_b,02h</p><p>  mov dx,io8255b;開燈(欄桿打開)</p><p>  mov al,09h</p&g

33、t;<p><b>  out dx,al</b></p><p>  exit4: pop dx</p><p><b>  pop ax</b></p><p><b>  ret</b></p><p>  testb1 endp </p>&

34、lt;p> ?、軆晌粩荡a管動態顯示程序</p><p>  disp proc near;顯示子程序</p><p><b>  push dx</b></p><p>  mov di,offset led</p><p>  mov byte ptr bz,bl</p><p><

35、b>  add di,bz</b></p><p><b>  mov al,00</b></p><p>  mov dx,ioporta</p><p><b>  out dx,al</b></p><p>  mov al,2 ;選擇數碼管,低位

36、</p><p>  mov dx,ioportb</p><p><b>  out dx,al</b></p><p>  mov al,byte ptr[di] ;LED顯示數字</p><p>  mov dx,ioporta</p><p><b>  out dx,al

37、</b></p><p>  mov cx,3000</p><p>  delay2: loop delay2</p><p>  mov di,offset led</p><p>  mov byte ptr bz,bh</p><p><b>  add di,bz</b>&l

38、t;/p><p><b>  mov al,00</b></p><p>  mov dx,ioporta</p><p><b>  out dx,al</b></p><p>  mov al,4 ;選擇數碼管,高位</p><p>  mov d

39、x,ioportb</p><p><b>  out dx,al</b></p><p>  mov al,byte ptr[di] ;LED顯示數字</p><p>  mov dx,ioporta</p><p><b>  out dx,al</b></p><

40、p>  mov cx,3000</p><p>  delay3: loop delay3</p><p><b>  pop dx</b></p><p><b>  ret</b></p><p><b>  disp endp</b></p><

41、p>  方案實現與測試(或調試)</p><p>  1、用TD調試工具對每個子程序模塊進行單步斷點測試,觀察各寄存器,標志寄存器的狀態是否正確,重點關注跳轉指令處是否跳轉正確。對中斷服務子程序模塊的調試重點檢查斷點的現場保護和現場的恢復,觀察堆棧段的壓棧和出棧的情況。</p><p>  2、整個程序連接起來,系統調試,對照流程圖,確定各子程序的相互調用正確,條件轉移正確,數碼管的

42、顯示是否正確,是否能正常進入中斷服務子程序和返回中斷程序。一切正常后,對系統的功能逐一驗證,檢測每一項功能是否能正確執行。</p><p>  3、在程序的調試過程中,發現了原始程序中的一些小問題(如條件轉移指令的跳轉范圍和修改計數值程序段等)并進行了更正。單步調試時程序很好的按照設計要求運行,各項要求均符合(除了精確延遲,因為是單步調試),實現了預定的功能。但是在動態運行時卻出現了問題,主要表現在計數值不穩定,

43、實際進出一次車卻出現了進出幾次的記錄等等。經過仔細分析發現可能是由于撥碼開關存在抖動現象,而CPU的運行頻率很高,因此微機實際捕捉到的開關狀態跳轉不止一次,這就導致了計數值的不穩定和記錄的多次顯示。</p><p>  為此改用脈沖信號代替撥碼開關進行光電信號的模擬(脈沖信號進行了消抖處理),動態運行程序后發現實驗現象正常,各個功能均按要求得以實現。每產生一次脈沖信號,空位數都會相應的減一或加一,同時PC機上顯示

44、相應的記錄。當按住脈沖開關不放時,對應的柵欄控制燈始終為暗(表示打開),同時計數值保持不變,PC機上不顯示記錄,這就表明車正在進入(或駛出)中,直至其完全進入(或離開)才進行相關操作,符合設計者的意圖。</p><p><b>  硬件實物圖:</b></p><p><b>  Pc顯示:</b></p><p><

45、;b>  五.分析與總結</b></p><p>  該系統已經能夠基本完成所有的需求功能,且運行穩定,因此具有一定的價值。當然,程序中仍</p><p>  然有待改進的地方。主要如下:</p><p>  原來的基本要求是需要2s和3s的精確延遲。預先的設計也是如此。原本是想通過8253定時器產生精確地1s定時,具體的實現辦法是通過雙通道計數器

46、的級聯對1MHz的輸入信號進行1000*1000分頻,得到1Hz的信號,如此便可得到1s的精確定時。定時的結束不是通過中斷處理,而是在計數過程中不斷地對通道1的計數值進行檢測,當其減小到0時表明一個周期結束。但在實際運行過程中卻出現問題,PC機警告程序中有無效的指令。在和輔導老師討論了之后覺得可能是由于通道1計數值處于0的時間太短(實際差不多應為1ms,按理應該足夠了),于是又將其out1端接至通道2計數器的時鐘端,這樣只要通道2的計數

47、減一(可以再每次計數前對其賦值為1,則只需判斷其是否為0即可),就表明一個周期結束,且由于通道2計數的保持時間有1s,CPU有足夠的時間進行判斷。但是在實際運行中PC機仍然是警告有無效指令。無奈之下只能利用指令的延遲來進行模擬(loop指令)。</p><p>  對于數碼管的動態顯示,由于需要不停地刷新數碼管的片選信號,所以disp(顯示)子程序就需</p><p>  要不停執行。但是

48、程序中具有延遲片段(例如車進出時受到了延誤,程序則要不停地進行判斷),若時間過長則動態顯示就會被中斷,只會顯示一位。因此需要在程序段中不停地調用顯示子程序(從源程序中可以看出)。這方面有待改進。</p><p>  對于系統的拓展功能,由于要求提的有點令人費解(如要求1、2),我沒能理解,因此無法實現。</p><p>  另外,對于拓展功能3,將兩個出入口改為四個出入口,其他要求不變,因

49、此只需在程序中添加四出入口的控制轉移程序(安排原理和雙口差不多)和對應的進出控制程序(這個可以復制雙出口程序的代碼,只需稍加改動即可)。這里只需要注意一點,那就是C口8位需要全部用來作為輸入,輸入8個撥碼開關的信號,因此8255的控制字要做對應的改變。這里可以改用B口的高四位作柵欄的控制信號。</p><p><b>  參考書目:</b></p><p>  楊素行

50、,微型計算機系統及應用,清華大學出版社,北京,2007年11月</p><p>  東南大學《微機系統與接口》課程組,微機實驗及課程設計教程(試用版2.0),東南大學初出版社,南京,2009年2月</p><p><b>  附錄:</b></p><p>  data segment</p><p>  ioport

51、equ 0ec00h-280h ;tpc卡中設備的io地址</p><p>  io8253a equ ioport+280h ;計數器通道0地址</p><p>  io8253b equ ioport+281h ;計數器通道1地址</p><p>  io8253c equ ioport+282h ;計數器通道2地址&l

52、t;/p><p>  io8253d equ ioport+283h ;8253控制寄存器地址</p><p>  io8255a equ ioport+288h ;8255A口地址 </p><p>  io8255b equ ioport+28bh ;8255控制寄存器端口地址

53、 </p><p>  io8255c equ ioport+28ah ;8255C口地址</p><p>  io8255d equ ioport+289h ;8255B口地址</p>&l

54、t;p>  prothequ ioport+290h ;行選</p><p>  protlrequ ioport+298h ;紅選</p><p>  protlyequ ioport+2a0h ;黃選</p><p>  num db 3,4 dup(0)</p><p> 

55、 a db 00h,00h ;用于存放空閑車位的十位和個位</p><p>  state_a db 00h ;標志a口狀態,0表示空閑,1表示狀態前,2標志狀態中,3標志狀態后</p><p>  state_b db 00h ;標志b口狀態,0表示空閑,1表示狀態前,2標志狀態中,3標志狀態后 </p><p>  led db 3fh

56、,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;八段LED</p><p>  copyright DB ' *******************************************************',0DH,0AH</p><p>  DB '* southe

57、ast university *',0DH,0AH</p><p>  DB '*---------------------------------------------------- *',0DH,0AH </p><p>  DB '* system on parking lo

58、t management *',0DH,0AH</p><p>  DB '* version:2013-06-02 *',0DH,0AH</p><p>  DB '*----------------------------------------------------

59、 *',0DH,0AH </p><p>  DB '* Yangyang Zhengxiawen *',0DH,0AH</p><p>  DB '* 61011108 61011308 *&#

60、39;,0Dh,0Ah</p><p>  DB '*******************************************************',0Dh,0Ah,'$'</p><p>  mess1 db 'Please decide the parks scale with input num(00~99):

61、9; ,0dh,0ah,'$'</p><p>  mess2 db 'Illegal input!' ,0dh,0ah,'$'</p><p>  mess3 db 'The car is entering...',0dh,0ah,'$'</p><p>  mess4 db '

62、;The car is leaving...',0dh,0ah,'$'</p><p>  mess5 db 'Space available:',0dh,0ah,'$'</p><p>  mess6 db 'Sorry,the park has no space!',0dh,0ah,'$'</

63、p><p>  mess7 db 'No car',0dh,0ah,'$'</p><p>  mess8 db 'A car wants to enter',0dh,0ah,'$'</p><p>  mess9 db 'A car wants to leave',0dh,0ah,'

64、;$'</p><p>  mess10 db 'error input signals, please check 8255 inport',0dh,0ah,'$'</p><p>  led_in db 00h,18h,30h,7fh,7fh,30h,18h,00h;箭頭進 </p><p>  led_out d

65、b 00h,18h,0ch,0feh,0feh,0ch,18h,00h;箭頭出</p><p>  led_no db 00h,03ch,5ah,99h,99h,5ah,3ch,00h;禁止</p><p><b>  data ends</b></p><p>  stacks segment stack</p><p

66、>  db 100 dup (?)</p><p>  stacks ends</p><p>  code segment</p><p>  assume cs:code,ds:data,ss:stacks</p><p>  start: mov ax,data ;初始化寄存器</p>&l

67、t;p><b>  mov ds,ax</b></p><p>  mov ax,stacks</p><p><b>  mov ss,ax</b></p><p>  mov dx,io8253d ;計數器0工作方式3</p><p>  mov al,36h

68、 ;00110110,先寫低字節再寫高字節,方式3(方波發生器),二進制</p><p><b>  out dx,al</b></p><p>  mov al,70h ;01110000,計數器1,工作方式0</p><p><b>  out dx,al</b></p>&l

69、t;p>  mov al,0b0h ;10110000,計數器2,工作方式0</p><p><b>  out dx,al</b></p><p>  mov dx,io8253a ;計數器0初值1024(第一次分頻)</p><p>  mov al,00h</p><p><b

70、>  out dx,al</b></p><p>  mov al,04h</p><p><b>  out dx,al</b></p><p>  mov dx,io8255b ;8255設置為A口及C口高四位輸出,B口及C口低四位出入</p><p>  mov al,83h

71、 ;10000011 設置A口及C口高四位輸出,B口及C口低四位出入</p><p><b>  out dx,al</b></p><p>  mov dx,offset copyright</p><p>  mov ah,09h</p><p><b>  int 21h</b></p

72、><p>  again: mov dx,offset mess1 ;提示信息</p><p>  mov ah,09h ;系統調用,在電腦屏幕上顯示mess1</p><p><b>  int 21h</b></p><p>  mov dx,offset num ;系統調用

73、,從鍵盤輸入初始的"空車位數"到緩沖區</p><p>  mov ah,0ah</p><p><b>  int 21h</b></p><p>  mov al,num[2] ;判斷輸入數值是否符合條件</p><p>  cmp al,30h</p><p>

74、;<b>  jb error</b></p><p>  cmp al,39h</p><p><b>  ja error</b></p><p>  mov al,num[3]</p><p>  cmp al,30h ;小于0的話就轉移到error</p>

75、;<p>  jb error</p><p>  cmp al,39h ;大于9的話就轉移到error</p><p><b>  ja error</b></p><p>  sub al,36h ;將ASCII碼轉換為數字</p><p>  mov a[

76、1],al</p><p>  mov al,num[2]</p><p>  sub al,36h</p><p>  mov a[0],al</p><p><b>  jmp loops</b></p><p>  error: mov dx,offset mess2</p>

77、<p>  mov ah,09h</p><p><b>  int 21h</b></p><p><b>  jmp again</b></p><p>  error2:mov dx,offset mess10</p><p>  mov ah,09h</p><

78、p><b>  int 21h</b></p><p><b>  jmp again</b></p><p>  ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>

79、>>>>>>>>>>>>>>>>>>>>>>>>>>> </p><p>  loops: ;主循環</p><p>  call show ;調用數碼管顯示</p><p&

80、gt;  call disp_mat;點陣顯示相關圖示</p><p>  mov ah,01 ;系統調用</p><p><b>  int 16h</b></p><p><b>  jnz exit</b></p><p>  mov dx,io8255c;從8255

81、C口讀入數據</p><p><b>  in al,dx</b></p><p>  ;------------------------------</p><p>  cmp al,0fh;排除不可能輸入的干擾,增加健壯性</p><p><b>  jz error2</b><

82、/p><p>  ;-------------------------------</p><p>  mov bh,a[0] ;數碼管的高位</p><p>  mov bl,a[1] ;數碼管的低位</p><p>  cmp bx,0000h;如果沒有空車位就轉向b</p><p>&

83、lt;b>  jz b</b></p><p>  test al,08h ;00001000</p><p><b>  jz goon1</b></p><p>  call testa1 ;a口開關1撥上,監測a口狀態</p><p>  goon1:test al,

84、04h;00000100</p><p><b>  jz goon2</b></p><p>  call testa2</p><p>  goon2: call testa3</p><p>  mov bh,a[0]</p><p>  mov bl,a[1]</p>

85、<p>  cmp bx,0909h</p><p><b>  jz loops</b></p><p>  b:test al,02h ;00000010</p><p><b>  jz goon3</b></p><p>  call testb1 ;

86、b口開關1撥上,監測a口狀態</p><p>  goon3:test al,01h;00000001</p><p><b>  jz goon4</b></p><p>  call testb2</p><p>  goon4: call testb3</p><p><

87、;b>  jmp loops</b></p><p>  exit: mov ah,4ch</p><p><b>  int 21h</b></p><p>  ;>>>>>>>>>>>>>>>>>>>>

88、;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> </p><p>  testa1 proc near</p><p><b>  push a

89、x</b></p><p>  push dx ;a口開關1撥上,監測a口狀態</p><p>  cmp state_a,00h ;空閑</p><p>  jz state_a1 </p><p>  cmp state_a,01h;a口狀態前</p>

90、;<p>  jz timecheck_a2s</p><p><b>  jmp exit1</b></p><p>  state_a1: </p><p>  mov dx,offset mess8;提示有車準備進入</p><p>  mov ah,09h</p><p&g

91、t;<b>  int 21h</b></p><p>  mov state_a,01h</p><p>  mov dx,io8253b;計數器通道1地址,計數器賦2s</p><p>  mov al,00h </p><p><b>  out dx,al</b></p>

92、<p>  mov al,08h ;clk1接的是out0,經過兩次分頻,得出兩秒</p><p><b>  out dx,al</b></p><p><b>  jmp exit1</b></p><p>  timecheck_a2s: </p><p>  mo

93、v dx,io8255d;8255B口地址</p><p><b>  in al,dx</b></p><p>  and al,02h ;00000010b</p><p><b>  jz exit1</b></p><p>  mov dx,offset mess3<

94、;/p><p>  mov ah,09h</p><p><b>  int 21h</b></p><p>  mov state_a,02h</p><p>  mov dx,io8255b;開燈(欄桿打開)</p><p>  mov al,0bh ;00001011(C的5號

95、口對應于欄桿信號)</p><p><b>  out dx,al</b></p><p>  exit1: pop dx</p><p><b>  pop ax</b></p><p><b>  ret</b></p><p>  testa1

96、endp </p><p>  ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

97、;>>>>>>> </p><p>  testa2 proc near</p><p><b>  push ax</b></p><p><b>  push dx</b></p><p>  cmp state_a,02h</p><

98、;p><b>  jnz exit2</b></p><p>  mov dx,io8253b;計數器通道1地址</p><p>  mov al,00h</p><p><b>  out dx,al</b></p><p>  mov al,04h ;計時1s</

99、p><p><b>  out dx,al</b></p><p>  mov state_a,03h</p><p>  exit2: pop dx</p><p><b>  pop ax</b></p><p><b>  ret</b></p

100、><p>  testa2 endp </p><p>  ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&

101、gt;>>>>>>>>>>>>> </p><p>  testa3 proc near</p><p><b>  push ax</b></p><p><b>  push dx</b></p><p>  cmp

102、state_a,03h</p><p><b>  jnz exit3</b></p><p>  mov dx,io8255d ;8255B口地址</p><p><b>  in al,dx</b></p><p>  and al,02h</p><p>

103、  jz exit3 ;時間到</p><p>  mov al,a[1]</p><p>  mov ah,a[0]</p><p><b>  sub al,1</b></p><p><b>  aas</b></p><p>  m

104、ov a[1],al</p><p>  mov a[0],ah</p><p>  mov state_a,00h</p><p>  mov dx,io8255b</p><p>  mov al,0ah ;C5=0關燈(欄桿閉合)</p><p>  out dx,al</p>&l

105、t;p>  mov dx,offset mess5;屏幕顯示剩余車位</p><p>  mov ah,09h</p><p><b>  int 21h</b></p><p>  mov dl,a[0]</p><p>  add dl,30h</p><p>  mov ah,02

106、h</p><p><b>  int 21h</b></p><p>  mov dl,a[1]</p><p>  add dl,30h</p><p>  mov ah,02h</p><p><b>  int 21h</b></p><p>

107、  mov dl,0ah;回車</p><p>  mov ah,02h</p><p><b>  int 21h</b></p><p>  mov dl,0dh;換行</p><p>  mov ah,02h</p><p><b>  int 21h</b><

108、;/p><p>  mov bh,a[0]</p><p>  mov bl,a[1]</p><p>  cmp bx,0000h</p><p><b>  jnz exit3</b></p><p>  mov dx,offset mess6</p><p>  mov

109、ah,09h</p><p><b>  int 21h</b></p><p><b>  exit3: </b></p><p><b>  pop dx</b></p><p><b>  pop ax</b></p><p>

110、;<b>  ret</b></p><p>  testa3 endp </p><p>  ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&g

111、t;>>>>>>>>>>>>>>>>>>>>> </p><p>  testb1 proc near ;b口開關1撥上,監測a口狀態</p><p><b>  push ax</b></p><p>

112、;  push dx</p><p>  cmp state_b,00h</p><p>  jz state_b1</p><p>  cmp state_b,01h</p><p>  jz timecheck_b2s</p><p><b>  jmp exit4</b></p

113、><p>  state_b1: </p><p>  mov dx,offset mess9;提示有車準備離開</p><p>  mov ah,09h</p><p><b>  int 21h</b></p><p>  mov state_b,01h</p><p&g

114、t;  mov dx,io8253c;計數器賦2s</p><p>  mov al,00h</p><p><b>  out dx,al</b></p><p>  mov al,08h</p><p><b>  out dx,al</b></p><p><

115、;b>  jmp exit4</b></p><p>  timecheck_b2s: </p><p>  mov dx,io8255d</p><p><b>  in al,dx</b></p><p>  and al,01h</p><p><b>  jz

116、exit4</b></p><p>  mov dx,offset mess4</p><p>  mov ah,09h</p><p><b>  int 21h</b></p><p>  mov state_b,02h</p><p>  mov dx,io8255b;開燈

117、(欄桿打開)</p><p>  mov al,09h</p><p><b>  out dx,al</b></p><p>  exit4: pop dx</p><p><b>  pop ax</b></p><p><b>  ret</b>&

118、lt;/p><p>  testb1 endp </p><p>  ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&g

119、t;>>>>>>>>>>>>>> </p><p>  testb2 proc near</p><p><b>  push ax</b></p><p><b>  push dx</b></p><p>  c

120、mp state_b,02h</p><p><b>  jnz exit5</b></p><p>  mov dx,io8253c</p><p>  mov al,00h</p><p><b>  out dx,al</b></p><p>  mov al,0ch

121、 ;計時3s</p><p><b>  out dx,al</b></p><p>  mov state_b,03h</p><p>  exit5: pop dx</p><p><b>  pop ax</b></p><p><b>  re

122、t</b></p><p>  testb2 endp </p><p>  ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

123、>>>>>>>>>>>>>>>>>> </p><p>  testb3 proc near</p><p><b>  push ax</b></p><p><b>  push dx</b></p>

124、<p>  cmp state_b,03h</p><p><b>  jnz exit6</b></p><p>  mov dx,io8255d</p><p><b>  in al,dx</b></p><p>  and al,01h</p><p>

125、<b>  jz exit6</b></p><p>  mov al,a[1]</p><p>  mov ah,a[0]</p><p><b>  add al,1</b></p><p><b>  aaa</b></p><p>  mov a

126、[1],al</p><p>  mov a[0],ah</p><p>  mov state_b,00h</p><p>  mov dx,io8255b</p><p>  mov al,08h ;關燈(欄桿關閉)</p><p>  out dx,al</p><p> 

127、 mov dx,offset mess5;屏幕顯示剩余車位</p><p>  mov ah,09h</p><p><b>  int 21h</b></p><p>  mov dl,a[0]</p><p>  add dl,30h</p><p>  mov ah,02h</p&

128、gt;<p><b>  int 21h</b></p><p>  mov dl,a[1]</p><p>  add dl,30h</p><p>  mov ah,02h</p><p><b>  int 21h</b></p><p>  mov dl

129、,0ah</p><p>  mov ah,02h</p><p><b>  int 21h</b></p><p>  mov dl,0dh</p><p>  mov ah,02h</p><p><b>  int 21h</b></p><p&g

130、t;  mov bh,a[0]</p><p>  mov bl,a[1]</p><p>  cmp bx,0909h</p><p><b>  jnz exit6</b></p><p>  mov dx,offset mess7</p><p>  mov ah,09h</p>

131、<p><b>  int 21h</b></p><p><b>  exit6: </b></p><p><b>  pop dx</b></p><p><b>  pop ax</b></p><p><b>  ret&

132、lt;/b></p><p>  testb3 endp </p><p>  ;==============================================================</p><p>  show proc near </p><p><b>  push dx</b>

133、</p><p><b>  push ax</b></p><p>  push si ;數碼管顯示</p><p>  mov dx,io8255b ;向8255的C口第六位寫入0,低位</p><p>  mov al,0ch

134、 ;00001100,</p><p>  out dx,al</p><p>  mov al,a[0]</p><p>  mov ah,00h</p><p>  mov dx,io8255a ;A口輸出</p><p><b>  mov si,ax</b><

135、;/p><p>  mov al,led[si]</p><p><b>  out dx,al</b></p><p>  mov dx,io8255b ;使相應的數碼管亮 高位</p><p>  mov al,0fh ;00001111,向C口的第七位寫人1

136、</p><p><b>  out dx,al</b></p><p>  mov cx,0ffffh</p><p><b>  delay1:</b></p><p>  loop delay1</p><p>  mov dx,io8255b <

137、/p><p>  mov al,0eh ;00001110,向C口的第七位寫入0 </p><p>  out dx,al</p><p>  mov al,a[1]</p><p>  mov ah,00h</p><p>  mov dx,io8255a</p>

138、;<p><b>  mov si,ax</b></p><p>  mov al,led[si]</p><p>  out dx,al</p><p>  mov dx,io8255b ;使相應的數碼管亮 低位</p><p>  mov al,0dh

139、 ;00001101,向C口的第六位寫入1</p><p><b>  out dx,al</b></p><p><b>  pop si</b></p><p><b>  pop ax</b></p><p><b>  pop dx</b

140、></p><p><b>  ret</b></p><p><b>  show endp</b></p><p>  ;===========================================================</p><p>  disp_mat proc

溫馨提示

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

評論

0/150

提交評論