微機原理與接**術
中斷實驗與程式設計報告
姓名學院資訊與通訊工程學院
專業班級
學號班內序號
目錄一、 實驗目的 2
二、 實驗任務及內容 2
1 設計思路 2
2 流程圖 3
3 源** 4
4 子程式清單 9
三、 實驗結果 10
四、 實驗總結 12
編一程式,在顯示器上顯示時、分、秒。
借用計數器8253的timer0作為中斷源,通過8259a向cpu發中斷,每10ms產生一次中斷。
在中斷服務程式中管理重新整理時、分、秒。
要求: 輸入檔名,(如clk)後,清屏後顯示:
current time is xx:xx:xx(時分秒鍵盤輸入)
打回車,時、分、秒開始計時。時鐘不停的重新整理。
當鍵入ctrl+c時,停止計時,返回系統,且系統正常執行不宕機。
1. 2.
1) 定義資料段和堆疊段。資料段存放中斷次數count100,輸入的時間資訊(8位字元),用於提示的字串資訊。堆疊段存放256個空字元。
2) 巨集名check的定義。判斷輸入的字元是否超出允許輸入的範圍,若超出範圍,報錯後返回程式開始處。
3) 主程式。
初始化暫存器。
清屏。(執行過程見注釋部分)
顯示字串str1。用於說明輸入格式(xx:xx:xx)和輸入後開始計時的方式(按回車鍵開始)
將輸入的8個字元存入資料段。使用dos功能呼叫01h,通過di,把存放在al中的鍵入字元存入以tenhour為開始的資料段,並使用巨集指令check判斷輸入字元是否超過範圍。
鍵入回車,開始計時。使用dos功能呼叫01h,把鍵入的鍵與回車鍵對應碼0dh進行比較。若鍵入其他鍵,報錯,返回程式開始。
將原來08h中斷號設定的入口位址換成本程式中timer的起始位址,保證在發生08h中斷時,程式自動進入timer過程。
為時鐘計時器置初值。43h埠是指8253三通道定時器中的命令暫存器,所使用的命令字36h表示選用0通道定時器,以3號方式(產生方波)計數等。向埠40h送出的計數器初值選用11932是要求8253每秒發出100次時鐘中斷(08h)。
21h埠為中斷遮蔽暫存器,用以開放外部中斷。
顯示「current time is:」;顯示計時,時鐘不停的重新整理。呼叫子程式dispclk,逐個顯示字元,並檢測秒鐘個位second是否有變化,以達到每秒更新一次顯示的效果。
4) 中斷程式timer。
執行100次中斷後,秒數+1;
依次判斷秒鐘、分鐘、小時的個位和十位是否需要改變;
若不需要改變,繼續呼叫中斷。
5) 子程式dispchar,顯示字元
14號bios功能呼叫,顯示al中的字元到游標位置,且游標進一
程式的執行過程大致是:主程式不停地顯示時鐘值,當發生時鐘中斷08h時,轉入timer過程。timer檢視中斷計數是否達到100次,如果沒有達到則返回主程式;如已達到,表明又過了1秒鐘,則對時鐘的值進行修改,然後再返回主程式。
timer中斷程式:
顯示字元的子程式diapchar只有乙個內容,即使用14號bios功能呼叫,不再畫圖。
主程式:
data segment
count100 db 100中斷次數100次
;8位字元,格式**:**:**
tenhour db 0
hour db 0
tenmin db 0
minute db 0
tensec db 0
second db 0
;用於提示的字串
str1 db ' range 00:00:00~23:
59:59, and hit enter to begin ',13,10, ' starting time is:$'
str2 db '("ctrl+c" to exit) current time is:$'
str3 db ' time format error!',13,10, 13,10,'$'
data ends
stack segment stack
db 256 dup(0)
stack ends
code segment
assume ds:data,cs:code,ss:stack
;巨集定義check。形參為輸入字元、可輸入最大值和最小值
check macro x,min,max
local err, mret ;註明在巨集內部使用的標號
push ax
push bx
mov al,x
mov bl,min
mov bh,max
cmp al,bl
jl err ;輸入值小於最小值,報錯
cmp al,bh
jg err輸入值大於最大值,報錯
pop bx
pop ax
jmp mret
err: mov dx,offset str3 ;顯示報錯資訊
mov ah,09h
int 21h
jmp begin
mret: nop
endm
start: mov ax,data
mov ds,ax
mov es,ax
;程式開始後,先清屏
mov ah,6 ;當前頁上滾
mov al,0 ;整個視窗空白
mov ch,0 ;滾動區域的左上角的行
mov cl,0 ;滾動區域的左上角的列
mov dh,42 ;滾動區域的右下角的行
mov dl,79 ;滾動區域的右下角的列
mov bh,7 ;00000111,背景色黑、前景色白,正常的字元顯示狀態
int 10h顯示i/o
;顯示提示文字
begin: mov dx,offset str1
mov ah,09h
int 21h
;輸入開始時間(格式8個字元),存入資料段
;先錄入小時:
;第1位字元(小時的十位,0~2)
mov di,offset tenhour ;從目的運算元的第一位tenhour開始
mov ah,01h
int 21hdos功能呼叫,鍵入字元
mov bl,albl 備份字元
check al,'0','2'
mov [di],al
;第1位字元是0/1時,第2位字元(小時個位,0~9)
inc di指向下一字元
mov ah,01h
int 21h
cmp bl,'2若鍵入「2」,轉移
jz tenhour2
check al,'0','9'
mov [di],al
jmp nextchar
;第1位字元是2時,第2位字元(小時個位,要求是0~3)
tenhour2: check al,'0','3'
mov [di],al
;再錄入分鐘、秒鐘:
mov bp,0
;第3位字元(:);第6位字元(:)
nextchar: inc di
mov ah,01h
int 21h
check al,':',':'
;第4位字元(分鐘十位,0~5);第7位字元(秒鐘十位,要求是0~5)
inc di
mov ah,01h
int 21h
check al,'0','5'
mov [di],al
;第5位字元(分鐘個位,0~9);第8位字元(秒鐘個位,0~9)
inc di
mov ah,01h
int 21h
check al,'0','9'
mov [di],al
;錄入第3/4/5位字元後,繼續錄入第6/7/8位字元
inc bp
cmp bp,1
je nextchar
;鍵入回車,開始計時
cab: mov ah,01h
int 21h
cmp al, 0dh
jz huanh
mov dx,offset str3 ;鍵入的不是回車,顯示報錯資訊,回到開始
mov ah,09h
int 21h
jmp begin
huanh: mov ah,02h ;回車換行
mov dl,13
int 21h
mov dl,10
int 21h
;將原來08h中斷號設定的入口位址換成本程式中timer的起始位址
cli中斷標誌置零,禁止可遮蔽中斷
mov ax,0
mov es,axdi對應的段位址暫存器es
mov di,20h相應中斷向量的位址4*8=32=20h
mov ax,offset timer ;ax存入timer程式的段內偏移量
stosw字串填充,把ax中的內容存入位址20h
mov ax,cstimer程式的**段位址
stosw
;為時鐘計時器置初值
mov al,36h ;36h表示選用0通道定時器,以3號方式(產生方波)計數等
out 43h,al ;輸出到43h埠(8253三通道定時器中的命令暫存器)
mov bx,11932 ;bx存入計數器初值11932(方波頻率100hz,週期10毫秒)
要求8253每秒發出100次時鐘中斷(08h)
mov al,bl ;將bx送入40h埠
out 40h,al ;低四位
mov al,bh
out 40h,al ;高四位
mov al,0fch ;恢復為允許中斷
out 21h,al
北郵微機原理軟體實驗報告
實驗一1.實驗要求 編一程式,將位址偏移量為100h單元開始的256個單元分別寫入00h,01h,ffh資料 統計寫入的資料塊的0元素 正元素 負元素的個數,並分別將統計結果送入上述資料塊後的三個單元中 用dos功能呼叫顯示上面資料快各單元 包括統計結果 內容,要求每行顯示16個資料,兩個資料之間用...
2019 微機實驗報告第二次 實用
微機實驗報告 1 可程式設計定時器 計數器8254 實驗 1.1 實驗目的 了解計數器的硬體連線方法及時序關係,掌握8254 的各種模式的程式設計及其原理,用示波器觀察各訊號之間的時序關係。1.2 實驗原理圖 可程式設計定時器 計數器8254 原理圖 1.3 實驗內容及說明 將32hz 的晶振頻率作...
北郵遠端辦公軟體應用第二次作業
一 單項選擇題 共10道小題,共100.0分 1.使用powerpoint中的 功能,可以設定每張幻燈片的 時間。a.幻燈片切換方式b.幻燈片動畫設定c.排練計時d.幻燈片母板 知識點 第三單元 標準答案 c 試題分值 10.0 學生答案 c 得分 提示 10 2.要中斷幻燈片的放映過程可以直接按 ...