編寫程式,將 8254 的計數器 0 設定為方式 3,計數值為十進位制數 4,用單次
脈衝 kk1+作為 clk0 時鐘,out0 連線 intr,每當 kk1+按動 5 次後產生中
斷請求,在螢幕上顯示字元「5」。實驗步驟如下:
(1) 實驗接線圖如圖 3-3-3 所示,按圖連線實驗線路圖。
(2) 根據實驗內容,編寫實驗程式,編譯、鏈結。
(3) 執行程式,按動 kk1+產生單次脈衝,觀察實驗現象。
(4) 改變計數值,驗證 8254 的計數功能
intr_ivadd equ 003ch ;intr對應的中斷向量位址
ioy0 equ 0a000h ;片選ioy0對應的埠始位址
my8254_count0 equ ioy0+00h*2 ;8254計數器0埠位址
my8254_count1 equ ioy0+01h*2 ;8254計數器1埠位址
my8254_count2 equ ioy0+02h*2 ;8254計數器2埠位址
my8254_mode equ ioy0+03h*2 ;8254控制暫存器埠位址
stack1 segment stack
dw 256 dup(?)
stack1 ends
data segment
cs_bak dw ? ;儲存intr原中斷處理程式入口段位址的變數
ip_bak dw ? ;儲存intr原中斷處理程式入口偏移位址的變數
im_bak db ? ;儲存intr原中斷遮蔽字的變數
str1 db 'count: $' ;顯示的字串
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
climov ax,0000h ;替換intr的中斷向量
mov es,ax
mov di,intr_ivadd
mov ax,es:[di]
mov ip_bak,ax ;儲存intr原中斷處理程式入口偏移位址
mov ax,offset myisr
mov es:[di],ax ;設定當前中斷處理程式入口偏移位址
add di,2
mov ax,es:[di]
mov cs_bak,ax ;儲存intr原中斷處理程式入口段位址
mov ax,seg myisr
mov es:[di],ax ;設定當前中斷處理程式入口段位址
in al,21h
mov im_bak,al ;儲存intr原中斷遮蔽字
and al,7fh
out 21h,al
stimov dx,offset str1 ;顯示字串
mov ah,9
int 21h
mov dx,my8254_mode ;初始化8254工作方式
mov al,10h ;計數器0,方式0
out dx,al
mov dx,my8254_count0 ;裝入計數初值
mov al,4
out dx,al
wait1: mov ah,1 ;判斷是否有按鍵按下
int 16h
jz wait1 ;無按鍵則跳回繼續等待,有則退出
quit: cli
mov ax,0000h ;恢復intr原中斷向量
mov es,ax
mov di,intr_ivadd
mov ax,ip_bak ;恢復intr原中斷處理程式入口偏移位址
mov es:[di],ax
add di,2
mov ax,cs_bak ;恢復intr原中斷處理程式入口段位址
mov es:[di],ax
mov al,im_bak ;恢復intr原中斷遮蔽暫存器的遮蔽字
out 21h,al
stimov ax,4c00h ;返回到dos
int 21h
myisr proc near ;中斷處理程式myisr
push ax
mov al,35h
mov ah,0eh
int 10h
mov al,20h
int 10h
mov dx,my8254_count0 ;重灌計數初值
mov al,4
out dx,al
over: mov al,20h ;向pc機內部8259傳送中斷結束命令
out 20h,al
pop ax
iret
myisr endp
code ends
end start
計數排序應用
給定乙個陣列,求如果排序之後,相鄰兩數的最大差值,要求時間複雜度o n 且要求不能用非基於比較的排序。隨機生成9個數,範圍在0 99 define length 9 長度 intmaxd int arr 最大差值處理函式 if min max return0 bool empty length 1 ...
可程式設計定時 計數器應用實驗
了解定時器 計數器 8253 的原理,掌握編制定時器 計數器程式設計方法。設計連線和程式,以1mhz的訊號為時鐘訊號,利用 8253 產生1s的定時控制發光二極體變化。使用者時鐘的1mhz輸出接 8253 的clk1。8253 的gate1接 5v 在實驗箱的左上角和右上角 8253out1接 82...
計數器設計實驗
module cnt10 clk,rst,en,load,cout,dout,data input clk,en,rst,load input 3 0 data output 3 0 dout output cout reg 3 0 q1 reg cout assign dout q1 always...