日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

嵌入式开发学习笔记6-了解单片机中的特殊功能寄存器(定时器/计数器)

發(fā)布時(shí)間:2024/3/24 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 嵌入式开发学习笔记6-了解单片机中的特殊功能寄存器(定时器/计数器) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

嵌入式開(kāi)發(fā)學(xué)習(xí)筆記6-了解單片機(jī)中的特殊功能寄存器(定時(shí)器/計(jì)數(shù)器)

  • 定時(shí)器/計(jì)數(shù)器簡(jiǎn)介
    • TH與TL
    • TMOD工作模式寄存器
    • TCON定時(shí)器控制寄存器
    • 定時(shí)器操作實(shí)例

定時(shí)器/計(jì)數(shù)器簡(jiǎn)介

在單片機(jī)中,存在兩個(gè)定時(shí)器/計(jì)數(shù)器,他們分別為T(mén)0和T1

在單片機(jī)中,定時(shí)器/計(jì)數(shù)器是實(shí)現(xiàn)精準(zhǔn)定時(shí)、用于測(cè)量脈沖等應(yīng)用
基本的定時(shí)器/計(jì)數(shù)器原理如圖所示

在了解定時(shí)器/計(jì)數(shù)器之前,我們需要了解幾個(gè)基本概念:
1)時(shí)鐘周期:時(shí)鐘周期 T 是時(shí)序中最小的時(shí)間單位,具體計(jì)算的方法就是1/ 時(shí)鐘源頻率【也就是晶振電路的振動(dòng)頻率】(一般單片機(jī)采用的是11.0592MHz)
2)機(jī)器周期:單片機(jī)完成一個(gè)操作的最短時(shí)間,一個(gè)機(jī)器周期等于12個(gè)時(shí)鐘周期

定時(shí)器/計(jì)數(shù)器的實(shí)質(zhì)是加1計(jì)數(shù)器(16位),由高8位和低8位兩個(gè)寄存器組成(TH和TL)。TMOD是定時(shí)器/計(jì)數(shù)器的工作方式寄存器,確定工作方式和功能;TCON是控制寄存器,控制T0、T1的啟動(dòng)和停止及設(shè)置溢出標(biāo)志。

定時(shí)器:加1計(jì)數(shù)器是對(duì)內(nèi)部機(jī)器周期計(jì)數(shù)(1個(gè)機(jī)器周期等于12個(gè)振蕩周期,即計(jì)數(shù)頻率為晶振頻率的1/12)。計(jì)數(shù)值N乘以機(jī)器周期Tcy就是定時(shí)時(shí)間t ,通過(guò)設(shè)定TH和TL的初值,我們就可以合理設(shè)置定時(shí)器的定時(shí)時(shí)間

計(jì)數(shù)器:計(jì)數(shù)器主要用來(lái)計(jì)輸入脈沖的值。每來(lái)一個(gè)脈沖計(jì)數(shù)器加1,當(dāng)加到計(jì)數(shù)器為全1(即FFFFH)時(shí),再輸入一個(gè)脈沖就使計(jì)數(shù)器回零,且計(jì)數(shù)器的溢出使TCON中TF0或TF1置1,向CPU發(fā)出中斷請(qǐng)求(定時(shí)器/計(jì)數(shù)器中斷允許時(shí)),單片機(jī)對(duì)外部脈沖有基本要求:脈沖的高低電平持續(xù)時(shí)間都必須大于1個(gè)機(jī)器周期。所以T0或者T1 輸入的可計(jì)數(shù)外部脈沖的最高頻率為當(dāng)前單片機(jī)工作頻率/24。

在單片機(jī)中,存在兩個(gè)定時(shí)器/計(jì)數(shù)器,他們分別為T(mén)0和T1

TH與TL

在單片機(jī)中,存在4個(gè)特殊功能寄存器,主要用來(lái)實(shí)現(xiàn)定時(shí)器/計(jì)數(shù)器,他們分別是

名稱描述SFR地址復(fù)位值
TH0定時(shí)器/計(jì)數(shù)器0x8C0x00
TL0定時(shí)器/計(jì)數(shù)器0x8A0x00
TH1定時(shí)器/計(jì)數(shù)器0x8D0x00
TL1定時(shí)器/計(jì)數(shù)器0x8B0x00

通過(guò)設(shè)置TH與TL的初值,我們可以實(shí)現(xiàn)我們想要的定時(shí)功能、延時(shí)功能和計(jì)數(shù)功能
例如:如果我們想要實(shí)現(xiàn)0.02s的定時(shí),我們可以先計(jì)數(shù)實(shí)現(xiàn)0.02s所需要的機(jī)器周期,假設(shè)需要的機(jī)器周期為x
x*12/11059200=0.02
–> x=18432
由于單片機(jī)存在的是16位定時(shí)器/計(jì)數(shù)器,最大能表示65535,因此當(dāng)初值y=65536-18432=47104時(shí),定時(shí)器可實(shí)現(xiàn)0.02s的定時(shí),對(duì)應(yīng)的16進(jìn)制為0xB800,因此當(dāng)我們給TH0=0xB8,TL0=0x00時(shí),我們可實(shí)現(xiàn)定時(shí)器0.02s的精確定時(shí)

TMOD工作模式寄存器

TMOD是定時(shí)器、計(jì)數(shù)器模式控制寄存器(TIMER/COUNTER MODE CONTROL REGISTER),它是一個(gè)逐位定義的8位寄存器,但只能使用字節(jié)尋址,其字節(jié)地址為89H
主要用來(lái)控制定時(shí)器/計(jì)數(shù)器的工作模式

1)GATE——門(mén)控制位
GATE=0,以運(yùn)行控制位TRx啟動(dòng)定時(shí)器;GATE=1,以外中斷請(qǐng)求信號(hào)(INT1或INT0)啟動(dòng)定時(shí)器,即僅當(dāng)INT0(P3.2)【INT1(P3.3)】引腳為高且TR0控制位被置1時(shí)可使定時(shí)器開(kāi)始計(jì)時(shí),常用來(lái)測(cè)量外部信號(hào)脈沖寬度

2)C/T——功能選擇位
定時(shí)器或計(jì)數(shù)器選擇位,該位被清零時(shí)用作定時(shí)器功能(內(nèi)部系統(tǒng)時(shí)鐘),置1時(shí)用作計(jì)數(shù)器功能

3)M0、M1——方式選擇功能
MCS-51的定時(shí)器T0有4種工作方式:方式0,方式1,方式2,方式3。
MCS-51的定時(shí)器T1有3種工作方式:方式0,方式1,方式2

目前我們常用的是方式1和方式2,方式0和方式3基本不用

TCON定時(shí)器控制寄存器

TCON(Timer?Control?Register)定時(shí)器/計(jì)數(shù)器控制寄存器,TCON在特殊功能寄存器中,字節(jié)地址為88H,位地址(由低位到高位)為88H一8FH,可進(jìn)行位尋址

TCON的作用是控制定時(shí)器的啟、停,標(biāo)志定時(shí)器溢出和中斷情況


目前我們只了解4567位的作用,其他的暫時(shí)不做了解

1)TF位
溢出中斷請(qǐng)求標(biāo)志位,T1計(jì)數(shù)/定時(shí)溢出時(shí)由硬件自動(dòng)置TF1為1,CPU響應(yīng)中斷后TF1由硬件自動(dòng)清0,也可軟件清零,可用來(lái)判別定時(shí)器/計(jì)數(shù)器的狀態(tài)
2)TR位
定時(shí)器/計(jì)數(shù)器運(yùn)行控制位,TR置0時(shí)定時(shí)器/計(jì)數(shù)器停止工作,置1時(shí)開(kāi)始工作

定時(shí)器操作實(shí)例

對(duì)于定時(shí)器的設(shè)置,我們只需要遵循以下幾個(gè)步驟:
第一:設(shè)置特殊功能寄存器TMOD,配置好工作模式
第二:設(shè)置存儲(chǔ)器TH0與TL0的初值
第三:設(shè)置TCON,通過(guò)TR0置1來(lái)讓定時(shí)器開(kāi)始計(jì)時(shí)
第四:判斷TCON寄存器的TF0,監(jiān)測(cè)定時(shí)器溢出情況

下面,我們基于C語(yǔ)言來(lái)進(jìn)行程序編寫(xiě):以實(shí)現(xiàn)LED燈閃爍(周期為2s)

#include<reg52.h>//定時(shí)器0初始化 void Timer0Init() {TMOD = 0x01;//定時(shí)器模式,使用工作方式1TH0 = 0xB8;//定時(shí)器定時(shí)0.02sTL0 = 0x00;TR0 = 1//啟動(dòng)定時(shí)器 }//定時(shí)器0溢出后進(jìn)行初始化 void TimerOutInit() {TF0 = 0;//軟件清零TH0 = 0xB8;TL0 = 0x00; }void main() {Timer0Init();//定時(shí)器0初始化P0 = 0x00;//打開(kāi)LED燈if(TF0 == 1)//判斷定時(shí)器0是否溢出{ Timer0OutInit();//初始化for(i=0;i<50;i++)//定時(shí)1s{P0 = ~P0;//實(shí)現(xiàn)LED閃爍}} }

上述程序沒(méi)有運(yùn)行調(diào)試,有問(wèn)題可以即時(shí)反饋

--------------------------------------以上內(nèi)容由作者原創(chuàng),歡迎轉(zhuǎn)載,部分從網(wǎng)絡(luò)整理,如侵權(quán)清聯(lián)系刪除----------------------------------------------

總結(jié)

以上是生活随笔為你收集整理的嵌入式开发学习笔记6-了解单片机中的特殊功能寄存器(定时器/计数器)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。