可程式設計定時 記時器8253工作方式驗證實驗

2021-04-07 06:39:14 字數 3989 閱讀 4191

**民族大學      03

電子班楊忠學 l

實驗目的:

進一步熟悉

tpc_h

實驗系統是使用,學習運用位址解碼技術和基本介面電路,掌握

8253

的基本工作原理和程式設計方法。

l實驗要求:1.在

tpc_h

實驗系統環境下,設計實現對可程式設計定時

/計時器

8253

的確定解碼,即接到

8253cs

端的訊號是唯一有效的,只能支援四個埠位址。 2.

通過相應的電路連線及初始化程式設計,驗證

8253

的六種工作方式,觀察其輸出現象。(

8253

的位址線、資料線和控制線已與系統連線好,連線電路時,只需考慮cs、

clk、

gate

、out

訊號的連線。)

l實驗內容:

1.硬體電路方案

硬體電路說明:用定時

/計時器

1做分頻器(工作方式2,

3都可以)。對於方式1,

4,其

gate

訊號是脈衝訊號,其他方式的

gate

訊號是高電平,因此定時/

計時器0

,通過開關選擇不同的

gate

訊號。out

訊號:用示波器觀測方式2,

3的輸出波形,用查詢方式查詢其他方式的輸出跳變。 1.

軟體流程以及相關程式

在軟體的設計過程中,考慮軟體執行程式後,能自主選擇當前工作的記時器,又能修改記時器的計數值和工作模式。

我設計了一種在文字模式下定時控制系統:通過控制上下方向鍵設定工作模式,按回車鍵確認;數字鍵0、

1、

2(其它數字鍵無效)設定當前的計時器;按

esc鍵可以退出程式;

f1鍵檢視程式的幫助檔案,其他鍵開始設定頻率,

enter

鍵確認輸入。該系統的預設定時器為

t0,工作方式

mode=0,

頻率frq=1000,t0

的初值通過

value=119800/frq

算得。

程式執行後的介面如下:

選擇0,1

,4,5

工作方式,在計數值為

0,輸出發生跳變後,程式會給予相應的提示(或是重灌計數初值(0,

5)或是給予

gate

觸發訊號(1,

4))。

程式的流程:

1.initial system;

2.get 8253 io port;

3.print menu;

4.get key;

5.switch(key)

6. goto 3 l

實驗結果:

程式經過多次修改除錯之後,執行良好,實驗現象比較明顯。

其中,方式

2和方式

3最容易,只需要選擇好工作方式,輸出波形都很穩定。

clk時鐘訊號和輸出的

out訊號正確顯示。 方式

0和方式

1時,可以看到

out輸出的是乙個穩定的方波,每乙個上公升沿說明計數器工作結束一次。方波的占空比很大,輸入的計數值變高,占空比就降低,方式

1時變化比較明顯。方式

0不需要觸發訊號,

gate

輸入訊號可以暫停計數。而方式

1必須由

gate

輸入訊號觸發才能開始計數,計數中有

gate

輸入訊號則重新計數而不是暫停計數。 方式

4和方式

5時,得到的波形是連續的負脈衝。兩種方式都是只計數一次就停,且計數過程重新給計數值不影響當前計數,計數時

gate

上公升沿到來則計數器重新裝入計數值,重新計數。計數結束後,方式

4要重新給計數值才能再次計數,而方式5只要

gate

又給觸發訊號就能再次工作。 l

實驗小結:

在電路的設計中,因為實驗箱上提供的脈衝頻率太高,不利於觀察定時器的輸出波形,因此選用

8253

的定時器

1作為分頻器,其輸出作為脈衝時鐘供定時器

0選用。

這一次實驗感覺比前兩次要好做,首先是電路的連線比較簡單,不像前兩次那樣要接好多的線。考慮到

8253有3

個計數器,當其中乙個不能用時,可以用另乙個代替,程式設計中允許選擇計數器,所以在電路的連線上,可以用的兩個計數器都連線好了。除了方式

2和方式

3外都用了查詢方式。因此用上了

74ls244。

計數器的

6種工作方式驗證都做完了,從中更深刻地認識

8253

定時計數器的結構和計數原理。對於這

6種不同的工作方式,可以滿足各種軟體和硬體定時計數的要求。

附錄:定時控制系統源**:

#include

#include

#include

#include

#include

unsigned char curr_timer=0;    /*current working timer*/

unsigned int curr_frq=100;

unsigned int io_address=0x280;

#define controlwd(i) (curr_timer<<6)|0x30|(i<<1)  /*cal the control word*/

unioncount;

void inittimer(int i)

unsigned char selecmenu(void);

/*the function is the special working mode*/

void spec_mode(int i)

/* d0 is connect with out of timerx    */

while(!kbhit())

}void main()

count.b=119318.0/curr_frq; /*cal the initvalue*/

switch(mode)

/*end switch*/

}  /*if the expection is false,the quit the while*/

}void getfrq() /*modifier frequency*/

if(frq>6553)

break;

}curr_frq=(frq>0)?frq%65536:curr_frq;

gotoxy(60,16);

cprintf("%uhz",curr_frq);

}void help()

unsigned char selecmenu();

clrscr();

for(i=0;i<8;i++)

gotoxy(1,21);

printf("press f1 get help/n");

printf("thank you for using timer system/n");

printf("programme desigend:y.z.x/n");

printf("2006.5/n");

gotoxy(24,14);

cprintf("the current timer is timer%d !",curr_timer); /*40*/

while(flag)

case 27: exit(1);

case 59: help();flag=0;break;

default: getfrq();break;

}gotoxy(20,5+curr_index);

cprintf("      ");

gotoxy(20,5+index);

cprintf("---->");

gotoxy(60,16);

}return index;}

微機介面 可程式設計定時 計數器8253

資料匯流排d0 d7 rd 和wd 分別是讀寫控制引腳 cs 是片選訊號 a1,a0是片內位址選擇引腳。8253的三個計數通道在結構上和功能上完全一樣,每個通道均有兩個輸入引腳clk和gate,乙個輸出訊號引腳out 計數初值暫存器用來寄存計數初值 計數工作單元為16位減1計數器,它的初值是計數初值...

微機介面 可程式設計定時 計數器8253

資料匯流排d0 d7 rd 和wd 分別是讀寫控制引腳 cs 是片選訊號 a1,a0是片內位址選擇引腳。8253的三個計數通道在結構上和功能上完全一樣,每個通道均有兩個輸入引腳clk和gate,乙個輸出訊號引腳out 計數初值暫存器用來寄存計數初值 計數工作單元為16位減1計數器,它的初值是計數初值...

可程式設計定時 計數器應用實驗

了解定時器 計數器 8253 的原理,掌握編制定時器 計數器程式設計方法。設計連線和程式,以1mhz的訊號為時鐘訊號,利用 8253 產生1s的定時控制發光二極體變化。使用者時鐘的1mhz輸出接 8253 的clk1。8253 的gate1接 5v 在實驗箱的左上角和右上角 8253out1接 82...