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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

单片机原理及其应用——单片机定时器中断实验(八段数码管依次显示0~9数字)

發(fā)布時間:2024/2/28 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单片机原理及其应用——单片机定时器中断实验(八段数码管依次显示0~9数字) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

  • 一、實驗要求
  • 二、知識要點
    • (一)單片機定時器/計數(shù)器
    • (二)相關(guān)的特殊功能寄存器
      • 1、工作方式寄存器TMOD
      • 2、定時器/計數(shù)器控制寄存器TCON
    • (三)定時器/計數(shù)器的工作方式
      • 1、工作方式0
      • 2、工作方式1
      • 3、工作方式2
      • 4、工作方式3
    • (四)預(yù)置定時器/計數(shù)器的初值
      • 1、預(yù)置計數(shù)器初值
      • 2、預(yù)置定時器初值
    • (五)四類定時/計數(shù)方法
    • (六)定時器/計數(shù)器的初始化過程
  • 三、Proteus仿真軟件畫原理圖
  • 四、Keil編程軟件編寫程序
  • 五、實驗結(jié)果
    • (一)仿真結(jié)果
    • (二)連接電路
    • (三)燒錄并觀察實驗現(xiàn)象
  • 結(jié)語

一、實驗要求

【實驗?zāi)康摹?br /> 1、掌握定時器控制寄存器的設(shè)置方法;掌握定時器初始化流程;
2、掌握定時器中斷服務(wù)程序的編寫方法。
【實驗內(nèi)容】
數(shù)碼管上顯示定時器中斷計數(shù)(定時時間1s)。
【硬件要求】
連接方法:P2.0-P2.7連接一只共陽型7段LED數(shù)碼管,P1.0連接至單片機P3.5(T1)引腳。
【軟件實現(xiàn)】
編程實現(xiàn)實現(xiàn)數(shù)碼管上顯示定時器中斷計數(shù)(定時時間1s)。

二、知識要點

(一)單片機定時器/計數(shù)器

單片機有兩個16位的可編程的定時器/計數(shù)器T0和T1,可用作定時或延時,它們具有兩種工作模式(計數(shù)模式和定時模式)和四種工作方式(工作方式0、工作方式1、工作方式2、工作方式3),定時器/計數(shù)器的核心部件是二進(jìn)制加1計數(shù)器(TH0、TL0或TH1、TL1)。

定時器/計數(shù)器的兩種工作模式都是對脈沖信號進(jìn)行計數(shù)的,只是計數(shù)信號的來源不同,定時模式來自內(nèi)部,而計數(shù)模式來自外部。與T0和T1相關(guān)的寄存器有:兩個8位的控制寄存器TMOD和TCON、兩個16位的計數(shù)器TH0、TL0或TH1、TL1。

(二)相關(guān)的特殊功能寄存器

1、工作方式寄存器TMOD

8位特殊功能寄存器TMOD用于選擇定時器/計數(shù)器T0、T1的工作方式,它分為兩組,高4位決定T1的工作方式,低4位決定T0的工作方式,以下是TMOD的格式:

(1)GATE為門控位,當(dāng)GATE=0時,使TCON的TR0或TR1為1就可以啟動定時器/計數(shù)器工作,而當(dāng)GATE=1時,除了需要使TCON以外,同時還需要使外部中斷引腳為高電平時才能啟動定時器/計數(shù)器工作,即T0、T1的是否計數(shù)受到外部引腳輸入電平的控制,其中INT0引腳控制T0,INT1引腳控制T1,可用于測量在INT0和INT1引腳出現(xiàn)的正脈沖寬度。
(2)C/T為定時/計數(shù)模式選擇位,通過該位選擇工作模式,當(dāng)C/T=0時,工作模式為定時模式,即此時脈沖周期等于機器周期,計數(shù)器對機器周期計數(shù),通過計數(shù)值就可以得到計數(shù)的時間;而當(dāng)C/T=1時,工作模式為計數(shù)模式,計數(shù)器輸入信號外部引腳,即計數(shù)器對外部輸入引腳T0(P3.4)或T1(P3.5)的外部脈沖(負(fù)跳變)計數(shù),允許的最高計數(shù)頻率位晶振頻率的1/24。
(3)M1、M0為工作方式選擇位,通過該位選擇工作方式,如下表,當(dāng)M1、M0為不同值時對應(yīng)相應(yīng)的四種工作方式:

M1M0工作方式功能
00工作方式013位計數(shù)器(TH的8位和TL的低5位)
01工作方式116位計數(shù)器
10工作方式2自動重裝8位計數(shù)器
11工作方式3T0分成兩個8位;T1停止計數(shù)

不能對TMOD采用位尋址方法,只能采用字節(jié)尋址(例TMOD=0xXX)設(shè)置定時器的工作方式。

2、定時器/計數(shù)器控制寄存器TCON

定時器/計數(shù)器控制寄存器TCON控制定時器/計數(shù)器的啟動與停止以及標(biāo)志定時器的溢出和中斷情況,對TCON既可以采用字節(jié)尋址也可以采用位尋址,當(dāng)51單片機系統(tǒng)復(fù)位時,TCON的所有位都會清零。
TCON的格式如下,高4位用于控制定時器/計數(shù)器的啟動和中斷請求,低4位控制外部中斷:

(1)TR1和TR0為運行控制位,等于0時停止定時器工作,等于1時啟動定時器工作(例啟動定時器T1工作:TR1=1);
(2)TF1和TF0為溢出中斷標(biāo)志位,定時器溢出由硬件自動置為1,CPU響應(yīng)中斷后,硬件自動清零(例TF1=0無溢出,TF1=1時溢出);
(3)IT1和IT0為外部中斷INT0、INT1的觸發(fā)方式控制位,由軟件來置1或清0,以控制外部中斷的觸發(fā)方式。(例IT1=1時,外部中斷INT1為下降沿觸發(fā),IT1=0時,外部中斷INT1為低電平觸發(fā));
(4)IE1和IE0為外部中斷的請求標(biāo)志位,當(dāng)引腳上出現(xiàn)中斷請求信號(低電平或脈沖下降沿)時,硬件自動將IEX置1,從而產(chǎn)生中斷請求標(biāo)志,而當(dāng)CPU響應(yīng)中斷時,由硬件消除(例外部中斷INT0P3.2引腳有中斷請求信號時,IE0置1,即IE0=1)。

(三)定時器/計數(shù)器的工作方式

定時器/計數(shù)器T0和T1的工作原理相同,唯一區(qū)別在于在工作方式3時,定時器/計數(shù)器T1停止計數(shù)。前面講過通過TMOD的M1、M0工作方式選擇位可選擇工作方式。

1、工作方式0

當(dāng)M1、M0為0時是工作方式0,工作方式0的計數(shù)位數(shù)為13位,由THx(x=0,1)的8位和TLx(x=0,1)的低5位(高3位未用)組成13位加1計數(shù)器,TLx(x=0,1)低5位溢出時向THx(x=0,1)進(jìn)位,THx(x=0,1)計數(shù)溢出則TCON中的溢出標(biāo)志位TFx(x=0,1)置1。

工作方式0的最大計數(shù)值(計數(shù)外部脈沖個數(shù))為213=8192,即方式0的計數(shù)范圍為1?213

2、工作方式1

當(dāng)M1、M0分別為0、1時是工作方式1,工作方式1的計數(shù)位數(shù)為16位,由THx高8位和TLx低8位構(gòu)成16位加1計數(shù)器,其控制方式與操作方式與方式0相同。

工作方式1的最大計數(shù)值(計數(shù)外部脈沖個數(shù))為216=65536,即方式1的計數(shù)范圍為1?216

3、工作方式2

當(dāng)M1、M0分別為1、0時是工作方式2,它是自動重裝初值的8位計數(shù)方式,當(dāng)TLx計數(shù)溢出時,除了使TCON中的溢出標(biāo)志位TFx置1,還自動打開TLx與THx之間的三態(tài)門,使THx內(nèi)的內(nèi)容重新轉(zhuǎn)入TLx中,并繼續(xù)進(jìn)行計數(shù)操作,通過這個操作可以省去用戶重新裝入計數(shù)初值的程序從而簡化定時初值的計算方法,精確地確定定時時間。

工作方式2的最大計數(shù)值(計數(shù)外部脈沖個數(shù))為28=256,即方式2的計數(shù)范圍為1?28

4、工作方式3

方式3只適用于定時器/計數(shù)器T0,定時器T1工作于方式3相當(dāng)于TR1=0,停止計數(shù)(可用于串行口波特率產(chǎn)生器),當(dāng)M1、M0分別為1、1時是工作方式3,工作方式3的計數(shù)位數(shù)為8位,將T0分為兩個獨立的8位計數(shù)器TL0和TH0,TL0使用T0的狀態(tài)控制位C/T、GATE、TR0、TF0,其既可以當(dāng)計數(shù)使用也可以當(dāng)定時使用,即T0的各控制位和引腳信號歸TL0使用,而TH0由于只能對機器周期計數(shù),不能作為外部計數(shù)模式,所以則只能作為定時器使用。

工作方式3的最大計數(shù)值(計數(shù)外部脈沖個數(shù))為28=256,即方式3的計數(shù)范圍為1?28
一般情況下,當(dāng)T1用作串行口的波特率發(fā)生器時,T0才工作在方式3。T0處于工作方式3時,T1可定為方式0、方式1和方式2,用來作為串行口的波特率發(fā)生器,或不需要中斷的場合。

(四)預(yù)置定時器/計數(shù)器的初值

1、預(yù)置計數(shù)器初值

根據(jù)不同工作方式下的其最大計數(shù)值,可得到最大計數(shù)值M分別是:方式0:8192;方式1:65536;方式2:256;方式3:256。
計數(shù)脈沖由外部T0或T1引入,對外部脈沖進(jìn)行計數(shù),則初值X=M-要求的計數(shù)值=[要求的計數(shù)值]求補。

2、預(yù)置定時器初值

定時器模式下,計數(shù)器由系統(tǒng)時鐘頻率fosc經(jīng)12分頻后計數(shù),則初值X=M-要求的定時值/(fosc/12)。

例、設(shè)單片機的晶振頻率為fosc=12MHz,在定時器模式下:
(1)一個機器周期是多少微秒?
(2)定時器處于不同工作方式時,最大定時時間是分別是多少?
(1)因為fosc=12MHz,所以一個機器周期為1μs
(2)處于方式0時,最大定時時間為8192×1μs=8192μs
處于方式1時,最大定時時間為65536×1μs=65536μs
處于方式2時,最大定時時間為
256×1μs=256μs
處于方式3時,最大定時時間為
256×1μs=256μs。

例、設(shè)單片機的晶振頻率f=12MHz,應(yīng)用T0定時器的方式0,定時時間為2ms,求定時器T0的初值以及TH0、TL0的值。
X=213-2×10-3×12×106/12=8192-2000=6192=1830H=1100000110000B,
將T0的初值低5位送至TL0,則TL0=10000B=10H;
高8位送至TH0,則TH0=11000001B=0C1H。

(五)四類定時/計數(shù)方法

定時/計數(shù)方法分為四類:
1、軟件延時;
2、硬件定時;
3、硬件定時+軟件計數(shù);
4、硬件定時+硬件計數(shù);

(六)定時器/計數(shù)器的初始化過程

1、第一步
選擇定時器/計數(shù)器的工作方式,即通過TMOD中的工作方式選擇位M1和M0賦值實現(xiàn)選擇。
2、第二步
預(yù)置定時/計數(shù)初值,根據(jù)定時時間/計數(shù)次數(shù)將所計算的初值寫入TH0、TL0或TH1、TL1中。
3、第三步
開放定時器/計數(shù)器的中斷,設(shè)置中斷優(yōu)先級,通過給IE寄存器中相關(guān)位賦值實現(xiàn)。
4、第四步
啟動定時器/計數(shù)器,通過TCON中的TR1=1或TR0=1實現(xiàn)。

三、Proteus仿真軟件畫原理圖

原理圖如下:

四、Keil編程軟件編寫程序

首先和之前的外部中斷實驗一樣,定義數(shù)組變量,將數(shù)組Tab定義為unsigned char code Tab[],定義一個無符號字符型(自動變量)數(shù)組Tab[],且該變量位于ROM中,根據(jù)共陽極數(shù)碼管段碼,即unsigned char code Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};。
然后延時函數(shù)沒必要說,這里簡單略過,依然是延時1s:

void delay(unsigned int x) {unsigned int i,j;for(i=0;i<x;i++)for(j=0;j<125;j++); }delay(1000);

選擇定時器/計數(shù)器的工作方式,通過TMOD中的工作方式選擇位M1和M0賦值實現(xiàn)選擇,這里使用定時器T0,工作方式1,即TMOD=0x01=0000 0001,然后啟動定時器0,即TR0=1。

設(shè)置一個無限循環(huán),while(1){},首先預(yù)置計數(shù)初值,因為采用定時器工作方式且晶振為12MHz,即fosc=12MHz,所以一個機器周期為12/fosc=1μs,若要計數(shù)1ms,則需計數(shù)1000次。
算出初值65536-1000,由于選擇的是定時器T0且工作方式1,列出計算TH0和TL0的式子:

TH0=(65536-1000)/256; TL0=(65536-1000)%256;

這里初值/256是取其商高8位寫入TH0中,%256取其余數(shù)低8位寫入TL0中,寫入后T0從65536-1000=64536開始加1,加了1000次,就會溢出產(chǎn)生中斷。然后設(shè)置一個do……while循環(huán)等待定時時間完成,即do{}while(!TF0),循環(huán)體內(nèi)為空,括號里的!TF0相當(dāng)于為0,即直到TF0等于0時定時時間結(jié)束。
之前還要定義一個變量n來記錄顯示數(shù)字的個數(shù),即unsigned char n=0;,另外還有一個if……else語句來判斷0-9共十個數(shù)字是否都顯示完,如下:

if(n>=9) n=0; elsen++;

以下是整個程序代碼:

#include<reg51.h> unsigned char code Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共陽極數(shù)碼管段碼,定義一個無符號字符型(自動變量)數(shù)組Tab[],且該變量位于ROM中 void delay(unsigned int x)//延時函數(shù) {unsigned int i,j;for(i=0;i<x;i++)for(j=0;j<125;j++); } void main() {unsigned char n=0; //記錄顯示數(shù)字的個數(shù)P2=Tab[0];TMOD=0x01; //TMOD=0x01=0000 0001,即對應(yīng)定時器T0,工作方式1TR0=1; //啟動定時器T0while(1) //無限循環(huán){TH0=(65536-1000)/256; //預(yù)置計數(shù)初值,65536-1000是初始值,/256取其高8位寫入TH0中,%256取其低8位寫入TL0中//寫入后,T0從64536開始加1,加了1000次,就會溢出產(chǎn)生中斷TL0=(65536-1000)%256; do{}while(!TF0); //等待定時時間完成if(n>=9) //判斷0-9十個數(shù)字是否都顯示完n=0;elsen++;P2=Tab[n]; //依次取數(shù)組Tab內(nèi)的元素,即取數(shù)組中數(shù)字對應(yīng)的段碼delay(1000); //調(diào)用延時函數(shù),參數(shù)為1000,即1s} }

五、實驗結(jié)果

(一)仿真結(jié)果

仿真結(jié)果如下,數(shù)碼管依次顯示0-9無限循環(huán):



……,依次到數(shù)字9:

(二)連接電路

P1.0和P3.5連接,P2.0-P2.7排線與數(shù)碼管連接,如下圖:

(三)燒錄并觀察實驗現(xiàn)象

燒錄可執(zhí)行文件,觀察現(xiàn)象,數(shù)碼管依次顯示0-9無限循環(huán):



……,依次到數(shù)字9:

結(jié)語

感謝您的閱讀和支持,若程序代碼和其它方面有不當(dāng)之處,當(dāng)指出!您的指出和建議能給作者帶來很大的動力!!!

超強干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生

總結(jié)

以上是生活随笔為你收集整理的单片机原理及其应用——单片机定时器中断实验(八段数码管依次显示0~9数字)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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