[芯片] 2、接口技术·实验二·定时/计数器8253
?
目錄
一、實驗?zāi)康暮鸵?/span>
二、實驗原理與背景
三、實驗具體的內(nèi)容
? ? ? 3-1、計數(shù)器方式0實驗
? ? ? 3-2、計數(shù)器方式3實驗
? ? ? 3-3、計數(shù)器級聯(lián)實驗
四、實驗的代碼說明
? ? ? 4-1、計數(shù)器方式0實驗代碼及說明
? ? ? 4-2、計數(shù)器方式3實驗代碼及說明
? ? ? 4-3、計數(shù)器級聯(lián)實驗代碼及說明
五、實驗結(jié)果的分析
? ? ? 5-1、計數(shù)方式0實驗分析
? ? ? 5-2、計數(shù)方式3實驗分析
? ? ? 5-3、級聯(lián)方式實驗分析
附錄資料
?
一、實驗?zāi)康暮鸵?/span>
學(xué)會8253芯片和微機接口原理和方法。
掌握8253定時\計數(shù)芯片的基本工作原理、工作方式和編程原理。
?
二、實驗原理與背景
intel8253是NMOS工藝制成的可編程計數(shù)器/定時器,有幾種芯片型號,外形引腳及功能都是兼容的,只是工作的最高計數(shù)速率有所差異,例如8253(2.6MHz),8253-5(5MHz)。下面是它的控制方式字:
?
圖2.1 8253引腳圖?
8253內(nèi)部有三個計數(shù)器,分別稱為計數(shù)器0、計數(shù)器1和計數(shù)器2,他們的機構(gòu)完全相同。每個計數(shù)器的輸入和輸出都決定于設(shè)置在控制寄存器中的控制字,互相之間工作完全獨立。每個計數(shù)器通過三個引腳和外部聯(lián)系,一個為時鐘輸入端CLK,一個為門控信號輸入端GATE,另一個為輸出端OUT。每個計數(shù)器內(nèi)部有一個8位的控制寄存器,還有一個16位的計數(shù)初值寄存器CR、一個計數(shù)執(zhí)行部件CE和一個輸出鎖存器OL。
?
? ?圖2.2 8253控制方式方式字寄存器
| 方式 | 功能 | 輸出波形 | 輸出波形 |
| 0 | 單次計數(shù) | 寫入初值后,OUT端變低,經(jīng)過N+1個CLK后,OUT變高(單次) | 軟件觸發(fā)的單次負脈沖 |
| 1 | 可編程單穩(wěn)態(tài)觸發(fā)器 | 輸出寬度為N個時鐘周期的負脈沖(單次) | 硬件觸發(fā)的單次負脈沖 |
| 2 | 頻率發(fā)生器 | 輸出寬度為1個時鐘周期的負脈沖(重復(fù)波形) | 自動觸發(fā)連續(xù)的脈沖波 |
| 3 | 方波發(fā)生器 | N為偶數(shù)時占空比為1/2;N為奇數(shù)時輸出(N+1)/2個正脈沖,(N-1)/2個負脈沖(重復(fù)波形) | 自動觸發(fā)連續(xù)的方波 |
| 4 | 軟件觸發(fā)選通 | 寫入初值后,經(jīng)過N個時鐘周期,OUT端變低1個時鐘周期(單次) | 軟件觸發(fā)的單次單拍負脈沖 |
| 5 | 硬件觸發(fā)選通 | 門控觸發(fā)后,經(jīng)過N個時鐘周期,OUT端變低1個時鐘周期(單次) | 硬件觸發(fā)的單次單拍負脈沖 |
?
?
?
?
?
?
?
?
?
?
?
?
??
?
這個表總是影響排版,略坑~
?
三、實驗具體的內(nèi)容
3-1、計數(shù)器方式0實驗
將計數(shù)器0設(shè)置為方式0,計數(shù)器初值為N(N≤0FH),用手動開關(guān)逐個輸入單脈沖,編程使計數(shù)值在屏幕上顯示,并同時用邏輯筆觀察OUT0電平變化(當(dāng)輸入N+1個脈沖后OUT0變高電平)。
步驟如下:
1)按圖2.1虛線連接電路。
?
圖3.1? TPC-USB平臺計數(shù)器方式0實驗連線圖
2)根據(jù)流程圖2.2,編程并運行,觀察實驗結(jié)果。
?
圖3.2 ?TPC-USB平臺計數(shù)器方式0實驗流程圖
?
3-2、計數(shù)器方式3實驗
將計數(shù)器0、計數(shù)器1分別設(shè)置為方式3,計數(shù)初值設(shè)為1000,用邏輯筆觀察OUT1輸出電平的變化(頻率1Hz)。
步驟如下:
1)按圖2.3連接電路。
圖3.3? TPC-USB平臺計數(shù)器方式3實驗連線
2)根據(jù)流程圖2.4,編程并運行,觀察實驗結(jié)果。
?
圖3.4? TPC-USB平臺計數(shù)器方式3實驗流程圖
?
3-3、計數(shù)器級聯(lián)實驗
將計數(shù)器0設(shè)置為方式3(方波),計數(shù)器1設(shè)置為方式2(分頻)。實現(xiàn)計數(shù)器0的輸出為方波,計數(shù)器1的輸入是計數(shù)器0輸出。人機交互界面設(shè)計:實現(xiàn)在顯示屏幕上提示輸入計數(shù)器0(方波)的參數(shù)和計數(shù)器1(分頻信號)的參數(shù)。如下所示:
??? Counter0:____
??? Counter1:____
??? continue?(y/n)____
實現(xiàn)用鍵盤直接輸入修改程序中方波的參數(shù)和分頻信號的參數(shù),以改變方波的寬度,分頻信號的周期和分頻數(shù),不需重新修改源代碼。用示波器觀察計數(shù)器0和計數(shù)器1的輸出波形及其關(guān)系,并在紙上畫出CLK0、OUT0、OUT1的波形。
步驟如下:
1)按圖2.5連接電路。
?
圖3.5? TPC-USB平臺計數(shù)器級聯(lián)實驗連線
2)根據(jù)流程圖2.6,編程并運行,觀察實驗結(jié)果。
?
?圖3.6? TPC-USB平臺計數(shù)器級聯(lián)實驗流程圖
編程提示:8253控制寄存器地址?? :283H;計數(shù)器0地址:280H;計數(shù)器1地址:281H;CLK0連接時鐘1MHz。
?
四、實驗的代碼說明
4-1、計數(shù)器方式0實驗代碼及說明
1 CODE SEGMENT ;段定義開始(CODE段) 2 ASSUME CS:CODE ;規(guī)定CODE為代碼段 3 START:MOV AL,10H ;設(shè)置控制字00010000(計數(shù)器0,方式0,寫兩個字節(jié),二進制計數(shù)) 4 MOV DX,283H ;把控制寄存器地址放在DX寄存器中 5 OUT DX,AL ;將AL的值送入DX端口 6 MOV DX,280H ;把計數(shù)器0地址放在DX寄存器中 7 MOV AL,0FH ;將0FH存入AL寄存器 8 OUT DX,AL ;將此時AL的值送入DX端口 9 LP1: IN AL,DX ;從DX端口讀入8位,放在AL寄存器中 10 CALL DISP ;調(diào)用DISP 11 PUSH DX ;將DX內(nèi)容保存到堆棧段 12 MOV AH,06H ;將06H存入AH,為了下句調(diào)用21中斷 13 MOV DL,0FFH ;將0FFH存入DL 14 INT 21H ;調(diào)用21中斷 15 POP DX ;將DX的內(nèi)容推出棧段 16 JZ LP1 ;如果DX的內(nèi)容是0,就跳轉(zhuǎn)到LP1 17 MOV AH,4CH ;將4CH存入AH,為了下句調(diào)用21中斷 18 INT 21H ;調(diào)用21中斷 19 DISP PROC NEAR ;定義一個名為DISP的子程序 20 PUSH DX ;把DX的內(nèi)容保存到堆棧段中 21 AND AL,0FH ;將AL寄存器的內(nèi)容與0FH進行"與"運算,再把結(jié)果存入AL中 22 MOV DL,AL ;將AL的值送入DL寄存器 23 CMP DL,9 ;比較DL中的值與9的大小 24 JLE NUM ;如果DL的值小于或等于9時,則跳轉(zhuǎn)到NUM 25 ADD DL,7 ;將DL的值與7進行相加后,再送入DL中 26 NUM: ADD DL,30H ;將DL的值與30H進行相加后,再送入DL中 27 MOV AH,02H ;將02H存入AH 28 INT 21H ;調(diào)用DOS21中斷 29 MOV DL,0DH ;結(jié)合"MOV AH,02H"就是說輸出0DH 30 INT 21H ;調(diào)用中斷指令 31 MOV DL,0AH ;結(jié)合"MOV AH,02H"就是說輸出0AH 32 INT 21H ;調(diào)用DOS21中斷 33 34 POP DX ;將DX的內(nèi)容推出棧段 35 RET ;子程序在功能完成后返回調(diào)用程序繼續(xù)執(zhí)行 36 DISP ENDP ;子程序結(jié)束 37 CODE ENDS ;代碼段結(jié)束 38 END START ;程序結(jié)束?4-2、計數(shù)器方式3實驗代碼及說明
1 CODE SEGMENT ;段定義開始(CODE段) 2 ASSUME CS:CODE ;規(guī)定CODE為代碼段 3 START:MOV DX,283H ;把控制寄存器地址放在DX寄存器中 4 MOV AL,36H ;設(shè)置控制字00110110(計數(shù)器0,方式3,寫兩個字節(jié),二進制計數(shù)) 5 OUT DX,AL ;將AL的值送入DX端口 6 MOV AX,1000H ;該語句是立即尋址方式,就是把1000H這個數(shù)賦給AX 7 MOV DX,280H ;把計數(shù)器0地址放在DX寄存器中 8 OUT DX,AL ;將AL的值送入DX端口 9 MOV AL,AH ;將AX的高8位存入AL寄存器中 10 OUT DX,AL ;將此時AL的值送入DX端口 11 MOV DX,283H ;把端口地址放在DX寄存器中 12 MOV AL,76H ;設(shè)置控制字01110110(計數(shù)器1,方式3,寫兩個字節(jié),二進制計數(shù)) 13 OUT DX,AL ;將AL的值送入DX端口 14 MOV AX,1000H ;把1000H賦給AX 15 MOV DX,281H ;把端口地址放在DX寄存器中 16 OUT DX,AL ;將AX的低8位送入DX端口 17 MOV AL,AH ;將AX的高8位存入AL寄存器中 18 OUT DX,AL ;將AL的值送入DX端口 19 MOV AH,4CH ;將4CH存入AH 20 INT 21H ;調(diào)用DOS21中斷 21 CODE ENDS ;代碼段結(jié)束 22 END START ;程序結(jié)束?4-3、計數(shù)器級聯(lián)實驗代碼及說明
?
1 data segment 2 mesg1 db 13,10,'Counter0:','$' 3 mesg2 db 13,10,'Counter1:','$' 4 mesg3 db 13,10,'Continue?(Y/N)','$' 5 mesg4 db 13,10,13,10,'Thank You!',13,10,'$' 6 errorm db 13,10,'Input Error!','$' 7 Counter0 dw 0 8 Counter1 dw 0 9 data ends 10 code segment 11 assume cs:code,ds:data 12 main proc far 13 start: 14 mov dx,data 15 mov ds,dx 16 do: sub bx,bx 17 sub ax,ax 18 mov Counter0,0 19 mov Counter1,0 ;init 20 l1: 21 mov dx,offset mesg1 22 mov ah,09h 23 int 21h 24 rd1 : ;read Counter0 25 mov al,0 ;判斷有無輸入 26 mov ah,01 ;read a char 27 int 21h 28 cmp al,0 29 jz rd1 30 cmp al,13 ;if enter 31 je fdone1 32 jmp tdone1 33 fdone1: jmp done1 34 tdone1: cmp al,10 35 je fdone1 36 cmp al,'0' ;if input<0 or input>9 error 37 jb error 38 cmp al,'9' 39 ja error 40 push ax 41 mov ax,10 42 mul Counter0 43 mov Counter0,ax ;Counter0=counter*10 44 pop ax 45 sub bx,bx 46 mov bl,al 47 sub bl,30h 48 add Counter0,bx ;counter=counter+input 49 jmp rd1 50 error: 51 mov dx,offset errorm 52 mov ah,09h 53 int 21h 54 mov dl,7 55 mov ah,2 56 int 21h 57 jmp done3 58 tr: ;for jmp do 59 mov dl,al 60 mov ah,02h 61 int 21h 62 mov dl,10 63 int 21h 64 mov dl,13 65 int 21h 66 jmp do 67 l2: 68 mov dx,offset mesg2 69 mov ah,09h 70 int 21h 71 rd2: 72 mov al,0 ;判斷有無輸入 73 mov ah,01 ;read Counter1 74 int 21h 75 cmp al,0 76 jz rd2 77 cmp al,13 ;if enter 78 je fdone2 79 cmp al,10 80 je fdone2 81 jmp tdone2 82 fdone2: jmp done2 83 tdone2: 84 cmp al,10 85 je fdone2 86 cmp al,'0' 87 jb error 88 cmp al,'9' 89 ja error 90 push ax 91 mov ax,10 92 mul Counter1 93 mov Counter1,ax ;Counter1=Counter1*10 94 pop ax 95 sub bx,bx 96 mov bl,al 97 sub bl,30h ;bh=0 98 add Counter1,bx ;Counter1=Counter1+input 99 jmp rd2 100 done1: 101 jmp l2 102 done2: 103 jmp out8253 ;after enter two counters 104 ; set 8253 and do it 105 done3: 106 mov dx,offset mesg3 107 mov ah,09h 108 int 21h 109 l3: mov ah,07h 110 int 21h 111 cmp al,'Y' 112 je tr 113 cmp al,'y' 114 je tr 115 cmp al,'N' 116 je quit 117 cmp al,'n' 118 je quit 119 mov dl,7 120 mov ah,02h 121 int 21h 122 jmp l3 123 out8253: ;work code 124 mov al,00110110b 125 mov dx,283h 126 out dx,al 127 mov ax, Counter0 128 mov dx,280h 129 out dx,al 130 mov al,ah 131 out dx,al 132 mov al,01110110b 133 mov dx,283h 134 out dx,al 135 mov ax,Counter1 136 mov dx,281h 137 out dx,al 138 mov al,ah 139 out dx,al 140 mov cx,2801 141 delay: loop delay 142 jmp done3 143 quit: ;return to DOS 144 mov dx,offset mesg4 145 mov ah,9 146 int 21h 147 mov ax,4c00h 148 int 21h 149 main endp 150 code ends 151 end start?
五、實驗結(jié)果的分析
5-1、計數(shù)方式0實驗分析
我們將計數(shù)器0設(shè)置為方式0,計數(shù)器初值為N=15,用R-S單脈沖觸發(fā)器手動逐個輸入單脈沖,編程使計數(shù)值在屏幕上顯示,并同使用邏輯筆觀察OUT0的電平變化(當(dāng)輸入16個脈沖后OUT0變低電平),電腦的console窗口中逐漸減1輸出,最后為0。
5-2、計數(shù)方式3實驗分析
將計數(shù)器0、計數(shù)器1分別設(shè)置為方式3,計數(shù)初值設(shè)為1000,用邏輯筆觀察OUT1輸出電平的變化為1Hz。
5-3、級聯(lián)方式實驗分析
其實就是在實驗計數(shù)方式3的基礎(chǔ)上將計數(shù)初值設(shè)計成可以自己設(shè)置的情況。當(dāng)Counter0= Countet1=1000時和上一個實驗一樣。
?
附錄資料
?
本文鏈接:?http://www.cnblogs.com/zjutlitao/p/4172325.html
更多精彩:http://www.cnblogs.com/zjutlitao/p/4125085.html?
文檔下載:http://pan.baidu.com/s/1i3rFx57
?
?
???????????????????????????????????
轉(zhuǎn)載于:https://www.cnblogs.com/zjutlitao/p/4172325.html
總結(jié)
以上是生活随笔為你收集整理的[芯片] 2、接口技术·实验二·定时/计数器8253的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android无线测试之—UiAutom
- 下一篇: OGNL表达式语言