

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 《微機接口技術課程設計》</p><p><b> 設計報告</b></p><p> 題目:實時鐘顯示與定時控制設計</p><p> 專業(yè): 電子信息工程 </p><p> 班級: XXXXXXX </p><p> 學號:
2、 XXXXXXXXX </p><p> 姓名: XXX </p><p> 指導老師: XXX </p><p> 設計時間:2013 年 6 月19日到 2013年 6月 25 號</p><p><b> 1.設計任務說明</b
3、></p><p> 通過本課程設計,綜合應用接口技術各匯編語言程序設計技術,在PC機上實現(xiàn)時鐘顯示、定時和響鈴,以提高接口、匯編技術的應用能力。</p><p><b> 2. 總體設計</b></p><p> ?。?). 利用BIOS 和DOS 的系統(tǒng)功能調用,能將計算機系統(tǒng)的日期和時間讀出并顯示出來。</p>&
4、lt;p> (2). 用“時:分:秒” (都是兩位)的形式連續(xù)顯示系統(tǒng)時間。</p><p> (3).利用定時接口芯片每秒鐘響一次鈴。</p><p> (4). 提示輸入定時時間(即定時秒數(shù)),每經歷指定的秒數(shù),則演奏樂曲。</p><p><b> 3. 詳細設計</b></p><p><b&
5、gt; 模塊描述:</b></p><p> ⑴.利用定時中斷實現(xiàn)時鐘顯示。</p><p> 當產生定時中斷時(由8259A的IRQ0引起),CPU轉入BIOS的08H號中斷處理程序,在該中斷處理程序中是一條軟中斷指令“INT 1CH”,而在該軟中斷程序中只有一條IRET指令,這樣系統(tǒng)每秒鐘產生18.2次定時中斷,調用18.2次INT 1CH,這為開發(fā)者提供了一個編寫與
6、時間有關的程序的軟中斷接口,上例的定時響鈴就是借用這個軟接口實現(xiàn)的。其具體操作如下:</p><p> ①在時鐘顯示程序,截獲1CH號中斷,在新的1CH中斷處理程序安排一個計數(shù)器,記錄調用的次數(shù),每18次(約一秒鐘)顯示一次當前時間。</p><p> ?、诶肂OIS的1AH號中斷的0號功能,讀取當前計時器的數(shù)值:</p><p> 入口參數(shù):AH=02H&l
7、t;/p><p> 執(zhí)行: INT 1AH</p><p> 出口參數(shù):AL=午夜信號,CH=時的BCD碼,CL=分的BCD碼,DH=秒的BCD碼 </p><p> ?、劾肂IOS的10H號中斷的13H號功能,實現(xiàn)在屏幕的右上角顯示時間。</p><p> ?、茉谥鞒绦蛑幸4嬖?CH號中斷的中斷向量,并設置新的時鐘顯示中斷程序
8、的中斷向量,然后作其它工作,如調用BIOS的鍵盤中斷INT 16H的0號功能,等待用戶按鍵盤,也就是等待中斷的發(fā)生,并在屏幕右上角顯示時間……,當用戶按鍵后,主程序工作完成后,恢復原1CH中斷向量。</p><p> ?、疲诙〞r中斷發(fā)生時同時調用發(fā)聲程序實現(xiàn)響鈴。</p><p> 發(fā)聲程序用定時器驅動揚聲器方式,這是直接利用8253/8254定時器產生聲音的一種方法。</p&g
9、t;<p> 定時器2的GATE2與8255A的端口61H的PB0相連,當PB0=1時,GATE2獲得高電平,使定時器2可以在模式3(方波)下工作。定時器2的OUT2與端口61H的PB1通過一個與門與揚聲器的驅動電路相連,如下圖所示。當PB1=1時,允許OUT2輸出的頻率信號到達揚聲器電路。</p><p> 定時器驅動揚聲器方式發(fā)聲原理</p><p> 定時器2輸出
10、的方波頻率取決與初始化定時器時提供的計數(shù)初值,即對CLK2端的計數(shù)脈信號的分頻系數(shù)。加在CLK2端上的頻率為1193100赫之=12348CH赫之,送入定時器2的計數(shù)初值為:12348CH÷發(fā)聲頻率。</p><p><b> 流程圖:</b></p><p><b> 主程序流程圖:</b></p><p>
11、;<b> 中斷程序:</b></p><p><b> 4.程序及說明</b></p><p> count_val=18 ;間隔數(shù)(約為一秒)</p><p> dpage=0 ;顯示頁碼數(shù)</p><p>
12、 row=0 ;顯示行號</p><p> column=70-buff_len ;顯示開始列號</p><p> column1=70-buff_len1 ;顯示日期的開始列號</p><p> color=07h ;字體顏色<
13、;/p><p><b> .286</b></p><p> .model small</p><p> .code ;為方便程序駐留內存,把中斷處理程序放在主程序之前</p><p> ??;下面是1CH中斷處理程序使用的變量</p><p> count dw count_v
14、al ;“滴答”間隔計數(shù)器</p><p> hhhh db ?,?,":" ;小時的定義</p><p> mmmm db ?,?,":" ;分的定義</p><p> ssss db ?,? ;秒的定義</p>&
15、lt;p> buff_len=$-offset hhhh ;顯示時間字長</p><p> xxxx db ?,? ;年高兩位的定義</p><p> yyyy db ?,?,"\" ;年低兩位的定義</p><p> zzzz db ?,?,"\"
16、 ;月定義</p><p> rrrr db ?,? ;日定義</p><p> buff_len1=$-offset xxxx ;顯示日期字長</p><p> cursor dw ? ;保存當前光標位置</p><p> ??;1CH號中斷處理程序代碼
17、</p><p><b> new1ch:</b></p><p> cmp cs:count,0 ;是否到顯示時候</p><p> jz next ;判斷是否轉到next</p><p> dec cs:count ;否則間隔計數(shù)器減1</p>&
18、lt;p> iret ;中斷返回</p><p> next: ;顯示系統(tǒng)時間日期子程序</p><p> mov cs:count,count_val ;間隔計數(shù)器重置初值18</p><p> sti ;開中斷</p>
19、<p> pusha ;保護現(xiàn)場</p><p><b> push ds</b></p><p><b> push es</b></p><p> push cs ;填寫DS和ES</p><p><
20、;b> pop ds</b></p><p><b> push ds</b></p><p><b> pop es</b></p><p> call get_t ;調用讀取系統(tǒng)時間子程序</p><p> mov bh,dpage
21、 ;BX<-頁號</p><p> mov ah,3 ;取原光標位置</p><p><b> int 10h</b></p><p> mov cursor,dx ;保存原光標位置</p><p> mov bp,offset hhhh
22、 ;bp<-時間信息串首地址</p><p> mov bh,dpage </p><p> mov dh,row</p><p> mov dl,column</p><p> mov bl,color</p><p> mov cx,buff_len</p>
23、<p> mov al,0 ;al<-顯示模式,移動光標</p><p> mov ah,13h ;顯示時鐘</p><p><b> int 10h</b></p><p> mov bh,dpage</p><p> mov d
24、x,cursor</p><p> mov ah,2 ;恢復光標原位置</p><p><b> int 10h</b></p><p> call get_m ;調用讀取系統(tǒng)日期中斷程序</p><p> mov bh,dpage</p>
25、<p> mov ah,3 </p><p><b> int 10h</b></p><p> mov cursor,dx</p><p> mov bp,offset xxxx ;bp<-日期信息串首地址</p><p> mov bh,dpag
26、e</p><p> mov dh,row+1</p><p> mov dl,column1</p><p> mov bl,color</p><p> mov cx,buff_len1</p><p><b> mov al,0</b></p><p>
27、mov ah,13h</p><p><b> int 10h</b></p><p> mov bh,dpage</p><p> mov dx,cursor</p><p><b> mov ah,2</b></p><p><b> int 10h&
28、lt;/b></p><p> pop es ;恢復現(xiàn)場</p><p><b> pop ds</b></p><p><b> popa </b></p><p> iret ;中斷返回</p>&l
29、t;p> get_t proc ;取當前系統(tǒng)時間過程</p><p> mov ah,2 ;取時間信息</p><p><b> int 1ah</b></p><p> mov al,ch ;al<-ch中的小時數(shù)</p><p
30、> call ttasc ;調用轉換壓縮BCD碼為ASCLL碼子程序</p><p> xchg ah,al ;高低位ASCLL碼互換</p><p> mov word ptr hhhh,ax ;保存小時數(shù)</p><p> mov al,cl ;al<-cl中的分鐘數(shù)</p&
31、gt;<p> call ttasc</p><p> xchg ah,al</p><p> mov word ptr mmmm,ax ;保存分鐘數(shù)</p><p> mov al,dh ;al<-dh中的秒數(shù)</p><p> call ttasc </p>
32、<p> xchg ah,al</p><p> mov word ptr ssss,ax ;保存秒數(shù)</p><p><b> ret</b></p><p> get_t endp</p><p> get_m proc ;取當前系統(tǒng)日期過程</p&g
33、t;<p> pusha ;保護現(xiàn)場</p><p> mov ah,2ah ;取系統(tǒng)日期</p><p><b> int 21h </b></p><p><b> mov ax,cx</b></p><p> m
34、ov cl,10d</p><p><b> div cl</b></p><p><b> mov bh,ah</b></p><p><b> xor ah,ah</b></p><p><b> div cl</b></p>&
35、lt;p><b> mov bl,ah</b></p><p> add bx,3030h</p><p> mov word ptr yyyy,bx ;保存年的低兩位數(shù)</p><p><b> xor ah,ah</b></p><p><b> div cl&l
36、t;/b></p><p><b> mov bh,ah</b></p><p><b> xor ah,ah</b></p><p><b> div cl</b></p><p><b> mov bl,ah</b></p>
37、<p> add bx,3030h</p><p> mov word ptr xxxx,bx ;保存年的高兩位數(shù)</p><p><b> xor ax,ax</b></p><p><b> xor bx,bx</b></p><p><b> mov a
38、l,dh</b></p><p><b> cbw</b></p><p> call charge</p><p> mov word ptr zzzz,ax ;保存月數(shù)</p><p><b> xor ax,ax</b></p><p><
39、b> mov al,dl</b></p><p><b> cbw</b></p><p> call charge</p><p> mov word ptr rrrr,ax ;保存日數(shù)</p><p><b> popa</b></p><p&
40、gt;<b> ret</b></p><p> get_m endp </p><p> charge proc ;二進制轉化為十進制過程</p><p><b> push cx</b></p><p><b> push dx<
41、/b></p><p> mov cl,10d</p><p><b> div cl</b></p><p> add al,30h</p><p> add ah,30h ;轉化為十進制</p><p><b> pop dx</b>
42、;</p><p><b> pop cx</b></p><p><b> ret </b></p><p> charge endp </p><p> ttasc proc ;壓縮BCD碼為ASCLL碼子程序</p>&l
43、t;p><b> push cx</b></p><p><b> mov ah,al</b></p><p> and al,0fh</p><p><b> mov cl,4</b></p><p> shr ah,cl ;高四
44、位移到低位四位</p><p> add ax,3030h ;轉為ASCLL碼</p><p><b> pop cx</b></p><p><b> ret</b></p><p> ttasc endp</p><p><b>
45、 ??;初始化代碼和變量</b></p><p> old1ch dd ?</p><p><b> start:</b></p><p><b> push cs</b></p><p> pop ds ;填寫DS</p>&l
46、t;p> mov ax,351ch ;取1CH號中斷向量</p><p><b> int 21h</b></p><p> mov word ptr old1ch,bx ;保存向量偏移地址</p><p> mov word ptr old1ch+2,es ;保存向量段地址</p>
47、<p> mov dx,offset new1ch ;dx<-新時鐘中斷入口偏移地址</p><p> mov ax,251ch ;新中斷段地址已在DS中</p><p> int 21h ;設置新的1CH號中斷向量</p><p> mov ah,0
48、 ;等待按鍵</p><p><b> int 16h</b></p><p> lds dx,old1ch</p><p> mov ax,251ch ;恢復原中斷向量</p><p><b> int 21h</b></p><
49、;p> mov ah,4ch</p><p><b> int 21h</b></p><p><b> end start</b></p><p><b> 5.系統(tǒng)測試</b></p><p><b> 1.測試方法</b></p
50、><p> 首先在命令提示符下編譯運行源程序,顯示出時間和日期,然后在</p><p> .asm文件里面修改顯示位置,顯示順序部分程序,調整秒數(shù)顯示的頻率,然后編譯運行,觀察更改過后的運行結果。</p><p><b> 2.測試結果</b></p><p><b> 圖 1</b></
51、p><p><b> 圖2</b></p><p> 圖1為初始程序運行結果</p><p> 圖2表示經過部分修改過后的運行結果</p><p> 運行結果如上圖所示,第二個圖是在第一個圖的源程序上經過改變列號,改變時間和日期的首地址和增加了一個秒的變量,保存了兩個秒數(shù)的變化,使其結果變成圖2</p>
52、<p><b> 6.總結與體會</b></p><p> 通過這次的綜合設計性實驗,讓我更加清楚的了解了8259A在PC機中的工作情況,基本掌握了軟中斷服務程序的結構及編寫方法。同時學習并深刻了結了PC機發(fā)聲的原理和方式,掌握了PC機發(fā)聲程序和延時程序的編寫方法,進一步了結了8255A和8253在PC機中的應用。在本課程設計中,學會了應用接口技術各匯編語言程序設計技術,在P
53、C機上實現(xiàn)時鐘顯示、定時和響鈴,以提高接口、匯編技術的應用能力。</p><p> 在編程方面,通過這次實驗,讓我加深了對DOS和BIOS系統(tǒng)功能指令的理解,把以前沒記住的指令都加深了印象,鞏固了匯編語言編程的基礎知識。</p><p> 在獨立完成實驗過程還有寫困難,本次試驗在同學的幫助下完成了實驗編程,希望以后在這方面有更大的進步;還有部分指令在使用過程中理解有困難,在學習過程多我
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 微機原理與接口技術課程設計
- 微機原理與接口技術課程設計
- 微機原理與接口技術課程設計
- 微機原理與接口技術課程設計.
- 微機原理與接口技術課程設計-鍵盤顯示控制器
- 微機原理與接口技術課程設計報告
- 微機原理與接口技術課程設計---交通燈顯示系統(tǒng)
- 微機原理與接口技術課程設計--交通燈顯示系統(tǒng)
- 微機原理與接口技術課程設計--流水燈
- 《微機原理與接口技術》課程設計
- 微機原理與接口技術課程設計-----交通燈設計
- 微機接口技術課程設計
- 微機接口技術課程設計
- 微機原理與接口技術課程設計-交通燈
- 電子表設計(微機原理與接口技術課程設計)
- 紅外通信-微機原理與接口技術課程設計報告
- 微機原理與接口技術課程設計 --存儲器
- 微機原理與接口技術課程設計報告書
- 微機原理與接口技術課程設計——液晶顯示器與鍵盤系統(tǒng)
- 微機接口技術課程設計--可預置電子時鐘
評論
0/150
提交評論