微控制器學習心得三

2021-03-04 04:24:41 字數 2321 閱讀 4736

51微控制器的那些事兒(三)

接下來我們分享一下定時/計數器的應用。其實微控制器中,定時/計數器是個很常用而且很方便的時間方面的工具。學好定時器是很重要的。

很多例項,諸如萬年曆,測速儀器,波特率發生器,方波發生器,脈衝發生器,pwm脈寬調變都要基於微控制器的定時/計數器來應用。

總結起來,微控制器的定時器t0,t1的應用主要依靠這幾個引數:tmod,th0,tl0,th1,tl1,tr0,tr1。同時設計中斷的話,還有ea,et0,et1,當定時器時間到了,會將tf0或者tf1由0變成1.

tmod的引數意義在第一節講述過,這裡複習一下。

具體的意義請大家參照教科書或者相關資料,這裡不再贅述。

以上tmod設定,如果用到t1就設定tmod高四位就可以,第四位設定成0000就可以。同理,t0只需要設定第四位,高四位設定成0000.

然後就是計數的初值,組合語言中,如果預設12分頻的情況下,12m晶振對應的機器週期是1微秒。也就是說,微控制器定時器每計乙個數,就需要1微秒。

也就是說,如果計數計了1000次就是1毫秒。t1定時器會從設定的th1,tl1開始計數,直到設定的方式所能容納的最大值。

例如,我們選擇的方式1,為16定時器,那麼它能從th1,tl1中的值一直計到0ffffh,如果我們設定th1為67h,tl1是66h,那麼t1在方式一狀態下將會從6766h一直計到0ffffh,然後立即將tf1標誌位從0變成1,表示它的定時功能完成,時間已到。我們就利用需要的時間差,來計算到底要從幾開始計數。即計算th1/0.

tl1/0的初值。

這裡,由於t2應用並不多,我們不做了解。

初值如何計算呢,要知道機器週期是多少,還有需要計數多久,還有工作在方式幾。

例如,我們應用t1工作在方式一,16位計數器,機器是12分頻,12m晶振,即機器週期為一微秒,我們需要定時為1毫秒,則需要計數1000次。則初值=0ffffh+1-1000,結果化為4位十六進製制,如果不夠四位則高位補零,前兩位是th1,後兩位是tl1。

確定好初值之後,我們就可以針對需要做的事情進行過程分析。就是當tf1/0從0變成1的時候,我們要做什麼。假如是生成方波,那麼就把方波的訊號電平取反,假如是產生脈衝,就把訊號輸出的電平由低變成高,延遲一段再變成低電平。

組合語言中,定時器呼叫的大致格式為:

*** 0000h

ajmp main

*** 0080h

main: 初始化**

mov tmod ,#10h t1工作於方式1,為定時器 mov th1 , #初值高8位

mov tl1,#初值低8位

setb tr1 開始計數

loop1:jnb tf1 , loop 等待時間到

clr tf1

clr tr1

這裡輸入時間到了以後要做的處理過程**

mov th1 , #初值高8位

mov tl1,#初值低8位

setb tr1 開始計數

ajmp loop1 再次進行等待時間到進行處理

c語言中呼叫方式只有應用中斷。

#include<89x51.h>

#include

void main()

void time1_int() interrupt 3

至於中斷:51系列有6個中斷源,分別是外部中斷0/1.定時器中斷0/1/2,序列口中斷。

使用中斷首先要開總中斷,即,setb ea,然後再設定用哪個中斷,假如用外部中斷0,還需要開外部中斷0,即setb ex0 然後,根據中斷向量,在向量處跳轉到中斷處理程式。

例如,外部中斷0的入口位址是0003h,那麼用組合語言呼叫外部中斷0的大致過程是。

*** 0000h

ajmp main

*** 0003h

ajmp int0 我們把中斷處理的程式標籤設定為int0

*** 0080h

main : 這裡輸入其他初始化**

setb ea

setb ex0

loop: ajmp loop 等待中斷

int0 : push psw

push acc

這裡是中斷處理過程**

pop acc

pop psw

reti

中斷應用注意,首先是開中斷,然後是中斷入口,然後就是將psw和acc壓入堆疊保護。最後就是中斷返回reti

用c語言呼叫中斷涉及到中斷編號。具體參照第一節。

呼叫格式大致如下。

#include <89x51.h>

void main()

void inter0() interrupt0

定時器和中斷應用先分享到這裡。外部裝置的應用,例如鍵盤,lcd等,將在下節介紹。謝謝支援!

微控制器學習心得

以上三步學會,就相當於降龍十八掌武功,會了三掌了,可以勉強護身。第四步 與pc機進行rs232通訊 微控制器都有usart介面,特別是msp430系列中很多態號,都具有兩個usart介面。usart介面不能直接與pc機的rs232介面連線,它們之間的邏輯電平不同,需要使用乙個max3232晶元進行電...

51微控制器學習心得四

行的按鍵a端都依次接在低四位,四列按鍵的b端依次接在高四位。我們把鍵值編為 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 對此,我引入了一位高人編寫的鍵值判斷程式 uchar keyscan void for j 0 j 4 j 它的方式比較容易理解,其實就是按照行列...

微控制器C語言學習心得

今天寫這一篇文章並不是因為已經想好了一篇文章才寫下來,而是我要將這一篇文章作為乙個長期的筆記來寫,我會一直更新。在進行微控制器開發時,經常都會出現一些很不起眼的問題,這些問題其實都是很基礎的c語言知識點,是一些小細節。但是正是因為很基礎,又都是小細節,所以我們往往容易忽視它們。結果有時候我們會花很長...