微機(jī)原理與接口技術(shù)課程設(shè)計(jì)--實(shí)時(shí)鐘顯示與定時(shí)控制設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩10頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  《微機(jī)接口技術(shù)課程設(shè)計(jì)》</p><p><b>  設(shè)計(jì)報(bào)告</b></p><p>  題目:實(shí)時(shí)鐘顯示與定時(shí)控制設(shè)計(jì)</p><p>  專業(yè): 電子信息工程 </p><p>  班級(jí): XXXXXXX </p><p>  學(xué)號(hào):

2、 XXXXXXXXX </p><p>  姓名: XXX </p><p>  指導(dǎo)老師: XXX </p><p>  設(shè)計(jì)時(shí)間:2013 年 6 月19日到 2013年 6月 25 號(hào)</p><p><b>  1.設(shè)計(jì)任務(wù)說(shuō)明</b

3、></p><p>  通過(guò)本課程設(shè)計(jì),綜合應(yīng)用接口技術(shù)各匯編語(yǔ)言程序設(shè)計(jì)技術(shù),在PC機(jī)上實(shí)現(xiàn)時(shí)鐘顯示、定時(shí)和響鈴,以提高接口、匯編技術(shù)的應(yīng)用能力。</p><p><b>  2. 總體設(shè)計(jì)</b></p><p> ?。?). 利用BIOS 和DOS 的系統(tǒng)功能調(diào)用,能將計(jì)算機(jī)系統(tǒng)的日期和時(shí)間讀出并顯示出來(lái)。</p>&

4、lt;p>  (2). 用“時(shí):分:秒” (都是兩位)的形式連續(xù)顯示系統(tǒng)時(shí)間。</p><p> ?。?).利用定時(shí)接口芯片每秒鐘響一次鈴。</p><p> ?。?). 提示輸入定時(shí)時(shí)間(即定時(shí)秒數(shù)),每經(jīng)歷指定的秒數(shù),則演奏樂(lè)曲。</p><p><b>  3. 詳細(xì)設(shè)計(jì)</b></p><p><b&

5、gt;  模塊描述:</b></p><p> ?、牛枚〞r(shí)中斷實(shí)現(xiàn)時(shí)鐘顯示。</p><p>  當(dāng)產(chǎn)生定時(shí)中斷時(shí)(由8259A的IRQ0引起),CPU轉(zhuǎn)入BIOS的08H號(hào)中斷處理程序,在該中斷處理程序中是一條軟中斷指令“INT 1CH”,而在該軟中斷程序中只有一條IRET指令,這樣系統(tǒng)每秒鐘產(chǎn)生18.2次定時(shí)中斷,調(diào)用18.2次INT 1CH,這為開(kāi)發(fā)者提供了一個(gè)編寫與

6、時(shí)間有關(guān)的程序的軟中斷接口,上例的定時(shí)響鈴就是借用這個(gè)軟接口實(shí)現(xiàn)的。其具體操作如下:</p><p> ?、僭跁r(shí)鐘顯示程序,截獲1CH號(hào)中斷,在新的1CH中斷處理程序安排一個(gè)計(jì)數(shù)器,記錄調(diào)用的次數(shù),每18次(約一秒鐘)顯示一次當(dāng)前時(shí)間。</p><p>  ②利用BOIS的1AH號(hào)中斷的0號(hào)功能,讀取當(dāng)前計(jì)時(shí)器的數(shù)值:</p><p>  入口參數(shù):AH=02H&l

7、t;/p><p>  執(zhí)行: INT 1AH</p><p>  出口參數(shù):AL=午夜信號(hào),CH=時(shí)的BCD碼,CL=分的BCD碼,DH=秒的BCD碼 </p><p> ?、劾肂IOS的10H號(hào)中斷的13H號(hào)功能,實(shí)現(xiàn)在屏幕的右上角顯示時(shí)間。</p><p> ?、茉谥鞒绦蛑幸4嬖?CH號(hào)中斷的中斷向量,并設(shè)置新的時(shí)鐘顯示中斷程序

8、的中斷向量,然后作其它工作,如調(diào)用BIOS的鍵盤中斷INT 16H的0號(hào)功能,等待用戶按鍵盤,也就是等待中斷的發(fā)生,并在屏幕右上角顯示時(shí)間……,當(dāng)用戶按鍵后,主程序工作完成后,恢復(fù)原1CH中斷向量。</p><p> ?、疲诙〞r(shí)中斷發(fā)生時(shí)同時(shí)調(diào)用發(fā)聲程序?qū)崿F(xiàn)響鈴。</p><p>  發(fā)聲程序用定時(shí)器驅(qū)動(dòng)揚(yáng)聲器方式,這是直接利用8253/8254定時(shí)器產(chǎn)生聲音的一種方法。</p&g

9、t;<p>  定時(shí)器2的GATE2與8255A的端口61H的PB0相連,當(dāng)PB0=1時(shí),GATE2獲得高電平,使定時(shí)器2可以在模式3(方波)下工作。定時(shí)器2的OUT2與端口61H的PB1通過(guò)一個(gè)與門與揚(yáng)聲器的驅(qū)動(dòng)電路相連,如下圖所示。當(dāng)PB1=1時(shí),允許OUT2輸出的頻率信號(hào)到達(dá)揚(yáng)聲器電路。</p><p>  定時(shí)器驅(qū)動(dòng)揚(yáng)聲器方式發(fā)聲原理</p><p>  定時(shí)器2輸出

10、的方波頻率取決與初始化定時(shí)器時(shí)提供的計(jì)數(shù)初值,即對(duì)CLK2端的計(jì)數(shù)脈信號(hào)的分頻系數(shù)。加在CLK2端上的頻率為1193100赫之=12348CH赫之,送入定時(shí)器2的計(jì)數(shù)初值為:12348CH÷發(fā)聲頻率。</p><p><b>  流程圖:</b></p><p><b>  主程序流程圖:</b></p><p>

11、;<b>  中斷程序:</b></p><p><b>  4.程序及說(shuō)明</b></p><p>  count_val=18 ;間隔數(shù)(約為一秒)</p><p>  dpage=0 ;顯示頁(yè)碼數(shù)</p><p> 

12、 row=0 ;顯示行號(hào)</p><p>  column=70-buff_len ;顯示開(kāi)始列號(hào)</p><p>  column1=70-buff_len1 ;顯示日期的開(kāi)始列號(hào)</p><p>  color=07h ;字體顏色<

13、;/p><p><b>  .286</b></p><p>  .model small</p><p>  .code ;為方便程序駐留內(nèi)存,把中斷處理程序放在主程序之前</p><p> ??;下面是1CH中斷處理程序使用的變量</p><p>  count dw count_v

14、al ;“滴答”間隔計(jì)數(shù)器</p><p>  hhhh db ?,?,":" ;小時(shí)的定義</p><p>  mmmm db ?,?,":" ;分的定義</p><p>  ssss db ?,? ;秒的定義</p>&

15、lt;p>  buff_len=$-offset hhhh ;顯示時(shí)間字長(zhǎng)</p><p>  xxxx db ?,? ;年高兩位的定義</p><p>  yyyy db ?,?,"\" ;年低兩位的定義</p><p>  zzzz db ?,?,"\"

16、 ;月定義</p><p>  rrrr db ?,? ;日定義</p><p>  buff_len1=$-offset xxxx ;顯示日期字長(zhǎng)</p><p>  cursor dw ? ;保存當(dāng)前光標(biāo)位置</p><p>  ;1CH號(hào)中斷處理程序代碼

17、</p><p><b>  new1ch:</b></p><p>  cmp cs:count,0 ;是否到顯示時(shí)候</p><p>  jz next ;判斷是否轉(zhuǎn)到next</p><p>  dec cs:count ;否則間隔計(jì)數(shù)器減1</p>&

18、lt;p>  iret ;中斷返回</p><p>  next: ;顯示系統(tǒng)時(shí)間日期子程序</p><p>  mov cs:count,count_val ;間隔計(jì)數(shù)器重置初值18</p><p>  sti ;開(kāi)中斷</p>

19、<p>  pusha ;保護(hù)現(xiàn)場(chǎng)</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 ;調(diào)用讀取系統(tǒng)時(shí)間子程序</p><p>  mov bh,dpage

21、 ;BX<-頁(yè)號(hào)</p><p>  mov ah,3 ;取原光標(biāo)位置</p><p><b>  int 10h</b></p><p>  mov cursor,dx ;保存原光標(biāo)位置</p><p>  mov bp,offset hhhh

22、 ;bp<-時(shí)間信息串首地址</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<-顯示模式,移動(dòng)光標(biāo)</p><p>  mov ah,13h ;顯示時(shí)鐘</p><p><b>  int 10h</b></p><p>  mov bh,dpage</p><p>  mov d

24、x,cursor</p><p>  mov ah,2 ;恢復(fù)光標(biāo)原位置</p><p><b>  int 10h</b></p><p>  call get_m ;調(diào)用讀取系統(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 ;恢復(fù)現(xiàn)場(chǎng)</p><p><b>  pop ds</b></p><p><b>  popa </b></p><p>  iret ;中斷返回</p>&l

29、t;p>  get_t proc ;取當(dāng)前系統(tǒng)時(shí)間過(guò)程</p><p>  mov ah,2 ;取時(shí)間信息</p><p><b>  int 1ah</b></p><p>  mov al,ch ;al<-ch中的小時(shí)數(shù)</p><p

30、>  call ttasc ;調(diào)用轉(zhuǎn)換壓縮BCD碼為ASCLL碼子程序</p><p>  xchg ah,al ;高低位ASCLL碼互換</p><p>  mov word ptr hhhh,ax ;保存小時(shí)數(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 ;取當(dāng)前系統(tǒng)日期過(guò)程</p&g

33、t;<p>  pusha ;保護(hù)現(xiàn)場(chǎng)</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 ;二進(jìn)制轉(zhuǎn)化為十進(jìn)制過(guò)程</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 ;轉(zhuǎn)化為十進(jìn)制</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 ;轉(zhuǎn)為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號(hào)中斷向量</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<-新時(shí)鐘中斷入口偏移地址</p><p>  mov ax,251ch ;新中斷段地址已在DS中</p><p>  int 21h ;設(shè)置新的1CH號(hào)中斷向量</p><p>  mov ah,0

48、 ;等待按鍵</p><p><b>  int 16h</b></p><p>  lds dx,old1ch</p><p>  mov ax,251ch ;恢復(fù)原中斷向量</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)測(cè)試</b></p><p><b>  1.測(cè)試方法</b></p

50、><p>  首先在命令提示符下編譯運(yùn)行源程序,顯示出時(shí)間和日期,然后在</p><p>  .asm文件里面修改顯示位置,顯示順序部分程序,調(diào)整秒數(shù)顯示的頻率,然后編譯運(yùn)行,觀察更改過(guò)后的運(yùn)行結(jié)果。</p><p><b>  2.測(cè)試結(jié)果</b></p><p><b>  圖 1</b></

51、p><p><b>  圖2</b></p><p>  圖1為初始程序運(yùn)行結(jié)果</p><p>  圖2表示經(jīng)過(guò)部分修改過(guò)后的運(yùn)行結(jié)果</p><p>  運(yùn)行結(jié)果如上圖所示,第二個(gè)圖是在第一個(gè)圖的源程序上經(jīng)過(guò)改變列號(hào),改變時(shí)間和日期的首地址和增加了一個(gè)秒的變量,保存了兩個(gè)秒數(shù)的變化,使其結(jié)果變成圖2</p>

52、<p><b>  6.總結(jié)與體會(huì)</b></p><p>  通過(guò)這次的綜合設(shè)計(jì)性實(shí)驗(yàn),讓我更加清楚的了解了8259A在PC機(jī)中的工作情況,基本掌握了軟中斷服務(wù)程序的結(jié)構(gòu)及編寫方法。同時(shí)學(xué)習(xí)并深刻了結(jié)了PC機(jī)發(fā)聲的原理和方式,掌握了PC機(jī)發(fā)聲程序和延時(shí)程序的編寫方法,進(jìn)一步了結(jié)了8255A和8253在PC機(jī)中的應(yīng)用。在本課程設(shè)計(jì)中,學(xué)會(huì)了應(yīng)用接口技術(shù)各匯編語(yǔ)言程序設(shè)計(jì)技術(shù),在P

53、C機(jī)上實(shí)現(xiàn)時(shí)鐘顯示、定時(shí)和響鈴,以提高接口、匯編技術(shù)的應(yīng)用能力。</p><p>  在編程方面,通過(guò)這次實(shí)驗(yàn),讓我加深了對(duì)DOS和BIOS系統(tǒng)功能指令的理解,把以前沒(méi)記住的指令都加深了印象,鞏固了匯編語(yǔ)言編程的基礎(chǔ)知識(shí)。</p><p>  在獨(dú)立完成實(shí)驗(yàn)過(guò)程還有寫困難,本次試驗(yàn)在同學(xué)的幫助下完成了實(shí)驗(yàn)編程,希望以后在這方面有更大的進(jìn)步;還有部分指令在使用過(guò)程中理解有困難,在學(xué)習(xí)過(guò)程多我

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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)論