PIC微控制器之定時器(TMR1)

2021-06-14 15:28:04 字數 2631 閱讀 5471

之前我們講解了tmr0定時器,現在我們來講解16位定時器tmr1,tmr1和tmr0最大的差別就是tmr1是16位定時器。所以tmr1兩個八位暫存器 tmrh 和trmrl組成.許多有關定時器的基礎知識我就不在贅述了可以看tmr0的文章。我單刀直入講例項了。

例項講解:如果我們想隔0.5s輸出個高電平,0.5s輸出個低電平那要怎麼做呢?

首先:先選擇合適的時鐘頻率和預分頻。這個只要滿足需要的延時時間就行了。這裡我們選擇時鐘為4mhz,預分頻為1:8;

然後:設定tmr1定時器的初始值,初始值的作用即是設定tmr1的溢位時間,(設定溢位時間的原因是)

比如在初始值為0的情況下,定時器需要經過524288us的時間才溢位,

如果初始值為3036,定時器就在這個值的基礎上一直加上去,需要的時間為0.5s才溢位。

這個的時間是怎麼計算出來的呢,最長的定時時間-需要定時的時間=初始值的時間。524288us-500000us=24288us.

程式如下: tmr1h=0x0b;

tmr1l=0xdc;

指令週期x預分頻比=預分頻器溢位的週期  1usx8=8us

時鐘週期x4=指令週期  0.25usx4=1us.詳見上圖。

這只是我個人理解方式有興趣的朋友可以看看:

我們可以將分頻器,暫存器,還有溢位中斷標誌這幾個名詞完全不一樣的東西理解成同乙個22位暫存器。

下面是乙個由4分頻,8分頻tmr1l,tmr1h,tmr1if組成的乙個22位暫存器。定時就是該暫存器對時鐘週期的計數。

該**的值是tmr1h剛溢位tmr1if為1時的數值。二進位制數10000,0000,0000,0000,0000,0代表的十進位制為2097152,2097152×0.25us=524288us

初始化設定 t1con:timer1控制暫存器

我重點要設定就是設定預分頻比,和開啟tmr1其他預設為0就行了。t1ckps<1:0>設定為11,tmr1on設定為1,。

所以設定 t1con = 0x31; //enable timer1 ,1:8

例項程式:

#include

__config(fosc_intosc&wdte_off&pwrte_on&mclre_off&cp_on&cpd_off&boren_on

&fcmen_on&ieso_on&clkouten_off);

__config(pllen_on&lvp_off);

#define tmr1h_value  0x0b

#define tmr1l_value  0xdc

#define true 1

#define false 0

#define led lata5

unsigned int timer1_counter;

void init_timer1()

void init_time1_count() //設定以0.5s為單位的延時初始化設定

tmr1h= tmr1h_value;

tmr1l= tmr1l_value;

tmr1if = 0;

timer1_counter=0;

/*以0.5s為單位 limit  的數代表延時幾個單位。

比如limit=3那麼就是延時1.5s。時間到了函式返回 true ,時間沒到返回 false

unsigned char time1_count(unsigned int limit)

if(timer1_counter >= limit)

else

}void init_fosc(void)

osccon = 0x68;//4mhz

void init_gpio(void)

porta =0;

lata =0;

ansela =0;

trisabits.trisa5=0;//ra5設定成輸出 用來控制led

void main(void)

init_fosc();

init_gpio();

init_timer1();

while(1)

led = 1;//led燈亮

init_time1_count()//初始化定時初始值

while(time1_count(1)==false)//延時0.5s

/*這裡面可以寫一些定時期間需要執行的程式*/

led = 0;//led燈滅

init_time1_count()//初始化定時初始值

while(time1_count(1)==false)

pic16f877微控制器TMR1的使用筆記

一 結構 1 tmr1可以作為通用的定時器和計數器,也可以利用內建的低頻時基振盪器實現實時時鐘rtc功能 通過tmr1與ccp模組的配合使用,tmr1還可以實現輸入捕捉和輸出比較功能。tmr1是乙個16位的可讀可寫的計數暫存器,由高低兩位元組組成 tmr1h和tmr1l 16位暫存器從0000h到f...

51微控制器 定時器

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

51微控制器 定時器

標準的51微控制器內部有t0和t1兩個定時器。定時器的計數值儲存在暫存器中。th0 tl0用於t0,th1 tl1用於t1.定時器儲存暫存器 名稱描述 sfr位址 復位值th0 t0高位元組 0x8c 0x00 tl0t0低位元組 0x8a 0x00 th1t1高位元組 0x8d 0x00 tl1t...