使用定時器實現小燈閃爍 微控制器 LM3S811

2021-05-25 16:06:20 字數 2186 閱讀 8648

上次我們講了如何使用延時來做小燈閃爍的程式,相信大家都有所了解了,這次我們來看如何使用定時器實現小燈閃爍。

1、不使用中斷的方法

首先我們還是來看標頭檔案,因為這次使用了定時器(timer),所以標頭檔案要包含timer.h。

選擇閃爍的小燈,在此我們選擇pc5小燈,將其使能,作為output。

1、在系統中使能定時器。   函式:sysctlperipheralenable()

2、選擇定時器的使用型別,函式:timerconfigure(),  引數可以寫 timer_cfg_32_bit_per (32位週期)/                                         timer_cfg_16_bit_pair|timer_cfg_a_periodic  (16位timer0a週期)  timer_cfg_a_cap_count(計數模式)等..

(注:lm3s811一共有4個計數器timer0/1/2/3 ,預設使用減計數模式, 每個timer可以作為乙個32位計數器使用,也可以作為兩個16位計數器使用。具體使用方法請看技術文件)

3、給定時器裝載值:使用timerloadset() 函式。

4、使能定時器。

剩下的思路很簡單,讓程式進入乙個死迴圈。使用輪詢檢測定時器是否溢位,如果溢位則改變小燈的亮滅。因為系統的頻率是一定的(在本程式中是6mhz),所以通過改變定時器中裝載的數值就可以控制小燈亮滅的時間。

**如下:

設定timer的裝載值為 sysctlclockget()/2,即為系統時鐘的一半,即0.5秒溢位一次,所以小燈每秒亮滅一次。

2、使用中斷的方法:

中斷是微控制器中很重要的一部分,可以說乙個完成的程式一般都會用到中斷。中斷,顧名思義就是在程式正常執行的時候用來打斷cpu程序的,比如:當我們的程式在死迴圈中執行時,外部收到乙個按鈕的訊號,這時程式就先執行我們的中斷**,接著才會繼續進行迴圈操作。可以提高程式的效率。

更加深刻的了解可以在裡查詢到一些有趣的解釋。

(1) 初步設定

因為使用了中斷,在標頭檔案中我們要加入 #include "inc/hw_ints.h" 和 #include "driverlib/interrupt.h"。(定義了與中斷相關的巨集 和 包含中斷控制器的api)

熟練地設定好主頻、輸出口、定時器之後,為了使用中斷我們要學習以下幾個函式:

timerprescaleset(timer0_base,timer_a,100);  這個函式將timer0a 設為分頻100,即現在為6mhz/100=60000hz

然後用timerloadset()給timer0a裝載30000這個數值,這樣就是每0.5秒造成計數器溢位一次。

timerintenable() 設定定時器的中斷模式,前面乙個引數是選擇定時器,後面是溢位模式,有timer_tima_timeout(溢位) timer_capa_match(匹配)等,我們以後都會使用。

intenable()用來使中斷控制器接受定時器的中斷請求,intmasterenable()用來讓全域性的中斷使能。

然後主程式就可以進入死迴圈,因為我們的小燈會通過中斷來控制。

(2) 寫中斷函式

在程式中斷後,會自動跳轉到我們預先寫好的中斷函式,執行我們的命令。

在此我們寫中斷函式 void timer0atimeoutinthandler(void) ; 在函式裡我們用timerintclear()將中斷清除,防止再次進入中斷,然後控制小燈的值反向。

寫好後要在程式的最前面宣告,並且在startup.s中的相應位置上寫好。首先開啟工程中的startup.s檔案,然後將timer0a前的函式改為我們自定義的函式,如圖:

再在上面進行宣告:

小提示,在這裡面寫的時候,函式只有自己的名字,沒有括號,返回值型別等東西。在寫的時候,不要頂格寫,筆者就因為這個錯誤鬱悶了半天。

下面我們來看看整個程式的**:

在此給大家說乙個小技巧,在設定gpio埠的模式時,另外有乙個函式是 gpiopintypegpiooutput() ,使用此函式能達到上面第乙個**中gpiodirmodeset()加上gpiopadconfigset()的效果,更簡單,如gpiopintypegpiooutput(gpio_portc_base,gpio_pin_4) 就可以直接將pc4設為輸出口,當然如果有高階設定,比如設定上拉電流,還是要使用**中的方法的。

51微控制器定時器控制LED閃爍

定時器控制 led閃爍 500ms 關於定時器0方式1初值的設定 預備知識 首先我們要知道 51微控制器普遍是1個機器週期 12 個時鐘週期 晶振週期 頻率與週期互為倒數關係。示例 假定晶振頻率為12mhz 時鐘週期 1 12 mhz 1 12 s 機器週期 12 x 1 12 s 1 s 定時1m...

微控制器定時器雙擊 微控制器實現60s定時器

2個定時中斷,2個按鈕中斷 include define seg p2 數碼管 斷碼口 define scanp p1 數碼管 com掃瞄口sbit oc p0 0 定義573鎖存器使能口,我是用的573驅動7段數碼管 sbit pb0 p3 2 按鈕0 sbit pb1 p3 3 按鈕1 第乙個定...

51微控制器 定時器

定時 計數器的結構和工作原理 定時 計數器的實質是加1計數器 16位 由高8位和低8位兩個暫存器組成。80c51 微控制器定時 計數器的工作是由兩個特殊功能暫存器控制的。tmod是定時 計數器的工 作方式暫存器,確定工作方式和功能,低四位用於t0,高四位用於t1。t con是控制寄 存器,控制t0和...