娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年05月18日(星期日)

正在發生

2020年05月18日 | 關于51單片機學習中計數器/定時器中斷的理解

發布者:柔情細語 來源: eefocus關鍵字:51單片機  計數器  定時器中斷 手機看文章 掃描二維碼
隨時隨地手機看文章

對于單片機初學者來說,為了達到延時控制時間等目的,常常讓單片機計算for循環函數,隨著學習的深入,不可避免的,我們開始逐漸接觸到了定時器/計數器中斷來控制時間,這里針對定時器/計數器中斷,專門作出如下討論:


定時器/計數器是什么?


眾所周知,一塊單片機的基本由 中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中 斷系統、定時器/計數器 構成,


定時器/計數器在單片機中的腳管位置,如圖

STC89C51RC單片機腳管示意圖

我們可以看到,在P3系列的腳管中,P3.4,P3.5腳管上標注著T0,T1;它們分別代表著單片機內部的定時/計數器0,1,也就是英文 Timer 0,Timer 1,從圖上看,一塊80C51單片機上有著兩個Timer,Timer既有計時的功能,又有計數的功能,通過設置與他們相關的特殊功能寄存器可以選擇啟用定時功能或者記數功能,關于功能的實現將在第三點講,現在我們主要研究 Timer是什么 。


下面是Timer的結構框圖:

這里寫圖片描述

我們可以看到,Timer是一個十六位的加一計數器,TCON(Timer control)指的是Timer的控制寄存器,TMOD(Timer Mode)則是timer的工作方式寄存器;


為什么要去實現Timer的中斷


原因很簡單,1.提高代碼的工作效率,由于Timer是單片機中的一個獨立的單元,不會去占用CPU的運行速 度,單獨運行,自然提高效率

2.精確的控制時間,下面就以keil4中的for循環的delay( )函數和中斷函數做對比,來控制蜂鳴器每500ms響一次,通過debug中的運行時間計算,來看看中斷時如何精確的控制時間的;


for的代碼


#include

#define uint unsigned int

#define uchar unsigned char


sbit beep=P2^3;

void delay(uint);


int main(void)

{   


  while(1)'

{   


    beep=1;

    delay(500);

    beep=0;

    delay(500);

}


return 0;

}

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

    for(y=110;y>0;y--); 

}

這里寫圖片描述

從圖中看,delay(500)函數執行用了485ms

再看Timer中斷,還是調試蜂鳴器


代碼如下:


#define uint unsigned int 

#define uchar unsigned char 

#include


sbit beep=P2^3;

uchar num;


int main(void)

{   


    TMOD=0x01;

    TH0=(65535-45872)/256;

    TL0=(65535-45872)%256;

    EA=1;

    ET0=1;

    TR0=1;


     while(1);


return 0;

}


void T0_time()interrupt 1

{

    TH0=(65536-45872)/256;

    TL0=(65535-45872)%256;

       num++;


        if(num==20)

        {

            num =0;

            beep=~beep;

        }

}


什么?關于它的運行時間是多少? …… 我也不會用keil4來做,本人小菜雞哈,求教大神幫忙試一下。沒關系我會算:

機器周期=12*時鐘周期(我的晶振的頻率是11.0592MHZ),我們想讓計數器記的數N=t/機器周期,

t是自己設定的,比如我們需要設定的是50ms,那么N=50 000/1.09 =45872,OK,誤差在微秒級上,你說哪個精確?


怎么實現Timer中斷?

我們還是要從頭說起,第一點,要說一下51單片機的中斷級別,廢話不說,直接上圖

這里寫圖片描述

這張圖直接以由高到低的順序解釋了52單片機的中斷級別(52與51類似,除了沒有T2)C語言用的序號是什么意?

很簡單,看上面的蜂鳴器中斷的代碼:下面是不是有一個interrupt 1 ? 這個1就代表該序號級別的中斷,與圖中對應,可以看出,那個函數表示的是Timer0的中斷。


還是那張圖,先來說說TCON(Timer Control),TCON可以被尋址,也就是說沒必要用一個類似于0xff之類的十六進制的數字來控制每個位,再說每個位的內容

TF1(Timer1 Filled):也就是Timer1 數據溢出了,此時它會向CPU提出中斷請求,是單片機自動的,沒必要控制1!

TR1(Timer1 Run): 字面意思,就像那句Run Forrest ! 需要你去聲明,例如TR1=1,就是 RUN! TIMER1! 那個Timer就工作了。。

TF0,TR0,那個同上,只不過是角標不一樣而已;


在說說TMOD(Timer Mode),Timer Mode沒法被尋址,所以必須用一個十六進制數如0xff來控制每一位,進而完成功能實現

1,GATE(基本上沒特殊要求的話,GATE這個位直接取0)

GATE=0:Timer啟動與停止僅僅受TCON寄存器中的TRX(Timer Run 0或者1 , X是角標),控制 ; GATE=1:由TRX和外部中斷引腳 INT0或INT1上的電平控制


2 , C/T(cacluate or time ),定時器模式和計數器模式的選擇位,作為Timer中斷來說,這位通常取0;

C/T=1:計數器模式

C/T=0:定時器模式


3, M1M2,工作方式選擇位,由這兩個位共同決定Timer的工作方式,基本上我們都是用 0 1,廢話不說,直接上圖

這里寫圖片描述

開始分析剛剛上的那個蜂鳴器的中斷代碼:


    int main(void)

{   


    TMOD=0x01;    //0000_0001,相當于只打開了Timer0,并且把它的工作狀態設為16位的Timer

    TH0=(65535-45872)/256;//45872上次的運算結果,就是那個控制50ms的那個數據,除法,將數據

    TL0=(65535-45872)%256;//儲存進高八位,取余將數據儲存進第八位

    EA=1;//打開總中斷,首要步驟

    ET0=1;//打開定時器0中斷

    TR0=1;//啟動定時器0


     while(1);


return 0;

}


void T0_time()interrupt 1

{

    TH0=(65536-45872)/256;

    TL0=(65535-45872)%256;

       num++;//不斷地累加,到num=20時,重置,20×50ms = 1s


        if(num==20)

        {

            num =0;

            beep=~beep;

        }

}   


總的來說,就是

1,設定TMOD → 2,裝入初值(THx,TLx, 45872)→3.打開總中斷 EA=1 →4.開啟定時器中斷→5.啟動定時器(TRx)→設定中斷函數 (void Tx_time( ) interrupt y, x表示定時器編號,y表示中斷序列)

關鍵字:51單片機  計數器  定時器中斷 引用地址:關于51單片機學習中計數器/定時器中斷的理解

上一篇:51單片機的中斷和定時器、計數器
下一篇:51單片機-定時器1中斷

推薦閱讀

實驗內容: 使用AVR的外部中斷INT1檢測PD3Key,如果有按鍵按下,則喚醒休眠的MCU,并使它的PB口的LED做加1指示。#include <iom16v.h>#define DISP_DDR DDRB#define DISP_PORT PORTB#define IN_PD3 cbi(DDRD,3) //PD3#define SET_PD3 sbi(PORTD,3)#define GET_PD3 gbi(PIND,3)//PORTA|=BIT(5); 就是把把第6位置1;//PORTA=~BIT(5)...
近日,智能倉儲物流機器人公司科鈦機器人宣布獲得來自珪璋創投的數千萬Pre-A輪融資,創始人林志赟表示,本輪融資將主要用于AGV核心控制器和產品的推廣與生產??柒仚C器人成立于2016年3月,曾于2017年完成1400萬種子+天使輪融資。 近年來,“機器換人”的步伐逐漸加快。其中,AGV(移動機器人,AutomatedGuided Vehicle)作為自動化運輸搬運的重要,憑...
在工廠的智能物流環節,移動機器人是非常重要的存在。需要移動機器人完成的作業任務有線邊配送、原材料出庫與入庫、從倉庫到產線的配送、產線與產線的對接、產線與成品庫的配送、成品庫的出入庫等。由于每個工廠所生產的產品不同,相應的貨物和料架也不相同,所以對移動機器人的類型需求也不一樣。即使是同一個工廠,因為原料庫、產線及成品庫所需運送的貨...
是德科技 (原安捷倫) 示波器支持您保存以下任意內容:設置和信號:設置和信號總是同時被存儲。您可將設置信號保存到USB存儲設備或示波器的內部存儲器中。注意:即使設置和信號是同時被存儲的,也有可能只調用其中的一個。設置中包含了示波器的配置信息。設置包括測量、光標、數學函數以及水平、垂直和觸發設置等內容。當示波器將設置存儲到USB存儲設備中...

史海拾趣

問答坊 | AI 解惑

基于FPGA的全數字鎖相環的設計

l 前言     鎖相環(PLL)的理論與研究日趨完善,應用范圍遍及整個電子技術領域,如信號處理,調制解調.時鐘同步,倍頻,頻率綜合等都應用到了鎖相環技術。隨著集成電路技術的發展,集成鎖相環和數字鎖相環技術日趨成熟,不僅能夠制成頻 ...…

查看全部問答∨

等精度數字頻率計是什么來得?

如題。最好給些參考知料。謝謝各位了?!?

查看全部問答∨

關于PIC MPLAB 為什么編譯失敗不提示錯誤位置(無錯誤報告)

mplab+picc編譯器 編譯失敗后 為什么不提示錯誤位置,錯誤需要自己一個字一個字的找,該怎么設置編譯器選項呢,剛接觸PIC請各位幫忙解釋一下  …

查看全部問答∨

WIFI驅動對密碼錯誤的連接的處理

用微軟自帶的WIFI配置程序,先用錯誤的密碼去連接某個熱點(TKIP+WPA2-PSK),第2次提示到“正在重新對chenj進行驗證...”就停止了(如果是正常的過程,應該是重新認證3次然后斷開連接吧?)。然后用正確的密碼去連接這個熱點,也是提示到“正在重新 ...…

查看全部問答∨

分少再加,實際不懂問題求助—PXA270實踐

     有幾個問題不太理解。        1:我閱讀了一個的操作系統(包含驅動程序)的部分代碼,發現里面的目錄有bsp,也有driver。這兩個目錄是平行的。 但是我發現在bsp與driver中有重復的內容,其實drive ...…

查看全部問答∨

Siemens mc55 gprs模塊 socket連接 at^sisw 出錯!大俠賜教

at^sics=0,conType,GPRS0 at^sics=0,user,gprs at^sics=0,passwd,gprs at^sics=0,apn,CMNET at^siss=1,srvType,socket at^siss=1,conId,0 at^siss=1,address,\"socktcp://121.235.222.244:6800” at^siso=1 //這個命令顯示是OK的,但是查 ...…

查看全部問答∨

電腦并口與Hjtag連不上

起因配電腦的時候什么不懂,沒串口并口。后來發現主板上有外置的串并口,買了兩根延長線,串口可以用,并口不可連接jtag(LPC2131開發板)。 1開發板接到別人的并口可以連接上,說明開發板硬件沒壞。 2電腦并口設置spp、ecp、epp都設置過,并口地址 ...…

查看全部問答∨

三極管無輸入也能點亮點陣?

如圖:三極管發射極5v,基極輸入低電平不能導通點陣,發射極和基極不接線反而點亮了,為什么???請教?!?

查看全部問答∨

請教這個混波電路的原理,謝謝

大家好: 這個電路好像是一個鑒相器,它能夠將阻抗 Z 的實部(R)和虛部(Xc)分離出來變成直流電壓輸出。 以下是我理解的部分: 左上角的 U4C 和 U4D 放大阻抗 Z 兩端的電壓,輸出 A,B 兩信號,這是電壓向量。 下面 3 級 OP 組成的儀放電路 ...…

查看全部問答∨

spi的sck引腳問題

stm32103VC的spi2的sck為啥沒有波形輸出,而mosi有波形輸出。換了兩個片子都這樣。郁悶。為啥會這樣呢。…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 淄博市| 乌拉特中旗| 岚皋县| 余干县| 伊春市| 万源市| 淳安县| 三门峡市| 常山县| 江门市| 吴堡县| 元阳县| 英超| 依兰县| 井研县| 西吉县| 宁武县| 九台市| 安塞县| 静乐县| 江华| 鹿泉市| 出国| 沁水县| 乌兰浩特市| 晋江市| 永丰县| 沛县| 沁水县| 当涂县| 唐山市| 浪卡子县| 丰原市| 贵南县| 桂平市| 迭部县| 礼泉县| 大邑县| 通海县| 沈丘县| 平和县|