硬件課程設計報告---通訊設備人機接口設計_第1頁
已閱讀1頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  通訊設備人機接口設計</p><p> ?。ㄓ嬎銠C硬件技術基礎課程設計)</p><p>  專 業(yè):自動化 </p><p><b>  組 員:</b></p><p><b>  2012年9月</b></p><p><b>

2、;  人員及任務分配</b></p><p><b>  目錄</b></p><p>  一、系統(tǒng)功能和設計方案3</p><p>  1.1 基本設計目標實現(xiàn)3</p><p>  1.1.1 基本設計目標3</p><p>  1.1.2 按鍵說明4</p>

3、<p>  1.2 硬件連接5</p><p>  1.2.1 鍵盤掃描連接圖:5</p><p>  1.2.2 顯示連接圖:6</p><p>  1.3 系統(tǒng)設計思路6</p><p><b>  二、程序流程圖7</b></p><p>  2.1 主程序流程7&l

4、t;/p><p>  2.2 子程序流程圖8</p><p>  2.2.1 查詢子程序:8</p><p>  2.2.2 撥號程序:9</p><p>  2.2.3 撥號子程序:10</p><p>  2.2.4 接聽子程序:11</p><p>  2.2.5 時間譯碼及中斷程序

5、:12</p><p>  2.2.6 鍵盤和開關掃描程序:13</p><p>  三、編程與調(diào)試14</p><p><b>  四、心得體會14</b></p><p><b>  五、程序清單17</b></p><p>  一、系統(tǒng)功能和設計方案</

6、p><p>  1.1 基本設計目標實現(xiàn)</p><p>  根據(jù)課程設計任務書所提出的要求,我們小組通過討論和分析后首先確定出此次電通訊設備人機接口設計中我們需要完成的幾個基本功能以及操作方案:</p><p>  1.1.1 基本設計目標</p><p>  整個系統(tǒng)分為3個大功能模塊,分別為接聽、撥號和查詢3個模塊。</p>

7、<p><b>  接聽模塊:</b></p><p>  當系統(tǒng)運行時,首先判斷有無來電,若來電,則在led上面顯示來電號碼,此時來電指示燈閃爍。同時,你可以通過鍵盤來選擇是否接聽、掛斷或者無操作。當選擇接聽時,跳入接聽子程序,并在led上顯示當前的通話時間。如果沒有任何操作,過一段時間程序會自動掛斷,同時在led上面顯示來電的號碼。來電的號碼會自動存入來電存儲區(qū),來電存儲區(qū)會存

8、放最近三次未接來電的信息。</p><p><b>  撥號模塊:</b></p><p>  若沒有來電,可以按1號鍵進入撥號功能,鍵入撥號功能之后,撥號指示燈會常亮,此時表面你正在輸入號碼,同時led會等待數(shù)字鍵的按下,你可以選擇0-9的號碼,每當鍵入一個數(shù)字,就會在led的最低位顯示出當前按下的數(shù)字,當再次按下數(shù)字時,led上的所有數(shù)字將會左移一位,這樣就始終保

9、持當前輸入號碼為led的最低位。若電話號碼輸入完畢,此時你也可以選擇掛斷鍵,這樣就會返回主程序。當你按下?lián)芴栨I時,首先系統(tǒng)將會判斷你是否鍵入了6個數(shù)字鍵。若輸入正確,對方有沒有占線鍵按下的話,此時,led上會顯示連接信息;若所撥號碼不足6位或者超過6位,led上會顯示error的錯誤信息。你可以通過開關來確定是否接聽或者掛斷當前號碼,若接聽,則會顯示通話時長。若掛斷,led上會顯示hangup后,在led上仍會顯示你所撥的號碼,此時,你

10、可以按掛斷鍵返回主程序。當然你也可以選擇重撥。 若一直無人接聽,則會自動掛斷,led上會顯示autohp的自動掛斷信息。若撥號時對方占線,則在led上顯示busy的占線信息,一段時間后系統(tǒng)會自動掛斷。</p><p><b>  查詢模塊:</b></p><p>  當沒有來電時,你可以按下鍵盤的2號鍵,進入查詢功能。當進入查詢功能后,你可以通過選擇按下上翻或下翻

11、按鍵來查詢最近來電的三個號碼。如果你查詢到了比較重要的號碼,需要回撥時,你可以按下?lián)芴栨I,此時,led上會顯示連接信息,程序也跳入了撥號模塊。</p><p>  1.1.2 按鍵說明</p><p>  實驗箱3×4鍵盤從左向右,自上而下分別為1,2,3,4,5,6,7,8,9,撥號鍵,0,掛機鍵。開關K1至K6分別為來電,來電2,來電3,占線鍵,接聽鍵,掛斷鍵。</p&

12、gt;<p>  實驗箱面板上3*4小鍵盤:</p><p>  表1.1 3*4鍵盤功能對照表</p><p> ?。?)實驗箱面板上開關功能說明:</p><p>  表1.2 開關功能對照表</p><p><b>  1.2 硬件連接</b></p><p>  確定

13、了基本功能軟件設計方案,我們通過查閱相關資料,綜合討論后設計出了硬件連接方案,下面是我們的硬件連接:</p><p>  開關 K1---K6接B0---B5;</p><p>  鍵盤 P0---P3接C0---C3</p><p>  Q0---Q2接C4---C6;</p><p>  8254定時器0的GATE接+5V,OUT端與82

14、59的IRQ0連接,D0接8255的A0,</p><p>  8254的CS與CS1(300H)連接。</p><p>  8259的SP/1接+5V,INTR接INT1,CS-1接CS2(320H)。</p><p>  1.2.1 鍵盤掃描連接圖:</p><p><b>  圖1.1</b></p>

15、<p>  1.2.2 顯示連接圖:</p><p><b>  圖1.2</b></p><p>  1.3 系統(tǒng)設計思路</p><p>  將整個系統(tǒng)分為許多個小的模塊,各個模塊之間相互獨立,通過定義不同的接口來實現(xiàn)各個模塊的連接。這樣在調(diào)試程序的時候,可以分別進行調(diào)試??梢约涌煺n程設計的進程,縮短課程設計時間,簡化我們的調(diào)試

16、工作。</p><p>  關于通訊系統(tǒng)的人機接口設計,其實主要是要完成三大功能的設計。即:接聽功能,撥號功能和查詢功能。我們從這三個功能入手,分別對其進行了模塊細化,畫出了相應的程序流程。</p><p><b>  二、程序流程圖</b></p><p><b>  2.1 主程序流程</b></p>&

17、lt;p><b>  圖2.1</b></p><p>  2.2 子程序流程圖</p><p>  2.2.1 查詢子程序:</p><p><b>  圖2.2</b></p><p>  2.2.2 撥號程序:</p><p><b>  圖2.3<

18、;/b></p><p>  2.2.3 撥號子程序:</p><p><b>  圖2.4</b></p><p>  2.2.4 接聽子程序:</p><p><b>  圖2.5</b></p><p>  2.2.5 時間譯碼及中斷程序:</p>

19、<p><b>  圖2.6</b></p><p>  2.2.6 鍵盤和開關掃描程序:</p><p><b>  圖2.7</b></p><p><b>  三、編程與調(diào)試</b></p><p>  在明確實現(xiàn)目的與方法后,我們畫出了流程圖,根據(jù)流程圖,我們

20、編制出整個設計的主程序和子程序,并且通過組員的反復調(diào)試后,實現(xiàn)了提出的基本功能和拓展功能。再進行綜合調(diào)試,測試系統(tǒng)的可行性。</p><p><b>  四、心得體會</b></p><p>  兩周的計算機硬件課程設計終于要結(jié)束了,總算是實現(xiàn)了所要求的基本功能,所要完善的地方也只能再往后的時間里自 己去摸索去改善,但是打從心里覺得這兩周真的受益匪淺。</p&g

21、t;<p>  在課程設計剛開始階段,由于始終感覺按鍵不夠用,導致了前面階段的進展很慢,但大家都還比較有團隊協(xié)作精神,沒 有自己一味的按著自己的思路走,然后大家就坐下來好好的討論一下,最后是通過小組討論確定了我們這個設計的統(tǒng)一方案,接著 大家就按照個人的專長,分配好每個人的具體任務,我所負責的是程序的主體流程邏輯以及實現(xiàn)細節(jié)。</p><p>  在剛開始畫流程圖的時候,我沒有按照任務書上面的基本要

22、求來畫,就是按照自己的想法來設計人機通訊接口,結(jié)果浪 費了半天的時間,到最后,當考慮到細節(jié)問題時,總覺得有些不合理,所以,都舍棄前面那些不合理的流程圖,最后還是小組討論 定下了流程方案,然后再把流程圖細節(jié)化。到了編程的時候,我們接受了老師的經(jīng)驗,將整個程序模塊化了。其實,這還是我第一 次將整個程序進行模塊化,以前做的時候,都是比較小的程序,雖然也有模塊化,但對于模塊化時的接口并沒有考慮得那么詳細, 這次不同了,我得好好的考慮每個模塊的接

23、口問題了,我看了很多別人的程序,最后,總算有了一個比較明確的方案。最后我分配 給了每個組員相關的模塊任務。我認為不管組員的編程能力怎么樣,對于這樣一個課程設計,每一個組員都應該參與到其中,并且 體會一下其中的樂趣,能力強的,就分得大一點的模塊??傊屆恳粋€人都能嘗試一下,這樣每個人在此次課程設計中應該都會有 不少的收獲。經(jīng)過一個星期的努力,我們程序的基本功能都已經(jīng)實現(xiàn)了。我們打算在原有的功能上,加上一些比較人性化的細節(jié), 雖然這些細節(jié)可

24、能不算是附加功能,但我覺得既然要做,就要盡善盡美。因此,我們又著手修</p><p>  最后我總結(jié)出來幾點心得:</p><p>  1、我們模塊化時,一定要注意接口問題;</p><p>  2、我們寫程序時,要養(yǎng)成加注釋的習慣;</p><p>  3、不管是子程序還是跳轉(zhuǎn)的入口點,最好使用能體現(xiàn)程序功能的英文縮寫表示。</p&g

25、t;<p>  最后也是最重要的一步,調(diào)試程序,就比較費時費力了,因為這個不僅僅要看程序邏輯,因為有時候但看程序很難看出 其中的錯誤,需要用到單步調(diào)試,這個實在是太考一個人的耐心了,而且有時候程序不一定有錯,而且硬件出問題了,比如接線是 斷的,或者按鍵是壞的不靈敏的,我剛開始的時候在抱怨學校為什么不換一些好一點的硬件,但是后來想想以后的工作我們不也是 會遇到這樣的情況嗎,難道我們所遇到的硬件機器會一直都是可靠無錯的嗎?現(xiàn)在

26、早點遇到這種情況,學會如何去處理也對我們是 一種鍛煉?。?lt;/p><p>  我們組本次計算機硬件基礎課程設計的題目是通訊設備人機接口設計,我們班采用的是抽簽的方式分配題目,當我們接到這個題目的時候頓時傻眼了。不想選這個題目,原因有兩個:第一,功能多,繁瑣;第二,不利于添加新的功能。</p><p>  說實話,已經(jīng)放了一學期的硬件知識,到現(xiàn)在我已經(jīng)忘得差不多了。本來學習的時候就學得不是很

27、好,為了不拖大家的后腿,我用了第一天整個晚上的時間把硬件的書粗略的過了一遍,把支離破碎的知識重新拾起在腦海里。</p><p>  第二天,早上八點半,我們準時來到了實驗室。我們幾個理清了所有的功能和流程,一個上午我們把整個的流程圖畫出來了,再用了下午跟晚上的時間修改整理出來了主程序,和各個模塊的流程圖。第三天,我們把主程序和各個模塊的流程圖用專業(yè)工具畫了出來。然后進行了任務分工,由于我編程水平一般,所以沒有分配

28、到特別復雜的模塊,我負責顯示模塊,以及延時程序。</p><p>  乍一看,我的任務太簡單了,我最初也這么以為,可是當我真正著手干的時候我才發(fā)現(xiàn),各種各樣的問題都來了。</p><p>  比如,我們使用的是三色LED燈的六位顯示。我要把所有需要顯示的信息全部設計出來,而且顯示的每一個信息都不能超過六位,最重要的是,還要使用能用八段LED顯示出來的字母,像如果遇見“w”之類的字母,我想沒

29、有哪位大神能用八段LED把它顯示出來吧。所以,這可真不是一件讓人省心的事。遇見像掛斷之類的信息還好,直接用英文“hangup”,可是當遇到像接聽之類的信息的時候就比較讓人頭疼了,冥思苦想,最終設計出了“no ans”,我想終究還是能夠傳情達意。最終我用了1個小時把這些需要顯示的八種信息全部用八段LED可以顯示的英文或符號設計出來了。設計好這個問題又來了,三色LED能顯示的字形碼只有0~F這十六個數(shù)字,我們顯示需要用到的字母或者符號全都沒

30、有,沒辦法,自己編唄。對于從來都很不細心的我,這又是一個不小的挑戰(zhàn),還好最終我把這些東西都順利的弄出來了。(很不幸,調(diào)試的時候還是發(fā)現(xiàn)編錯了一個碼)</p><p>  在設計和調(diào)試的過程中我們遇到了各種各樣的問題,還好我們相互幫助,相互提醒,相互鼓勵,最終完成了這次的設計。這次的設計不僅讓我復習了計算機硬件基礎的基本知識,還讓我學會了理論與實際的結(jié)合,最重要的是我體會到了一個團隊的力量。</p>

31、<p>  本次課程設計我們小組抽到的是通訊設備人機接口的模擬設計,在剛分配好設計任務書后,小組4人快速選好組長,并初步安排好后面兩周的工作。</p><p>  首先是我們每個人各自研究設計任務書的內(nèi)容要求,分析好要實現(xiàn)的每一功能,然后復習好計算機硬件的知識并擬定好各自的設計思路以及程序流程圖。再接著我們開始進行小組討論,每個人各自說出自己的設計思路然后由其他組員提出問題,找出不足并提出修改方案并討論

32、可行性,在整合4個人的思想后初步擬定程序功能以及流程框架,然后一起畫出程序流程圖并針對細節(jié)進行討論。最終我們設計的通訊設備人機接口總的分為3大功能模塊:接聽、來電以及查詢。</p><p>  在定好框架后我們開始分配任務,我分配到的是鍵盤掃描、開關掃描、 顯示代碼、時間譯碼以及LED計時初始化的子程序。接下來的一天我們通過翻查資料以及參照實驗書上的參考程序完成各自的編程工作。在編寫鍵盤時通過8255C口高位依次

33、給每列送“0”,再由8255低口讀取每行的狀態(tài)查找是否有按鍵按下,接著延時去抖,判斷按下的鍵并根據(jù)鍵號賦予特定的值。開關的掃描我是通過8255B口來讀取的,在判斷是哪個按鍵按下轉(zhuǎn)入相應的子程序。</p><p>  在編程的過程中只要思路清晰,畫好流程圖,還是很好寫出來的。比較痛苦的是調(diào)試的時候,歷時長,錯難找,讓人心情煩躁。語法性的錯誤還有提示,邏輯推理上的錯誤,這需要一次次的單步調(diào)試,仔細觀察以及思索才能找出

34、。讓我記憶深刻的是每個子程序調(diào)試都通過了,但在連調(diào)的時候卻還是錯誤不斷。很多地方暴露出來的是我們思維的不嚴謹,例如再通過8255B口讀開關的狀態(tài)時由于只用到低6位,而高2位一直閑置的著不管,最終導致連調(diào)時該判斷跳轉(zhuǎn)的地方不跳轉(zhuǎn),足足讓我們檢查單步調(diào)試而來2個多小時才查找到錯誤的地方。</p><p>  這次課程設計歷時兩周,在我們小組成員的分工合作下最終完成了設計任務。通過這次課程設計我學到了不少東西。不僅讓我

35、們復習了以前學過的知識,更然我們深刻體會到程序模塊化設計的便利性以及自身思維嚴謹?shù)闹匾?。相信這些在我今后的學習工作生活中將有很大的幫助。</p><p>  在這次短暫的兩個星期的學習和設計中,我和我的隊友們一起合作完成了通訊設備人機接口設計的任務。通訊設備這個系統(tǒng)設計的難點主要在于其設計過程中功能的復雜性。經(jīng)過討論,考慮到按鍵并不充足,我們把這次查詢號碼的任務單獨拿出使用一個界面,這樣在使用的時候用戶按相應的

36、功能鍵進入所需的界面進行操作。在這次課程設計中,我負責的主要是查詢功能的實現(xiàn)。在這次合作設計里,我學到了很多東西。在最初的討論設計中,組長提出了共用內(nèi)存的方法,這是我以前沒有意識到的。這樣做的好處多多,很好的解決了各模塊之間的連接問題并讓各個模塊之間相互獨立。這樣有效的保證了各個組員獨立設計的程序能夠組合和為一個可行的大程序。</p><p>  設計完了程序則該輪到調(diào)試了,各個模塊進行獨立的調(diào)試。調(diào)試是一件很需

37、要耐心的工作,同時也需要相當?shù)淖屑殹R苍S只是稍微寫漏了一句語句也會耽擱相當大的時間。尤其是當設計者被調(diào)試擾亂了思維的時候更應該靜下心來仔細閱讀程序,檢驗自己的邏輯是否有誤。這些都是需要慢慢學習的。</p><p>  當問題被一個個解決之后,我們終于看到了希望。初步的功能已經(jīng)可以實現(xiàn),雖然還有不足,但我們已經(jīng)向成功邁進。接下來則是對程序進行優(yōu)化,對整體功能進行更合理的調(diào)整,使其更偏向于使用者的習慣。最后我們添加了

38、一些更便利的功能,讓整個系統(tǒng)更完善。</p><p>  總之,在這次的課程設計中,我學習到了很多的東西。這是第一次合作做出一個比較貼近現(xiàn)實生活和實際的系統(tǒng),感覺自己終于能夠?qū)⑺鶎W的知識跟實際應用聯(lián)系到了一起。深刻認識到了自己的動手能力以及知識的熟悉程度等方面的欠缺。這還需要進行大量的練習才行。匯編語言與物理硬件靠得很近,這就需要我們對物理硬件有深刻的了解。如何掌控好一個硬件的特點,則可以更好的進行匯編語言的編程

39、。作為一個團隊各個組員之間的相互溝通是完成好一項工作的前提,也是大家進步的條件。</p><p><b>  五、程序清單</b></p><p><b>  .486</b></p><p>  CODE SEGMENT USE16</p><p><b>  ORG2000H<

40、/b></p><p>  CTRL_8254 EQU 30CH</p><p>  COUNT0 EQU 300H</p><p>  COUNT1 EQU 304H</p><p>  CTRL_8255 EQU 20FH</p><p>  PORTA EQU 203H</p>

41、;<p>  PORTB EQU 207H</p><p>  PORTC EQU 20BH</p><p>  ADDR0 EQU 320H</p><p>  ADDR1 EQU 328H</p><p>  INTQ EQU 40H</p><p>  KE

42、Y_FLAG DB ? ;按鍵標識</p><p>  SEC_VAR DB ? ;秒鐘存儲</p><p>  SEC_VAR1 DB ?</p><p>  MIN_VAR DB ? ;分鐘存儲</p><p>  MIN_VAR1 DB ?</p><p>  HO

43、UR_VAR DB ? ;時鐘存儲</p><p>  HOUR_VAR1 DB ?</p><p>  DISP_VAR DB ? ;顯存指針</p><p>  DIAL_FLAG DB ? ;撥號位數(shù)存儲標識</p><p>  SI_ADDR DW ? ;SI地址存儲</p>

44、;<p>  JINWEI DB ? ;進位標識</p><p>  SWIT_FLAG DB ? ;開關標識</p><p>  CMP_FLAG DB ? ;比較標識</p><p>  KEY_S_FLAG DB ? ;是否有按鍵按下標識</p><p>  SWIT_S_FLAG

45、 DB ? ;是否有開關按下標識</p><p>  CMP_FLAG_N_P DB ? ;來電號碼個數(shù)標志</p><p>  ;---------------------------------------------------------------------------</p><p>  ;----------------------------

46、-----------------------------------------------</p><p>  ASSUME CS:CODE</p><p>  DIV_NUM DB 10</p><p>  MUL_NUM DB 6 ;乘法間隔</p><p>  ERROR DB 88H,0C0H,88H,8

47、8H,86H,0FFH ;錯誤 </p><p>  BUSY DB 0FFH,91H,92H,0C1H,83H,0FFH;占線</p><p>  NECTED DB 0A1H,84H,87H,0C6H,84H,0C8H;接通信息</p><p>  HANGUP DB 8CH,0C1H,90H,0C8H,0A0H,8BH;掛斷</p&

48、gt;<p>  NOANS DB 92H,0C8H,0A0H,0FFH,0C0H,0C8H;無人接聽</p><p>  AUTOHP DB 8CH,8BH,0C0H,87H,0C1H,0A0H ;自動掛斷</p><p>  DIE_OUT DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH;熄滅</p><p>

49、  STANDBY DB 0BFH,0BFH,0BFH,0BFH,0BFH,0BFH;待機</p><p>  NUM1 DB 06H,06H,08H,04H,06H,07H ;顯示764866</p><p>  NUM2 DB 06H,05H,03H,03H,04H,08H ;顯示843356</p><p>  NU

50、M3 DB 06H,05H,01H,00H,01H,03H ;顯示310156</p><p>  SEC_CODE DB 01H,02H,03H,04H,05H,06H ;密碼123456</p><p>  SEC_CODE1 DB 6 DUP(0)</p><p>  DISP_MEM DB 6 DUP(0)</p&g

51、t;<p>  DISP_MEM1 DB 6 DUP(0) ;顯存?zhèn)溆?lt;/p><p>  DISP_NUM DB 18 DUP(?)</p><p>  DISP_TAB DB 0C0H,0F9H,0A4H,0B0H</p><p>  DB 99H,92H,82H,0F8H,80H,90H</p&g

52、t;<p><b>  ORG 2100H</b></p><p>  ;-----------------------------------------------</p><p>  ;-----------------------------------------------主程序</p><p><b>  

53、START:</b></p><p>  CALL INITIAL_8254</p><p>  CALL INITIAL_8255</p><p>  CALL INITIAL_8259;初始化8254,8255,8259</p><p>  L0: </p><p>  LEA SI,ST

54、ANDBY</p><p>  MOV SI_ADDR,SI</p><p>  CALL DISP_CODE</p><p>  CALL SWIT_SCAN ;判斷是否有來電,開關掃描</p><p>  CMP SWIT_S_FLAG,01H</p><p><b>  JNE L1<

55、;/b></p><p>  CMP SWIT_FLAG,2</p><p><b>  JG L1 </b></p><p>  CALL ANSW ;接聽子程序</p><p>  L1: MOV SWIT_S_FLAG,00H</p><p>  MOV

56、SWIT_FLAG,00H</p><p>  CALL KEY_SCAN ;按鍵掃描,判斷是否撥號</p><p>  CMP KEY_FLAG,01H</p><p><b>  JNE L2</b></p><p>  CALL DIAL_P ;撥號程序</p>&

57、lt;p>  L2: CMP KEY_FLAG,2</p><p><b>  JNE L0</b></p><p>  CALL REFER_P ;查詢子程序</p><p><b>  JMP L0</b></p><p>  ;------------------

58、--------------------------------------------------------------</p><p>  ;--------------------------------------------------------------------------------顯示代碼模塊 </p><p>  DISP_CODE PROC NEAR&

59、lt;/p><p><b>  PUSHA</b></p><p>  MOV SI,SI_ADDR</p><p>  LEA DI,DISP_MEM</p><p><b>  MOV CX,6</b></p><p>  ERR_AGN:MOV AL,[SI]</p&

60、gt;<p>  MOV [DI],AL</p><p><b>  INC DI</b></p><p><b>  INC SI</b></p><p>  LOOP ERR_AGN</p><p><b>  CALL DISP</b></p>

61、<p>  MOV ECX,01FFFH ;加入了顯示延時</p><p><b>  LOOP $</b></p><p><b>  POPA</b></p><p><b>  RET</b></p><p>  DISP_CODE ENDP&

62、lt;/p><p>  ;----------------------------</p><p>  ;---------------------------- 初始化模塊</p><p>  INITIAL_8254 PROC NEAR; 8254初始化</p><p><b>  PUSHA</b></p>

63、;<p>  MOV DX,CTRL_8254</p><p>  MOV AL,30H ;工作方式0,0號通道,先寫低后寫高字節(jié)</p><p><b>  OUT DX,AL</b></p><p>  MOV DX,COUNT0</p><p>  MOV AX,47000&

64、lt;/p><p><b>  OUT DX,AL</b></p><p><b>  MOV AL,AH</b></p><p><b>  OUT DX,AL</b></p><p><b>  POPA</b></p><p>&

65、lt;b>  RET</b></p><p>  INITIAL_8254 ENDP</p><p>  INITIAL_8255 PROC NEAR;8255初始化,鍵盤掃描初始</p><p><b>  PUSHA</b></p><p>  MOV DX,CTRL_8255</p>

66、<p>  MOV AL,83H ;C口高四位輸出,低四位輸入,b口輸入,a口輸出</p><p><b>  OUT DX,AL</b></p><p>  MOV DX,PORTA</p><p>  MOV AL,0FFH</p><p><b>  OUT DX,A

67、L</b></p><p>  CALL DELAY_05S</p><p><b>  POPA</b></p><p><b>  RET</b></p><p>  INITIAL_8255 ENDP</p><p>  INITIAL_8259 PROC

68、NEAR ;8259初始化</p><p><b>  PUSHA</b></p><p>  MOV DX,ADDR0</p><p>  MOV AL,13H</p><p><b>  OUT DX,AL</b></p><p>  MOV DX,ADDR

69、1</p><p>  MOV AL,40H</p><p><b>  OUT DX,AL</b></p><p>  MOV DX,ADDR1</p><p>  MOV AL,01H</p><p><b>  OUT DX,AL</b></p><

70、p>  MOV DX,ADDR1</p><p><b>  IN AL,DX</b></p><p>  AND AL,0FEH ;IR0開放</p><p><b>  OUT DX,AL</b></p><p>  CLI

71、 ;關中斷,并且填寫中斷向量表</p><p><b>  MOV AX,0 </b></p><p><b>  MOV DS,AX</b></p><p>  LEA AX,INT_P</p><p>  MOV DS:[INTQ*4],AX</p><p>  MOV

72、 AX,SEG INT_P</p><p>  MOV DS:[INTQ*4+2],AX</p><p><b>  POPA</b></p><p><b>  RET</b></p><p>  INITIAL_8259 ENDP</p><p>  ;---------

73、------------- </p><p>  ;---------------------- 撥號模塊</p><p>  DIAL_P PROC NEAR ;撥號程序 </p><p><b>  PUSHA</b></p><p>  LD5: LEA DI

74、,DISP_MEM1 ;為了重撥時能顯示號碼</p><p>  LEA SI,DIE_OUT ;清屏</p><p>  MOV SI_ADDR,SI</p><p>  CALL DISP_CODE</p><p>  MOV DIAL_FLAG,00H ;撥號位數(shù)存儲標識</p>&l

75、t;p>  LD0: MOV CX,20 ;延時5秒不按任何按鍵推出,有任何按鍵按下都要重新賦值</p><p>  LD: CALL KEY_SCAN </p><p>  CMP KEY_S_FLAG,01H</p><p>  JNE LD1 ;沒有按鍵按下,跳到循環(huán)10次程序<

76、/p><p>  MOV AL,KEY_FLAG</p><p>  CMP KEY_FLAG,0BH ;判斷是否為掛機鍵</p><p><b>  JE OVER_D</b></p><p>  CMP KEY_FLAG,0AH ;判斷是否為接聽鍵</p><p>  JE

77、 JUDGE_6 ;判斷是否為6位數(shù) </p><p>  CMP KEY_FLAG,0AH</p><p>  JL NUM_D ;為數(shù)字</p><p>  LD1: CALL DELAY_05S ;延時0.5s</p><p><b>  LOOP L

78、D</b></p><p>  JMP OVER_D</p><p>  JUDGE_6:CMP DIAL_FLAG,6</p><p>  JNE ERROR_D ;顯示錯誤信息</p><p>  CALL SUB_DIAL ;撥號子程序</p><p>  ;-

79、---------------------------------------------顯示所撥號碼,掛機鍵反回主程序</p><p>  LEA SI,DISP_MEM1</p><p>  LEA DI,DISP_MEM</p><p><b>  MOV CX,6</b></p><p>  LD2: MO

80、V AL,[SI]</p><p>  MOV [DI],AL</p><p><b>  INC SI</b></p><p><b>  INC DI</b></p><p><b>  LOOP LD2 </b></p><p><b>

81、  CALL DISP</b></p><p>  LD3: CALL KEY_SCAN</p><p>  CMP KEY_S_FLAG,01H</p><p><b>  JNE LD3</b></p><p>  CMP KEY_FLAG,0BH</p><p><b

82、>  JE OVER_D</b></p><p>  CMP KEY_FLAG,0AH</p><p>  JE JUDGE_6</p><p>  JMP LD3 </p><p>  ;-----------------------------------------------------------

83、 </p><p>  ERROR_D: LEA SI,ERROR</p><p>  MOV SI_ADDR,SI</p><p>  CALL DISP_CODE</p><p><b>  MOV CX,20</b></p><p>  ERROR_D1:CALL DELAY_05S

84、 ;顯示錯誤信息時間</p><p>  LOOP ERROR_D1</p><p>  JMP OVER_D</p><p>  NUM_D: LEA SI,DISP_MEM</p><p>  INC DIAL_FLAG ;撥號位數(shù)+1</p><p>  LEA BX,DISP_TAB&l

85、t;/p><p>  MOV AL,KEY_FLAG</p><p>  XLAT ;所撥號碼譯碼</p><p>  MOV [SI],AL</p><p>  MOV [DI+5],AL</p><p>  CMP KEY_S_FLAG,01H</p><p>&

86、lt;b>  JNE LD </b></p><p>  CALL DISP </p><p><b>  DEC DI </b></p><p>  MOV AL,[SI+5] ;顯存數(shù)據(jù)左移一位 </p><p>  MOV [SI+6],AL</p><p>

87、;  MOV AL,[SI+4]</p><p>  MOV [SI+5],AL</p><p>  MOV AL,[SI+3]</p><p>  MOV [SI+4],AL</p><p>  MOV AL,[SI+2]</p><p>  MOV [SI+3],AL</p><p>  M

88、OV AL,[SI+1]</p><p>  MOV [SI+2],AL</p><p>  MOV AL,[SI]</p><p>  MOV [SI+1],AL</p><p>  JMP LD0 ;跳轉(zhuǎn)到鍵盤掃描程序</p><p>  OVER_D: POPA</p>

89、<p><b>  RET</b></p><p>  DIAL_P ENDP</p><p>  SUB_DIAL PROC NEAR ;撥號子程序</p><p><b>  PUSHA </b></p><p>  LS: CALL SWIT_SCAN</p&

90、gt;<p>  CMP SWIT_S_FLAG,01H</p><p>  JNE LS4 ;沒有按開關跳轉(zhuǎn)到循環(huán)</p><p>  CMP SWIT_FLAG,3 ;判斷是否占線</p><p>  JE DISP_B ;顯示占線信息</p><p>  LS4: CM

91、P KEY_FLAG,0AH</p><p><b>  JNE LS7</b></p><p>  LEA SI,NECTED ;顯示接通信息</p><p>  MOV SI_ADDR,SI</p><p>  CALL DISP_CODE</p><p>  CALL INITIA

92、L_8255</p><p>  LS7: MOV CX,30 ;調(diào)試完后改為30</p><p>  LS3: CALL SWIT_SCAN</p><p>  CMP SWIT_S_FLAG,01H</p><p><b>  JNE LS5</b></p><p

93、>  CMP SWIT_FLAG,4 ;等于表示接通</p><p>  JE INI_L_8254 ;初始LED,8254(顯示000000)</p><p>  CMP SWIT_FLAG,5</p><p>  JE HANGUP_MES ;顯示掛斷信息</p><p>  LS5: ;---------

94、---------------------------------------------------連接過程中可以掛機</p><p>  CALL KEY_SCAN </p><p>  CMP KEY_S_FLAG,01H</p><p>  JNE LS8 ;沒有按鍵按下,跳到循環(huán)10次程序</p><p>  

95、MOV AL,KEY_FLAG </p><p>  CMP KEY_FLAG,0BH ;判斷是否為掛機鍵</p><p>  JE SUB_D_OVER </p><p>  ;---------------------------------------------------------------</p><p>  LS8:

96、 MOV DX,203H</p><p>  MOV AL,0FEH</p><p><b>  OUT DX,AL</b></p><p>  CALL DELAY_05S</p><p><b>  LOOP LS3</b></p><p>  LEA SI,NOAN

97、S ;顯示無人接聽信息</p><p>  MOV SI_ADDR,SI</p><p>  CALL DISP_CODE</p><p>  MOV ECX,0FFFFFH</p><p>  WT1: LOOPD WT1</p><p><b>  ;顯示0.5s&l

98、t;/b></p><p>  JMP SUB_D_OVER ;返回</p><p>  HANGUP_MES:LEA SI,HANGUP</p><p>  MOV SI_ADDR,SI</p><p>  CALL DISP_CODE</p><p>  MOV ECX,0FFFFFH

99、</p><p>  WT4: LOOPD WT4</p><p>  JMP SUB_D_OVER ;跳轉(zhuǎn)到子程序結(jié)束</p><p>  INI_L_8254:CALL INITIAL_LED00 ;初始化led讓其顯示6個0</p><p>  CALL INITIAL_8254

100、 ;8254裝入初值1s </p><p>  STI ;開中斷</p><p>  LS0: CALL KEY_SCAN</p><p>  MOV DX,203H</p><p>  MOV AL,0FEH</p><p><b> 

101、 OUT DX,AL</b></p><p>  CMP KEY_FLAG,11</p><p>  JNE LS0 ;不掛斷繼續(xù)掃描鍵盤</p><p>  CLI ;按下掛機鍵關中斷</p><p>  LEA SI,DIE_OUT</p&g

102、t;<p>  MOV SI_ADDR,SI</p><p>  CALL DISP_CODE ;LED熄滅</p><p>  CALL DELAY_05S</p><p>  JMP SUB_D_OVER </p><p>  DISP_B:MOV CX,10</p><p> 

103、 LEA SI,BUSY</p><p>  MOV SI_ADDR,SI</p><p>  CALL DISP_CODE ;顯示占線BUSY</p><p>  LS1: CALL KEY_SCAN</p><p>  CMP KEY_S_FLAG,01H</p><p><

104、b>  JNE LS6</b></p><p>  CMP KEY_FLAG,0AH</p><p>  JE DIAL_CONT ;繼續(xù)撥號,顯示號碼跳轉(zhuǎn)</p><p>  CMP KEY_FLAG,0BH</p><p>  JE SUB_D_OVER</p><p>

105、;  LS6: CALL DELAY_05S</p><p><b>  LOOP LS1</b></p><p>  LEA SI,AUTOHP</p><p>  MOV SI_ADDR,SI</p><p>  CALL DISP_CODE ;顯示自動關斷信息</p>

106、<p>  MOV ECX,0FFFFFH</p><p>  WT2: LOOPD WT2</p><p>  JMP SUB_D_OVER</p><p>  DIAL_CONT: LEA SI,DISP_MEM</p><p>  LEA DI,DISP_MEM1</p><p><

107、;b>  MOV CX,6</b></p><p>  DIAL_CONT1:MOV AL,[DI]</p><p>  MOV [SI],AL</p><p><b>  INC DI</b></p><p><b>  INC SI</b></p><p&g

108、t;  LOOP DIAL_CONT1</p><p><b>  CALL DISP</b></p><p>  MOV ECX,0FFFFFH</p><p>  WT3: LOOPD WT3</p><p>  MOV SWIT_FLAG,00H </p><p>&l

109、t;b>  JMP LS</b></p><p>  SUB_D_OVER:MOV KEY_FLAG,00H</p><p>  MOV SWIT_FLAG,00H </p><p><b>  ;清標志</b></p><p><b>  POPA</b></p>

110、<p><b>  RET</b></p><p>  SUB_DIAL ENDP</p><p>  ;-----------------------</p><p>  ;-----------------------來電模塊</p><p>  ANSW PROC NEAR</p><

111、p><b>  PUSHA</b></p><p>  CALL SWIT_SCAN</p><p>  LEA SI,DISP_NUM ;指向18位號碼顯存地址</p><p>  LEA DI,NUM1</p><p>  LEA BX,DISP_TAB</p><p&

112、gt;  LEA BP,DISP_MEM</p><p>  CMP SWIT_FLAG,0</p><p><b>  JE A_NUM</b></p><p>  CMP SWIT_FLAG,1</p><p><b>  JE A_NUM</b></p><p> 

113、 A_NUM:;--------------------</p><p>  INC CMP_FLAG_N_P</p><p>  CMP CMP_FLAG_N_P,04H</p><p><b>  JL L_A</b></p><p>  MOV CMP_FLAG_N_P,03H</p><

114、p>  LEA SI,DISP_NUM</p><p>  ADD SI,12H</p><p>  ;--------------------</p><p>  L_A: MOV AL,SWIT_FLAG</p><p>  MUL MUL_NUM </p><p>  ADD

115、 DI,AX ;AX里裝的地址間隔</p><p>  DEC CMP_FLAG_N_P ;裝入內(nèi)存地址的首地址</p><p>  MOV AL,CMP_FLAG_N_P </p><p>  MUL MUL_NUM</p><p>  INC CMP_FLAG_N_P

116、 ;還原內(nèi)存地址的首地址</p><p>  ;---------------------</p><p><b>  ADD SI,AX</b></p><p><b>  MOV CX,6</b></p><p>  LAN: MOV AL,[DI]

117、 ;將號碼存入18位內(nèi)存</p><p>  MOV [SI],AL ;將si里的數(shù)查表存入顯存</p><p><b>  XLAT</b></p><p>  MOV [BP],AL ;存入顯存</p><p><b>  INC BP&l

118、t;/b></p><p><b>  INC SI</b></p><p><b>  INC DI</b></p><p><b>  LOOP LAN</b></p><p>  CALL DISP ;調(diào)用顯示程序</p&

119、gt;<p>  ;------------------------ </p><p>  MOV CX,10H</p><p>  CALL INITIAL_8255</p><p>  LAN1: MOV DX,203H</p><p>  MOV AL,0FEH</p><p>  OU

120、T DX,AL ;A口最低位輸出低電平,燈亮 </p><p>  CALL KEY_SCAN</p><p>  ;-----------------------------------------------燈亮</p><p>  MOV DX,203H</p><p>  MOV A

121、L,0FEH</p><p><b>  OUT DX,AL</b></p><p>  ;-------------------------------------------------</p><p>  CMP KEY_S_FLAG,01H</p><p><b>  JNE LAN11</b&g

122、t;</p><p>  CMP KEY_FLAG,10</p><p>  JE SUB_ANSW ;跳轉(zhuǎn)到應答分支</p><p>  CMP KEY_FLAG,11</p><p>  JE SUB_HANGUP ;跳轉(zhuǎn)到</p><p>  LAN

123、11: CALL DELAY_051S</p><p>  MOV DX,203H</p><p>  MOV AL,0FFH ;燈滅</p><p><b>  OUT DX,AL</b></p><p>  CALL DELAY_051S</p><p>

124、<b>  LOOP LAN1</b></p><p>  JMP SUB_NOANSW</p><p><b>  SUB_ANSW:</b></p><p>  CALL INITIAL_8259</p><p>  CALL INITIAL_LED00;led顯示6個0</p>

125、<p>  CALL INITIAL_8254</p><p><b>  STI</b></p><p>  LAN3: CALL KEY_SCAN</p><p>  CMP KEY_FLAG,11</p><p>  JNE LAN3 </p><p>  CLI

126、 ;關中斷</p><p>  SUB_NOANSW:</p><p>  LEA SI,DIE_OUT</p><p>  MOV SI_ADDR,SI</p><p>  CALL DISP_CODE</p><p>  CALL DELAY_051S</p>

127、<p>  JMP ANS_END</p><p>  SUB_HANGUP:</p><p>  LEA SI,HANGUP</p><p>  MOV SI_ADDR,SI</p><p>  CALL DISP_CODE</p><p>  CALL DELAY_051S</p>&l

溫馨提示

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

評論

0/150

提交評論