中斷和定時器實驗

2021-04-29 06:00:49 字數 1717 閱讀 7310

實驗五

中斷和定時器實驗

姓名:鄭旅軍學號:

0656061

指導老師:鄒慧蘭成績:

如有疑問,請[email protected] **

題目:通過外部中斷0,觸發乙個延時過程,假定延時時間為1秒,延時期間可以點亮乙個led或讓蜂鳴器發出聲音。已知微控制器晶振頻率為6 .00mhz。

可以使用定時器中斷,也可以不使用定時器中斷。如果使用定時器中斷,則把中斷重新啟動工作放在外部中斷服務程式中,一旦定時器從新啟動,延時固定的時間。程式的寫法可以參考上次上機的題目,但是必須使用c語言。本程式必須包含兩個中斷子程式,乙個是外部中斷0,乙個是定時器中斷。在外部中斷0子程式中設定定時器使之工作,完成延時,時間達到後再禁止定時器中斷,這個工作應該在定時器中斷子程式本身中完成。

上面的方法可以完成乙個「重複觸發問題」,即定時時間沒有到的時候又來乙個觸發訊號,應該怎麼辦?

程式流程圖:

硬體電路:

首先確定各種中斷的中斷號

,其值從

0 開始,編號從

0~4,分別對應外中斷

0、定時器

0中斷、外中斷

1、定時器

1 中斷和序列口中斷。

源程式如下:

/*

主函式設定定時器0的工作模式,外中斷的觸發模式(本實驗使用的是脈衝觸

發),允許總中斷和外中斷*/

/*外部中斷服務程式的工作是:禁止外中斷,啟動定時器0,允許定時

器0中斷,led取反*/

/*定時器中斷服務程式的工作是:過載th0和tl0的初值,延遲1s後,關閉定

時器0,禁止定時器0中斷,允許外部中斷,改變led狀態*/

#include

#define uint unsigned int

uint num=8;

void inter0(void) interrupt 0 using 1

void time0(void) interrupt 1 using 2

}void main()

實驗結果:

預期結果:程式執行後,led燈是滅的。當有外部脈衝進入p3.2口時,led燈進入亮狀態。持續1s後,led燈變滅,等待下乙個外部脈衝。在led燈亮的期間,再次給p3.2口送入一脈衝,led燈依舊亮,說明程式沒有響應外中斷,因為如果響應外中斷0服務程式,led應該進入滅狀態。

實際結果:給一次脈衝,燈亮,經歷

1s後燈滅;但在這一秒內持續給脈衝,燈就一直亮著,最後乙個脈衝給過後,燈亮一秒後再滅去。這不符合預期的試驗結果,從程式上來看是沒有問題的,因為在進入外中斷函式後,外中斷已經被關閉了,外部中斷訊號不可能進來的。原因可能出在內部電路上,也就是

1s內有脈衝輸入時,中斷資訊被存在鎖存器裡,但由於此時外中斷被關,沒有送進

cpu,所以沒有響應,但這我們沒有現象覺察到;一旦定時程式跳出,外中斷被開啟,中斷請求資料被送入,

cpu響應,於是又開始新的一輪中斷

+定時服務,這個過程很短暫,人眼很難從

led的變化中覺察到。

定時器中斷實驗

常用庫函式 定時器引數初始化 void tim timebaseinit tim typedef timx,tim timebaseinittypedef tim timebaseinitstruct typedef struct tim timebaseinittypedef 定時器使能函式 vo...

定時器中斷實驗

今天看了並實際做了一次正點原子的定時器中斷實驗,實驗結果並不重要,這部分教程的意義在於讓我們學會如何去配置乙個定時器中斷。想要使用定時器中斷,我們要進行各種配置,將它們整合到乙個初始化函式裡,在這個函式中我們要做的事主要有 1.定義nvic和定時器初始化的結構體。2.使能定時器時鐘。3.配置nvic...

外部中斷與定時器中斷實驗

已知微控制器晶振頻率為12mhz,自行選取定時 計數器,定時 計數器工作方式自選,編寫程式,使p1.7端輸出週期為0.5ms方波。解題思路 假設方波訊號的占空比為50 已知條件可以得,機器週期為1us,所以決定採用t0定時,工作方式0,已知輸出週期為0.5ms,則每定時0.25ms計數使p1.7輸出...