計數應用實驗

2021-09-01 12:41:38 字數 2757 閱讀 8687

編寫程式,將 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...