日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2025年06月14日(星期六)

2020年06月14日 | 51單片機入門教程(5)——定時器中斷

發(fā)布者:DelightWish123 來源: eefocus關鍵字:51單片機  定時器中斷  微處理器 手機看文章 掃描二維碼
隨時隨地手機看文章

寫在開頭:中斷是包括單片機在內(nèi)的所有微處理器很重要的功能之一,初學單片機必須這一部分的知識。


一、中斷的概念

先看百度百科是怎么定義中斷的:


中斷是指計算機運行過程中,出現(xiàn)某些意外情況需主機干預時,機器能自動停止正在運行的程序并轉(zhuǎn)入處理新情況的程序,處理完畢后又返回原被暫停的程序繼續(xù)運行。

—— 百度百科


那么怎么理解中斷?看下面的例子。


關于中斷:

小A正在學習。這時,他的朋友小B叫他一塊兒吃雞,小A停止學習,轉(zhuǎn)去玩吃雞游戲。玩了幾局后,關掉游戲,繼續(xù)學習。


關于中斷優(yōu)先級:

小A正在學習。這時,他的朋友小B叫他一塊兒吃雞,小A停止學習,轉(zhuǎn)去玩吃雞游戲,(吃雞過程中,小A女朋友打來電話,于是掛機游戲,去接電話,接完電話,繼續(xù)游戲。)玩了幾局后,關掉游戲,繼續(xù)學習。


幾個重要概念:

中斷:小A學習被小B打斷的過程就稱為中斷。

中斷源:小B被稱為中斷源。

中斷服務程序:小A執(zhí)行的玩游戲操作稱為中斷服務程序

中斷優(yōu)先級:小A女朋友的電話比游戲優(yōu)先級高


在89c52單片機中,有3類中斷源:


1、外部中斷:當外部中斷引腳信號產(chǎn)生跳變(低電平→高電平)時引起中斷。

2、定時器/計數(shù)器中斷:當計數(shù)器計滿溢出時引起跳變。

3、串口中斷:串行端口完成一幀數(shù)據(jù)的發(fā)送/接受時引起(如藍牙傳輸)。


其優(yōu)先級如下表:


中斷源 優(yōu)先級 中斷服務號

INT0 – 外部中斷0 最高 0

T0 – 定時器/計數(shù)器0中斷 第2 1

INT1 – 外部中斷1 第3 2

T1 – 定時器/計數(shù)器1中斷 第4 3

串口中斷 第5 4

T2 – 定時器/計數(shù)器2中斷 最低 5

下面以定時器中斷為例,討論中斷的編程方法。


二、定時器中斷

2.1 軟件延時的不足

根據(jù)現(xiàn)有的知識,如果要在程序中等待一端時間,想到的操作應該是通過執(zhí)行若干次空指令,達到延時的效果。

如下:


//延時xms

void delayms(uint xms){

  uint i,j;

  for(i = 0; i < xms; ++i)

    for(j = 0; j < 110; ++j)

    ;

}


但是,假設要實現(xiàn)以下功能:


1、8位數(shù)碼管動態(tài)掃描顯示。

2、LED燈每隔1s閃爍一次。


電路如下:

在這里插入圖片描述

考慮程序怎么寫……


//代碼不完整,僅為舉例說明

void main(){

  P2 = 0x01;       //數(shù)碼管從最低位開始掃描

  while(1){

    //功能1:執(zhí)行數(shù)碼管動態(tài)掃描

    //P2控制顯示哪一個數(shù)碼管,P0控制數(shù)碼管顯示什么內(nèi)容

    P2 = P2<<1;      //掃描更高一位的數(shù)碼管

    P0 = xxxx;       //輸出段碼

    delayms(5);      //延時5ms后顯示下一位數(shù)碼管

  

    //功能2:執(zhí)行LED燈閃爍

    led = ~led;     //LED燈狀態(tài)取反

    delayms(1000);  //延時1000ms

  }

}


功能1和功能2單獨寫都沒有問題。

但是如果組合在一起,寫在一個while循環(huán)中,就會有問題了:

一個while循環(huán)中有兩個延時函數(shù),因此執(zhí)行一次while循環(huán),共延時了1005ms。這并不是我們所希望的結果。我們希望led閃爍的延時不影響數(shù)碼管動態(tài)掃描的延時。


2.2 中斷寄存器

要使用硬件定時,主要涉及到寄存器的操作。51單片機里的關于中斷的寄存器如下:


IE – 中斷允許控制寄存器

IP – 中斷優(yōu)先級控制寄存器

TMOD – 定時器工作方式寄存器

TCON – 定時器控制寄存器

SCON – 串口控制寄存器

THx/TLx – 定時器初值寄存器


在定時器中斷中,需要設置的有TMOD、THx/TLx、TCON、IE。

下面只介紹使用定時器中斷所需要設置的寄存器,其余寄存器可自行查閱資料。


2.2.1 中斷允許控制寄存器 IE

該寄存器的主要功能是控制中斷的開啟與關閉,共7個有效位,包含一個全局中斷控制位和6個中斷源的控制位。

中斷允許控制寄存器 IE各位的定義如下表:


序號 D7 D6 D5 D4 D3 D2 D1 D0

符號 EA – ET2 ES ET1 EX1 ET0 EX0

說明:

EA 全局中斷允許位,當此位是1時中斷可用。(重要)

ET2 定時器/計數(shù)器2中斷允許位

ES 串口中斷允許位

ET1 定時器/計數(shù)器1中斷允許位

EX1 外部中斷1允許位

ET0 定時器/計數(shù)器0中斷允許位 (重要)

EX0 外部中斷0允許位

要使用定時器中斷,需要將IE寄存器中的EA位設置為1,以及需要將ETx(x = 0,1,2)設置為1。


2.2.2 定時器工作方式寄存器 TMOD

該寄存器的主要功能是設置定時器/計數(shù)器中斷的工作方式。如設置位定時器模式、定時器模式的計數(shù)位的位數(shù)。以下是詳細介紹:

定時器工作方式寄存器 TMOD各位的定義如下表:


序號 D7 D6 D5 D4 D3 D2 D1 D0

符號 GATE

C/TˉˉˉC/bar{T}

C/ 

T

ˉ

 

M1 M0 GATE

C/TˉˉˉC/bar{T}

C/ 

T

ˉ

 

M1 M0

說明:

GATE 定時器/計數(shù)器的開關控制選項。常將該位置0,即定時器/計數(shù)器的開關控制僅由TCON寄存器中的TRx(x = 0,1)控制。(見2.2.3的TRx)

C/T 定時器模式和計數(shù)器模式選擇位,將該位置0則為定時器模式。

M1M0 設置定時器/計數(shù)器工作方式,常將該兩位設置為0 1,其定義如下表:


M1 M0 工作方式

0 0 模式0,13位計數(shù)

0 1 模式1,16位計數(shù),常用此模式

1 0 模式2,8位初值自動重裝

1 1 模式3,僅適用于T0,分為兩個8位計數(shù)器,T1停止計數(shù)

2.2.3 定時器控制寄存器 TCON

該寄存器用于控制中斷,如控制定時器的啟動,停止、判斷定時器的溢出和中斷情況。

定時器控制寄存器 TCON各位的定義如下表:


序號 D7 D6 D5 D4 D3 D2 D1 D0

符號 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

說明:

TF1 定時器1溢出標志位

TR1 定時器1運行控制位,將該位置1時啟動定時器1

TF0 定時器0溢出標志位

TR0 定時器0運行控制位,將該位置1時啟動定時器0 (重要)

IE1 外部中斷1請求標志

IT1 外部中斷1觸發(fā)方式選擇位

IE0 外部中斷0請求標志

IT0 外部中斷0觸發(fā)方式選擇位


2.2.4 定時器初值寄存器 THx/TLx

以定時器T0為例,其的工作原理是,每當晶振產(chǎn)生一次脈沖,就將該寄存器TL0加一,當TL0加滿溢出后,將TL0清空,TH0加一,TH0計滿后產(chǎn)生定時中斷。即TH0與TL0組成了一個16位的計數(shù)器,這個計數(shù)器可以從0x0000(0)加到0xffff(65535)。


以12Mhz的晶振、定時10ms為例:

51單片機為12分頻單片機,因此執(zhí)行一條指令的時間是12×(1/12M) s,即計數(shù)器每1us加一。


若定時10ms,則共需要加10000次。

因此將TH0、TL0設置從(65536-10000)= 55536開始計數(shù)。55536 的16進制為0xD8F0。因此將TH0設置為0xD8,TL0 設置為0xF0。


2.3 定時器中斷程序?qū)懛?p>首先要初始化定時器,即將命令寫入以上的寄存器。 假設使用定時器T0

首先設置定時器工作模式TMOD:GATE設置為0;C/T位設置為0使其工作在定時器模式下;M1M0設置為01,使用16位計數(shù)。

因此第一句代碼是


TMOD = 0x01;   // 0000 0001


然后設置定時器時長THx/TLx:


TH0 = 0xD8;

TL0 = 0xF0;


設置定時器允許寄存器IE,打開中斷總開關和T0中斷開關


EA = 1;

ET0 = 1;


最后設置定時器控制寄存器TCON,使定時器開始計數(shù)


TR0 = 1;


因此,完整的定時器初始化代碼如下


void initT0(){

  TMOD = 0x01;   // 0000 0001.

  TH0 = 0xD8;    //65536-10000

  TL0 = 0xF0;    //55536

  EA = 1;

  ET0 = 1;

  TR0 = 1;

}


當定時器計數(shù)觸發(fā)中斷時,單片機會調(diào)用中斷服務程序。中斷服務程序的格式如下:


void 函數(shù)名() interrupt 中斷號 using 工作組

{

  //所要執(zhí)行內(nèi)容

}


說明:

中斷服務函數(shù)要寫在主函數(shù)后面,且不需要聲明 。

中斷服務函數(shù)無返回值,所以用void

函數(shù)名可以隨便起

interrupt后的中斷號由下表的重點服務號確定

using 工作組可省略不寫


中斷源 優(yōu)先級 中斷服務號

INT0 – 外部中斷0 最高 0

T0 – 定時器/計數(shù)器0中斷 第2 1

INT1 – 外部中斷1 第3 2

T1 – 定時器/計數(shù)器1中斷 第4 3

串口中斷 第5 4

T2 – 定時器/計數(shù)器2中斷 最低 5

因此T0中斷服務程序如下:


void t0Intr() interrupt 0

{

  //因為執(zhí)行到此時,計數(shù)器已經(jīng)清零,所以要重新賦值

  TH0 = 0xD8;    //65536-10000

  TL0 = 0xF0;    //55536

  

  //下面寫需要執(zhí)行的操作

}


根據(jù)以上內(nèi)容,可設計一個簡單定時器電路如下:

在這里插入圖片描述

其中:


D1燈由定時器控制,每秒閃一次

D2 - D8由軟件延時實現(xiàn)流水燈效果,周期為100ms


代碼如下


#include

#include

//num為計數(shù)器,每10ms將num加一,當num為100時為1s

unsigned char num;

sbit led = P1^0;

//函數(shù)聲明

void delay100ms();  //軟件延時100ms

void initT0();      //初始化定時器T0


void main()

{

  unsigned char k ;

  //初始化num值

  num = 0;

  //初始化定時器

  initT0();

  //初始化led燈

  led = 0;

  //初始化流水燈

  P0 = 0xfe;

  k = 0xfe;

  while(1)

  {

    //每100ms流水燈移位一次

    k = _crol_(k, 1);

    P0 = k;

    delay100ms();

  }

}

//t0定時器中斷服務程序

//每隔10ms進入一次該程序

void t0Intr() interrupt 1

{

  TH0 = 0xD8;

  TL0 = 0xF0;

  

  num++;   //該變量加至100說明為1s

  if(num == 100)

  {

    num = 0;

    led = ~led;   //翻轉(zhuǎn)led燈狀態(tài)

  }

}

void delay100ms()

{

  unsigned char a,b,c;

  for(c=19;c>0;c--)

    for(b=20;b>0;b--)

      for(a=130;a>0;a--);

}


void initT0()

{

  TMOD = 0x01;

  TH0 = 0xD8;

  TL0 = 0xF0;

  EA = 1;

  ET0 = 1;

  TR0 = 1;

}

關鍵字:51單片機  定時器中斷  微處理器 引用地址:51單片機入門教程(5)——定時器中斷

上一篇:51單片機流水燈電路以及C代碼
下一篇:51單片機入門教程(4)——按鍵控制

推薦閱讀

  省內(nèi)首座電動汽車充電兼具新型能源展示的綜合電動汽車充電站——二郎劍充電站目前進入試運行階段,預計于6月15日正式投入使用。   為積極響應省委省政府大力推廣新型能源建設和應用工作部署,國網(wǎng)海南供電公司建成了省內(nèi)首座電動汽車充電兼具新型能源展示的綜合電動汽車充電站——二郎劍充電站。為此,國網(wǎng)海南供電公司共投入資金602萬元,新架線...
奮達科技(以下簡稱“公司”或“申請人”)就與第一被申請人深圳市光聚通訊技術開發(fā)有限公司、第二被申請人于東方、第三被申請人黃韞之間增資協(xié)議爭議一案向深圳國際仲裁院提起仲裁。6月12日晚間,奮達科技發(fā)布了關于深圳國際仲裁院對本案作出裁決。公告顯示,第二被申請人、第三被申請人共同支付申請人第一期股權回購款本金人民幣10,000,000元,并支付相...
概述本文使用STM32F10X,軟件為Keil uVision5,仿真軟件Proteus 8 Professional電路圖實現(xiàn)代碼學習筆記8個led電路圖8個led亮滅實現(xiàn)代碼實現(xiàn)代碼//8??ledè?ááè??e#include "stm32f10x.h"int main(){ GPIO_InitTypeDef star; //配置開啟GPIO時鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //設置GPIO輸出模式 //stm32F1...
從蒸汽到內(nèi)燃機,再到電動機,幾百年的歷史進程中,世界驅(qū)動力的升級讓城市運轉(zhuǎn)的節(jié)奏更快更強,而汽車可以說是城市動力的親歷者和見證者。不過,正如曾經(jīng)每一次變革都會受到來自技術或能源上的阻力一樣,汽車在即將告別化石能源全力擁抱新能源技術,駛向未來駕駛的過程中也面臨著不小的挑戰(zhàn)。“一代正極材料,一代動力電池”,從錳酸鋰到磷酸鐵鋰,再到三...

史海拾趣

問答坊 | AI 解惑

cy7c68013電路圖 56腳電路圖

原理圖和pcb圖都有,不能使用master模式…

查看全部問答∨

超級大電容,保證你不會白進來

很超的電容,希望大家買東西多看看想想 …

查看全部問答∨

基于GSM模塊的家庭防盜報警系統(tǒng)(很全的哦)

前一陣子做過類似的東西,感覺這個資料還不錯!…

查看全部問答∨

top芯片中文資料

top芯片中文資料…

查看全部問答∨

致:初學汽車電子的朋友

1 要學電子,先學好汽車電路。外部原理不懂如何修內(nèi)部? 2要學好電路,先學好汽車原理?;倦娖髟聿欢绾畏治龉收显? 比如:曲軸傳感器,1有幾條線?兩條線的與三條線的如何區(qū)別?工作原理是什么?線分別是到哪里的?分別是什么信號? 信號 ...…

查看全部問答∨

怎么把50V的電壓用一顆IC降到10V,求電子工程師進來解決

怎么把50V的電壓用一顆IC降到10V,求電子工程師進來解決…

查看全部問答∨

51單片機用串口送MIDI信號給PC機?

硬件實驗設計板是這樣的: 一個獨立按鍵和4X3距陣鍵盤(共13個按鍵),用中斷掃描鍵盤是否被按下,如一個按鍵被按下就向PC機發(fā)送一個單音的MIDI信號音符。我只知道用單片機向PC機發(fā)送MIDI信號的協(xié)議是這樣的 //這是發(fā)送函數(shù) void send(uchar cc,k ...…

查看全部問答∨

wince調(diào)用服務的問題

我參照msdn上wince服務的介紹寫了個服務,但好像一直沒有被系統(tǒng)調(diào)用,大家?guī)兔聪略? appKey.SetValue(\"Dll\", \"MyMobileService.dll\"); appKey.SetValue(\"Order\", \"10\", RegistryValueKind.DWord); appKey.SetValue(\"Prefix\", \"CU\" ...…

查看全部問答∨

DSP arm 和flash的CMD有什么區(qū)別?

DSP arm 和flash的CMD有什么區(qū)別? 有人了解不,可以一起討論下   [ 本帖最后由 安_然 于 2010-8-8 14:24 編輯 ]…

查看全部問答∨

IR推出新系列40V至75V車用MOSFET

本帖最后由 dontium 于 2015-1-23 13:31 編輯 IR推出新系列40V至75V車用MOSFET 21ic訊 IR近日推出新的車用MOSFET系列,適合要求低導通電阻的一系列應用,包括傳統(tǒng)內(nèi)燃機 (ICE) 平臺以及微型和混合動力汽車平臺上的重載應用。 IR堅固的新型平面 ...…

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

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved