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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单片机 定时器/计数器

發布時間:2023/12/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单片机 定时器/计数器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

單片機 定時器/計數器

一、簡述

????MCS—51系列單片機內部有兩個16位定時器/計數器,即定時器T0和定時器T1。它們都具有定時和計數功能,可用于定時或延時控制,對外部事件進行檢測、計數等。

????定時器/計數器是一個加“1”計數器,來一脈沖即做加1計數,直至寄存器各位全為1,再來一脈沖,計數器回0且使TF0(定時器T0)TF1(定時器T1)置1表示定時時間到,計數值乘以單片機的機器周期就是定時時間。

? ? ?計數器:工作在方式1,可以從0數到65536(2的16次方),超過65535產生中斷;如果想要數10000個數,可以設置計數器的初值為55536,這樣從初值55535數到65535就是10000個數。

? ? ?計數器又叫定時器:晶振產生脈沖信號,一個脈沖信號過來,計數器就數1,頻率高,產生脈沖信號就快,計數器數數就快,計數器每數了一個數說明過去了xx秒,那么讓計數器數10000個數,對應過去了10000乘以xx秒。這樣我們想要在10秒之后做某件事情,設置好計數器初值(設定計數器要數多少個數)、設置好頻率(確定產生一個脈沖的時間),計數器數到65535之后,產生溢出信號、引起中斷,然后執行中斷服務(可以是我們自己編寫的中斷函數)。

? ? ? 如:頻率是12MHZ,也就是1秒可以產生12000000個脈沖,也就是1秒可以數12000000個數。如果設置計數器的初值為65524(65535-12),也就是數12個數。數12000000個數用時1秒,那么數12個數用時12/12000000=0.000000.1秒=1微秒。(1秒=1000000微秒),想要定時1ms,那么可以讓計數器數12000個數,設置計數器的初值為65535-12000=53535。

二、TMOD控制寄存器

????GATE=1時,“與門”的輸出信號K由INTx輸入電平和TRx位的狀態一起決定(即此時K=TRx·INTx),當且僅當TRx=1,INTx=1(高電平)時,計數啟動;否則,計數停止。
????當INT0引腳為高電平時且TR0置位,TR0=1;啟動定時器T0;
????當INT1引腳為高電平時且TR1置位,TR1=1;啟動定時器T1。
????GATE=0時,“或門”輸出恒為1,“與門”的輸出信號K由TRx決定(即此時K=TRx),定時器不受INTx輸入電平的影響,由TRx直接控制定時器的啟動和停止。

三、TCON控制寄存器

?

設定好了定時器/計數器的工作方式后,它還不能進入工作狀態,必須通過設置控制寄存器TCON中的某些位來啟動它工。要使定時器/計數器停止運行,也必須通過設置TCON中的某些位來實現。當定時器/計數器計滿溢出,或有外部中斷請求時,TCON能標明溢出和中斷情況。

  

設定好了定時器計數器/的工作方式后,它還不能進入工作狀態,必須通過設置控制寄存器TCON中的某些位來啟動它工。要使定時器/計數器停止運行,也必須通過設置TCON中的某些位來實現。當定時器/計數器計滿溢出,或有外部中斷請求時,TCON能標明溢出和中斷情況??刂萍拇嫫鱐CON每位的含義:?

?

TF1:定時器T1溢出標志位。當定時器T1溢出時,由硬件自動使TF1置1,并向CPU申請中斷。CPU響應中斷后,自動對TF1清零。TF1也可以用軟件清零。?
TR1:定時器T 1運行控制位??捎绍浖?(或清零)來啟動(或關閉)定時器T1,使定時器T1開始計數。用指令SETB TR1(或CLR TR1)使TR1置1(或清零)。?
TF0:定時器T0溢出標志位。其功能與TF1相同。?
TR0:定時器T0運行控制位。其功能與TR1相同。?
IE1:外部中斷1請求標志位。?
IT1:外部中斷1觸發方式控制位。?
IE0:外部中斷0請求標志位。?
IT0:外部中斷0觸發方式控制位。?
IE1、IT1、IE0、IT0這4位將在第3節講述。?
控制寄存器TCON的位地址是88H,可以對它進行位尋址。

四、初值計

?

機器周期:

? ? 時鐘周期(振蕩周期) = 1秒/晶振頻率? ? ? ? ?(T = 1/f)

????機器周期 = 12*振蕩周期

????機器周期?= 12秒/晶振頻率?

????如果系統晶振頻率為12M,那么機器周期=1us

?

五、例子

?

定時函數

void Delay1ms(unsigned int count) {unsigned int i;TMOD=0x01; //選用定時器0且工作在方式1TH0=0x3c; //設置初值0x3cb0TL0=0xb0;TR0=1; //開啟定時器for(i=0;i<count;i++) //循環count次,每次定時50ms,總共count*50ms{ while(TF0!=1);// 每次定時50ms (溢出時才會跳出循環)TH0=0x3c; //重置初值0x3cb0TL0=0xb0;TF0=0; //軟置溢出位} TR0=0; //關閉定時器 }

定時1s:Delay1ms(20);

?

?

總結

以上是生活随笔為你收集整理的单片机 定时器/计数器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。