微機(jī)課程設(shè)計(jì)—停車場(chǎng)出入管理系統(tǒng)_第1頁
已閱讀1頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  《微機(jī)實(shí)驗(yàn)及課程設(shè)計(jì)》</p><p><b>  課程設(shè)計(jì)報(bào)告</b></p><p><b>  停車場(chǎng)出入管理系統(tǒng)</b></p><p>  姓 名: 學(xué) 號(hào): </p><p>  專

2、 業(yè): 電類強(qiáng)化班 實(shí) 驗(yàn) 室: </p><p>  組 別: 同組人員: </p><p>  設(shè)計(jì)時(shí)間:2013 年 5月28日 —— 2013年 6月 4 日</p><p>  評(píng)定成績(jī):

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

4、……………………………………………………………3</p><p>  四.方案實(shí)現(xiàn)與測(cè)試(或調(diào)試)……………………………………………………………7</p><p>  五.分析與總結(jié)………………………………………………………………………………8</p><p>  一. 課程設(shè)計(jì)目的與要求(含設(shè)計(jì)指標(biāo))</p><p>  1、設(shè)計(jì)項(xiàng)目名稱:

5、停車場(chǎng)出入管理系統(tǒng)</p><p><b>  2、目的:</b></p><p>  鞏固已學(xué)的微機(jī)原理與接口的基本知識(shí);</p><p>  加強(qiáng)個(gè)人編程能力,學(xué)會(huì)用匯編語言編寫簡(jiǎn)單使用的系統(tǒng)</p><p>  學(xué)會(huì)對(duì)8086,8253,8255等芯片的綜合應(yīng)用,實(shí)現(xiàn)對(duì)停車場(chǎng)的出入進(jìn)行智能管理。</p>

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

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

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

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

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

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

12、;/p><p>  1、對(duì)系統(tǒng)進(jìn)行初始化,顯示當(dāng)前空車位數(shù);</p><p>  2、利用輸入指令從8255C口低四位輸出光電信號(hào)。若檢測(cè)到有效信號(hào),則對(duì)其判斷端口和進(jìn)出性質(zhì);若無有效信號(hào),則繼續(xù)檢測(cè)信號(hào);</p><p>  3、對(duì)有效信號(hào)的性質(zhì)進(jìn)行判定:若為出信號(hào),則執(zhí)行出車程序(跳轉(zhuǎn)指令實(shí)現(xiàn));若為進(jìn)信號(hào),則先判斷是否有空位(判斷BX是否為0),若有空位,則執(zhí)行進(jìn)

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

14、所示)</p><p>  2、關(guān)鍵部分程序片段</p><p> ?、俣丝谛盘?hào)的檢測(cè)和判斷控制</p><p>  mov bh,a[0];數(shù)碼管的高位</p><p>  mov bl,a[1];數(shù)碼管的低位</p><p>  cmp bx,0000h;如果沒有空車位就轉(zhuǎn)向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口開關(guān)1撥上,監(jiān)測(cè)a口狀態(tài)</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口開關(guān)1撥上,

18、監(jiān)測(cè)a口狀態(tài)</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口開關(guān)1撥上,監(jiān)測(cè)a口狀態(tài)</p><p>  cmp state_a,00h ;空閑</p><p>  jz state_a1 </p><p>  cmp state_a,01h;a口狀態(tài)前</p>

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

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

23、<p>  mov al,08h ;clk1接的是out0,經(jīng)過兩次分頻,得出兩秒</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號(hào)口對(duì)應(yīng)于欄桿信號(hào))</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口開關(guān)1撥上,監(jiān)測(cè)a口狀態(tài)</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;提示有車準(zhǔn)備離開</p><p>  mov ah,09h</p><p><b>  int 21h</b></p><p>  mov state_b,01h</p><p>  mov dx,io8253c ;計(jì)數(shù)器賦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>  ④兩位數(shù)碼管動(dòng)態(tài)顯示程序</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 ;選擇數(shù)碼管,低位

36、</p><p>  mov dx,ioportb</p><p><b>  out dx,al</b></p><p>  mov al,byte ptr[di] ;LED顯示數(shù)字</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 ;選擇數(shù)碼管,高位</p><p>  mov d

39、x,ioportb</p><p><b>  out dx,al</b></p><p>  mov al,byte ptr[di] ;LED顯示數(shù)字</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>  方案實(shí)現(xiàn)與測(cè)試(或調(diào)試)</p><p>  1、用TD調(diào)試工具對(duì)每個(gè)子程序模塊進(jìn)行單步斷點(diǎn)測(cè)試,觀察各寄存器,標(biāo)志寄存器的狀態(tài)是否正確,重點(diǎn)關(guān)注跳轉(zhuǎn)指令處是否跳轉(zhuǎn)正確。對(duì)中斷服務(wù)子程序模塊的調(diào)試重點(diǎn)檢查斷點(diǎn)的現(xiàn)場(chǎng)保護(hù)和現(xiàn)場(chǎng)的恢復(fù),觀察堆棧段的壓棧和出棧的情況。</p><p>  2、整個(gè)程序連接起來,系統(tǒng)調(diào)試,對(duì)照流程圖,確定各子程序的相互調(diào)用正確,條件轉(zhuǎn)移正確,數(shù)碼管的

42、顯示是否正確,是否能正常進(jìn)入中斷服務(wù)子程序和返回中斷程序。一切正常后,對(duì)系統(tǒng)的功能逐一驗(yàn)證,檢測(cè)每一項(xiàng)功能是否能正確執(zhí)行。</p><p>  3、在程序的調(diào)試過程中,發(fā)現(xiàn)了原始程序中的一些小問題(如條件轉(zhuǎn)移指令的跳轉(zhuǎn)范圍和修改計(jì)數(shù)值程序段等)并進(jìn)行了更正。單步調(diào)試時(shí)程序很好的按照設(shè)計(jì)要求運(yùn)行,各項(xiàng)要求均符合(除了精確延遲,因?yàn)槭菃尾秸{(diào)試),實(shí)現(xiàn)了預(yù)定的功能。但是在動(dòng)態(tài)運(yùn)行時(shí)卻出現(xiàn)了問題,主要表現(xiàn)在計(jì)數(shù)值不穩(wěn)定,

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

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

45、;b>  五.分析與總結(jié)</b></p><p>  該系統(tǒng)已經(jīng)能夠基本完成所有的需求功能,且運(yùn)行穩(wěn)定,因此具有一定的價(jià)值。當(dāng)然,程序中仍</p><p>  然有待改進(jìn)的地方。主要如下:</p><p>  原來的基本要求是需要2s和3s的精確延遲。預(yù)先的設(shè)計(jì)也是如此。原本是想通過8253定時(shí)器產(chǎn)生精確地1s定時(shí),具體的實(shí)現(xiàn)辦法是通過雙通道計(jì)數(shù)器

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

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

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

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

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

51、equ 0ec00h-280h ;tpc卡中設(shè)備的io地址</p><p>  io8253a equ ioport+280h ;計(jì)數(shù)器通道0地址</p><p>  io8253b equ ioport+281h ;計(jì)數(shù)器通道1地址</p><p>  io8253c equ ioport+282h ;計(jì)數(shù)器通道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 ;用于存放空閑車位的十位和個(gè)位</p><p>  state_a db 00h ;標(biāo)志a口狀態(tài),0表示空閑,1表示狀態(tài)前,2標(biāo)志狀態(tài)中,3標(biāo)志狀態(tài)后</p><p>  state_b db 00h ;標(biāo)志b口狀態(tài),0表示空閑,1表示狀態(tài)前,2標(biāo)志狀態(tài)中,3標(biāo)志狀態(tài)后 </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;箭頭進(jìn) </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 ;計(jì)數(shù)器0工作方式3</p><p>  mov al,36h

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

69、t;p>  mov al,0b0h ;10110000,計(jì)數(shù)器2,工作方式0</p><p><b>  out dx,al</b></p><p>  mov dx,io8253a ;計(jì)數(shù)器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設(shè)置為A口及C口高四位輸出,B口及C口低四位出入</p><p>  mov al,83h

71、 ;10000011 設(shè)置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 ;系統(tǒng)調(diào)用,在電腦屏幕上顯示mess1</p><p><b>  int 21h</b></p><p>  mov dx,offset num ;系統(tǒng)調(diào)用

73、,從鍵盤輸入初始的"空車位數(shù)"到緩沖區(qū)</p><p>  mov ah,0ah</p><p><b>  int 21h</b></p><p>  mov al,num[2] ;判斷輸入數(shù)值是否符合條件</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的話就轉(zhuǎn)移到error</p>

75、;<p>  jb error</p><p>  cmp al,39h ;大于9的話就轉(zhuǎn)移到error</p><p><b>  ja error</b></p><p>  sub al,36h ;將ASCII碼轉(zhuǎn)換為數(shù)字</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: ;主循環(huán)</p><p>  call show ;調(diào)用數(shù)碼管顯示</p><p&

80、gt;  call disp_mat;點(diǎn)陣顯示相關(guān)圖示</p><p>  mov ah,01 ;系統(tǒng)調(diào)用</p><p><b>  int 16h</b></p><p><b>  jnz exit</b></p><p>  mov dx,io8255c;從8255

81、C口讀入數(shù)據(jù)</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] ;數(shù)碼管的高位</p><p>  mov bl,a[1] ;數(shù)碼管的低位</p><p>  cmp bx,0000h;如果沒有空車位就轉(zhuǎn)向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口開關(guān)1撥上,監(jiān)測(cè)a口狀態(tài)</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口開關(guān)1撥上,監(jiān)測(cè)a口狀態(tài)</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口開關(guān)1撥上,監(jiān)測(cè)a口狀態(tài)</p><p>  cmp state_a,00h ;空閑</p><p>  jz state_a1 </p><p>  cmp state_a,01h;a口狀態(tài)前</p>

90、;<p>  jz timecheck_a2s</p><p><b>  jmp exit1</b></p><p>  state_a1: </p><p>  mov dx,offset mess8;提示有車準(zhǔn)備進(jìn)入</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;計(jì)數(shù)器通道1地址,計(jì)數(shù)器賦2s</p><p>  mov al,00h </p><p><b>  out dx,al</b></p>

92、<p>  mov al,08h ;clk1接的是out0,經(jīng)過兩次分頻,得出兩秒</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號(hào)

95、口對(duì)應(yīng)于欄桿信號(hào))</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;計(jì)數(shù)器通道1地址</p><p>  mov al,00h</p><p><b>  out dx,al</b></p><p>  mov al,04h ;計(jì)時(shí)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 ;時(shí)間到</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關(guān)燈(欄桿閉合)</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口開關(guān)1撥上,監(jiān)測(cè)a口狀態(tài)</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;提示有車準(zhǔn)備離開</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;計(jì)數(shù)器賦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、 ;計(jì)時(shí)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 ;關(guān)燈(欄桿關(guān)閉)</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 ;數(shù)碼管顯示</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 ;使相應(yīng)的數(shù)碼管亮 高位</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 ;使相應(yīng)的數(shù)碼管亮 低位</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等.壓縮文件請(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. 眾賞文庫僅提供信息存儲(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)論