版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
項(xiàng)目四定時(shí)器與數(shù)碼管
動(dòng)態(tài)顯示項(xiàng)目描述
定時(shí)器用來實(shí)現(xiàn)精確定時(shí),是單片機(jī)系統(tǒng)的一個(gè)重點(diǎn),應(yīng)用十分廣泛,大家一定要完全理解并熟練掌握定時(shí)器的應(yīng)用。本項(xiàng)目利用定時(shí)器設(shè)計(jì)一個(gè)實(shí)時(shí)時(shí)鐘,利用六位數(shù)碼管分別顯示時(shí)鐘的時(shí)、分、秒等信息。定時(shí)器4.1.1定時(shí)器的初步認(rèn)識(shí)
學(xué)習(xí)定時(shí)器之前,我們先來了解單片機(jī)時(shí)序中的幾個(gè)概念:時(shí)鐘周期、機(jī)器周期和指令周期。
時(shí)鐘周期:時(shí)鐘周期T是時(shí)序中最小的時(shí)間單位,具體計(jì)算的方法就是1/時(shí)鐘源頻率,我們KST-51單片機(jī)開發(fā)板上用的晶振是11.0592M,那么對(duì)于我們這個(gè)單片機(jī)系統(tǒng)來說,時(shí)鐘周期=1/11059200秒。定時(shí)器
機(jī)器周期:單片機(jī)完成一個(gè)操作的最短時(shí)間。機(jī)器周期主要針對(duì)匯編語言而言,在匯編語言下程序的每一條語句執(zhí)行所使用的時(shí)間都是機(jī)器周期的整數(shù)倍,而且語句占用的時(shí)間是可以計(jì)算出來的。51單片機(jī)系列,在其標(biāo)準(zhǔn)架構(gòu)下一個(gè)機(jī)器周期是12個(gè)時(shí)鐘周期,也就是12/11059200秒。定時(shí)器指令周期:執(zhí)行一條指令(這里指匯編語言指令)所需要的時(shí)間稱為指令周期,指令周期是時(shí)序中的最大單位。由于機(jī)器執(zhí)行不同指令所需時(shí)間不同,因此不同指令所包含的機(jī)器周期數(shù)也不盡相同。51系列單片機(jī)的指令可能包括1~4個(gè)不等的機(jī)器周期。通常,包含一個(gè)機(jī)器周期的指令稱為單周期指令,包含兩個(gè)機(jī)器周期的指令稱為雙周期指令,等等。指令所包含的機(jī)器周期數(shù)決定了指令的運(yùn)算速度,機(jī)器周期數(shù)越少的指令,其執(zhí)行速度越快。定時(shí)器
定時(shí)器用來進(jìn)行定時(shí)。定時(shí)器內(nèi)部有一個(gè)寄存器,開始計(jì)數(shù)后,這個(gè)寄存器的值每經(jīng)過一個(gè)機(jī)器周期(也就是12/11059200秒)就會(huì)自動(dòng)加1。加到一定的值時(shí)會(huì)自動(dòng)溢出,后面會(huì)講到定時(shí)器有多種工作模式,分別使用不同的位寬(指使用多少個(gè)二進(jìn)制位),假如是16位的定時(shí)器,也就是2個(gè)字節(jié),最大值就是65535,那么加到65535后,再加1就算溢出,對(duì)于51單片機(jī)來說,溢出后,這個(gè)值會(huì)直接變成0。從某一個(gè)初始值開始,經(jīng)過確定的時(shí)間后溢出,這個(gè)過程就是定時(shí)的含義。定時(shí)器4.1.2定時(shí)器的寄存器標(biāo)準(zhǔn)的51單片機(jī)內(nèi)部有T0和T1這兩個(gè)定時(shí)器。(1)定時(shí)值存儲(chǔ)寄存器下表的寄存器是存儲(chǔ)定時(shí)器的計(jì)數(shù)值的。TH0/TL0用于T0,TH1/TL1用于T1。先學(xué)習(xí)如何看寄存器TF1TR1TF0TR0IE1IT1IE0IT0TCON1、先分清每一位屬于哪個(gè)模塊2、查看每一位是可讀、可寫、可讀寫位的哪一種3、看每一位的具體功能以及在0或1時(shí)分別是什么狀態(tài)4、如何通過指令設(shè)置寄存器或者寄存器某一位的值5、寄存器的物理地址定時(shí)器(2)定時(shí)器控制寄存器TCON(地址0x88、可位尋址)TF0/TF1:T0/T1計(jì)數(shù)溢出標(biāo)志位??捎糜谏暾?qǐng)中斷或供CPU查詢。在進(jìn)入中斷服務(wù)程序時(shí)會(huì)自動(dòng)清零;但在查詢方式時(shí)必須軟件清零。
=1:計(jì)數(shù)溢出;=0:計(jì)數(shù)未滿。TR0/TR1:T0/T1啟停控制位。
=1:啟動(dòng)計(jì)數(shù);=0:停止計(jì)數(shù)。低四位IE1、IT1、IE0、IT0用于外部中斷,下一章再做介紹。
M1,M0:工作方式選擇位。
=00:13位定時(shí)器/計(jì)數(shù)器;
=01:16位定時(shí)器/計(jì)數(shù)器(常用);
=10:可自動(dòng)重裝的8位定時(shí)器/計(jì)數(shù)器(常用);
=11:T0分為2個(gè)8位定時(shí)器/計(jì)數(shù)器;僅適用于T0。
C/:定時(shí)方式/計(jì)數(shù)方式選擇位。
=1:選擇計(jì)數(shù)器工作方式,對(duì)T0/T1引腳輸入外部事件的負(fù)脈沖計(jì)數(shù);
=0:選擇定時(shí)器工作方式,對(duì)機(jī)器周期脈沖計(jì)數(shù)定時(shí)。GATEC/TM1M0GATEC/TM1M0T1T0定時(shí)器(3)定時(shí)器模式寄存器TMOD(地址0x89、不可位尋址)GATE:門控位,定時(shí)/計(jì)數(shù)器的啟/??捎绍浖c硬件兩者控制
=0:軟件控制,只由TCON中的啟/??刂莆籘R0/TR1控制 定時(shí)器/計(jì)數(shù)器的啟/停。
=1:硬件控制,由外部中斷請(qǐng)求信號(hào)/和TCON中 的啟/??刂莆籘R0/TR1組合狀態(tài)控制定時(shí)器/計(jì)數(shù)器的啟/停。定時(shí)器定時(shí)器定時(shí)器/計(jì)數(shù)器的4種工作方式M1M0工作方式功能描述00工作方式013位計(jì)數(shù)器01工作方式116位計(jì)數(shù)器10工作方式2自動(dòng)再裝入8位計(jì)數(shù)器11工作方式3定時(shí)器0:分成兩個(gè)8位計(jì)數(shù)器,定時(shí)器1:停止計(jì)數(shù)
MCS-51單片機(jī)的定時(shí)器/計(jì)數(shù)器共有4種工作模式,現(xiàn)以T0為例加以介紹,T1與T0的工作原理相同,但在方式3下,T1停止計(jì)數(shù)。1.工作方式0(M1M0=00,13位定時(shí)器/計(jì)數(shù)器)由TH0的全部8位和TL0的低5位(TL0的高3位未用)構(gòu)成13位加1計(jì)數(shù)器,當(dāng)TL0低5位計(jì)數(shù)滿時(shí)直接向TH0進(jìn)位,并當(dāng)全部13位計(jì)數(shù)滿溢出時(shí),溢出標(biāo)志位TF0置“1”。2.工作方式1(M1M0=01,16位定時(shí)器/計(jì)數(shù)器)由TH0和TL0構(gòu)成16位加1計(jì)數(shù)器,其他特性與工作方式0相同。定時(shí)器3.工作方式2(M1M0=10,自動(dòng)重裝計(jì)數(shù)初值的8位定時(shí)器/計(jì)數(shù)器)
16位定時(shí)器/計(jì)數(shù)器被拆成兩個(gè)8位寄存器TH0和TL0,CPU在對(duì)它們初始化時(shí)必須裝入相同的定時(shí)器/計(jì)數(shù)器初值。以TL0作計(jì)數(shù)器,而TH0作為預(yù)置寄存器。當(dāng)計(jì)數(shù)滿溢出時(shí),TF0置“1”,同時(shí)TH0將計(jì)數(shù)初值以硬件方法自動(dòng)裝入TL0。這種工作方式很適合于那些重復(fù)計(jì)數(shù)的應(yīng)用場合(如串行數(shù)據(jù)通信的波特率發(fā)生器)。定時(shí)器4、工作方式3(M1M0=11,2個(gè)8位定時(shí)器/計(jì)數(shù)器,僅適用于T0)TL0:8位定時(shí)器/計(jì)數(shù)器,使用T0原有控制資源TR0和TF0,其功能和操作與方式0或方式1完全相同。TH0:只能作為8位定時(shí)器,借用T1的控制位TR1和TF1,只能對(duì)片內(nèi)機(jī)器周期脈沖計(jì)數(shù)。在方式3模式下,定時(shí)器/計(jì)數(shù)器0可以構(gòu)成兩個(gè)定時(shí)器或者一個(gè)定時(shí)器和一個(gè)計(jì)數(shù)器。
一般,只有在T1以方式2運(yùn)行(當(dāng)波特率發(fā)生器用)時(shí),才讓T0工作于方式3下。定時(shí)器定時(shí)器例:設(shè)定定時(shí)器1為定時(shí)工作方式,要求軟件啟動(dòng)定時(shí)器1按方式2工作。定時(shí)器0為計(jì)數(shù)方式,要求由軟件啟動(dòng)定時(shí)器0,按方式1工作。怎么來實(shí)現(xiàn)這個(gè)要求呢?①控制定時(shí)器1工作在定時(shí)方式或計(jì)數(shù)方式是哪個(gè)位?
位(D6)是定時(shí)或計(jì)數(shù)功能選擇位,當(dāng)=0時(shí)定時(shí)/計(jì)數(shù)器就為定時(shí)工作方式。②設(shè)定定時(shí)器1按方式2工作。要使定時(shí)/計(jì)數(shù)器1工作在方式2,M0(D4)M1(D5)的值必須是10。③設(shè)定定時(shí)器0為計(jì)數(shù)方式。當(dāng)=1時(shí),就工作在計(jì)數(shù)器方式。④由軟件啟動(dòng)定時(shí)器0,當(dāng)門控位GATE=0時(shí),定時(shí)/計(jì)數(shù)器的啟停就由軟件控制。定時(shí)器⑤設(shè)定定時(shí)/計(jì)數(shù)器工作在方式1,使定時(shí)/計(jì)數(shù)器0工作在方式1,M0(D0)M1(D1)的值必須是01。
從上面的分析我們可以知道,只要將TMOD的各位,按規(guī)定的要求設(shè)置好后,定時(shí)器/計(jì)數(shù)器就會(huì)按我們預(yù)定的要求工作。我們分析的這個(gè)例子最后各位的情況如下: D7D6D5D4D3D2D1D0 00100101
二進(jìn)制數(shù)00100101b=十六進(jìn)制數(shù)25H。所以執(zhí)行TMOD=0x25(或者用匯編語言MOVTMOD,#25H)這條指令就可以實(shí)現(xiàn)上述要求。定時(shí)器4.1.3定時(shí)器初始化
由于定時(shí)器/計(jì)數(shù)器的功能是由軟件編程確定的,所以一般在使用前都要對(duì)其進(jìn)行初始化,初始化的步驟一般如下:(1)確定工作方式(即對(duì)TMOD賦值);(2)預(yù)置定時(shí)或計(jì)數(shù)的初值(可直接將初值寫入TH0、TL0或TH1、TL1);(3)根據(jù)需要開放定時(shí)器/計(jì)數(shù)器中斷(直接對(duì)IE位賦值)(4)啟動(dòng)定時(shí)器/計(jì)數(shù)器(若已規(guī)定用軟件啟動(dòng),則可把TR0或TR1置“1”;若已規(guī)定由外中斷引腳電平啟動(dòng),則需給外引腳加啟動(dòng)電平。)。定時(shí)器下面介紹一下確定時(shí)時(shí)/計(jì)數(shù)器初值的具體方法。在不同工作方式下計(jì)數(shù)器位數(shù)不同,最大計(jì)數(shù)值也不同?,F(xiàn)假設(shè)最大計(jì)數(shù)值為M,那么各方式下的最大值M值如下:方式0:M=213=8192方式1:M=216=65536方式2:M=28=256方式3:定時(shí)器0分成兩個(gè)8位計(jì)數(shù)器,所以兩個(gè)M均為256。
因?yàn)槎〞r(shí)器/計(jì)數(shù)器是作“加1”計(jì)數(shù),并在計(jì)數(shù)滿溢出時(shí)產(chǎn)生中斷,因此初值X可以這樣計(jì)算: X=M-計(jì)數(shù)值定時(shí)器例:選擇T1方式0用于定時(shí),在P1.1輸出周期為1ms方波,晶振
fosc=6MHz。解:根據(jù)題意,只要使P1.1每隔500us取反一次即可得到1ms的方波,因而T1的定時(shí)時(shí)間為500us,因定時(shí)時(shí)間不長,取方式1即可。則M1M0=1;因是定時(shí)器方式,所以=0;在此用軟件啟動(dòng)T1,所以GATE=0。T0不用,方式字可任意設(shè)置,只要不使其進(jìn)入方式3即可,一般取0,故TMOD=10H。計(jì)算500us定時(shí)T1初始值:
機(jī)器周期:T=12/fosc=12/(6×106)Hz=2μs設(shè)初值為X,則:(216-X)×2×10-6s=500×10-6s定時(shí)器X=216-250=65286=FF06H=1111111100000110B因此TH1=FFH,TL1=06H。初始化程序如下:TMOD=0x10; //定時(shí)器1方式1TH1=0XFF;TL1=0X06; //裝入時(shí)間常數(shù)TR1=1; //啟動(dòng)定時(shí)器定時(shí)器4.1.4定時(shí)器中斷1、中斷的基本概念
中斷的定義:所謂“中斷”,是指CPU執(zhí)行正常程序時(shí),系統(tǒng)中出現(xiàn)特殊請(qǐng)求,CPU暫時(shí)中止當(dāng)前的程序,轉(zhuǎn)去處理更緊急的事件(執(zhí)行中斷服務(wù)程序),處理完畢(中斷服務(wù)完成)后,CPU自動(dòng)返回原程序的過程。
中斷后轉(zhuǎn)向執(zhí)行的程序叫中斷服務(wù)程序或中斷處理程序。原程序被斷開的位置(地址)叫作斷點(diǎn)。
發(fā)出中斷信號(hào)的設(shè)備稱為中斷源。中斷源要求中斷服務(wù)所發(fā)出的標(biāo)志信號(hào)稱為中斷請(qǐng)示或中斷申請(qǐng)。
定時(shí)器
中斷源向CPU發(fā)出中斷申請(qǐng),CPU經(jīng)過判斷認(rèn)為滿足條件,則對(duì)中斷源作出答復(fù),這叫中斷響應(yīng)。中斷響應(yīng)后就去處理中斷源的有關(guān)請(qǐng)求,即轉(zhuǎn)去執(zhí)行中斷服務(wù)程序。2.引入中斷的主要優(yōu)點(diǎn)(1)提高CPU工作效率(2)實(shí)現(xiàn)實(shí)時(shí)處理功能(3)實(shí)現(xiàn)分時(shí)操作定時(shí)器3.STC89C52中斷源 STC89C52單片機(jī)共有6個(gè)中斷源。它們分別是:2個(gè)外部中斷,4個(gè)片內(nèi)中斷,即定時(shí)器T0的溢出中斷、定時(shí)器T1的溢出中斷、定時(shí)器T2的溢出中斷和串行口中斷;這6個(gè)中斷源,可以根據(jù)需要隨時(shí)向CPU發(fā)出中斷申請(qǐng)。(1)外部中斷源
外部中斷是由外部信號(hào)引起的,請(qǐng)求有兩種信號(hào)觸發(fā)方式,即低電平觸發(fā)和下降沿觸發(fā)。外部中斷請(qǐng)求的這兩種信號(hào)方式,可通過設(shè)置寄存器TCON中的IT0和IT1位狀態(tài)的值來設(shè)定。定時(shí)器控制寄存器TCON各位定義如下表所示。定時(shí)器IE0/IE1:外部中斷申請(qǐng)標(biāo)志位(由硬件自動(dòng)置位,中斷響
應(yīng)后轉(zhuǎn)向中斷服務(wù)程序時(shí),由硬件自動(dòng)清0)
=0:沒有外部中斷申請(qǐng);
=1:有外部中斷申請(qǐng)。IT0/IT1:外部中斷請(qǐng)求的觸發(fā)方式控制位(可由用戶通過軟
件設(shè)置)。 =0:在端申請(qǐng)中斷的信號(hào)低電平有效; =1:在端申請(qǐng)中斷的信號(hào)負(fù)跳變有效。定時(shí)器(2)定時(shí)器溢出中斷源
定時(shí)/計(jì)數(shù)器中斷由單片機(jī)內(nèi)部定時(shí)器產(chǎn)生,屬于內(nèi)部中斷。STC89C52內(nèi)部有三個(gè)16位的定時(shí)器/計(jì)數(shù)器T0、T1和T2,最常用的是T0和T1,它們以計(jì)數(shù)的方法來實(shí)現(xiàn)定時(shí)或計(jì)數(shù)的。當(dāng)它作為定時(shí)器使用時(shí),其計(jì)數(shù)信號(hào)來自于CPU內(nèi)部的機(jī)器周期脈沖,當(dāng)它作為計(jì)數(shù)器使用時(shí),其計(jì)數(shù)信號(hào)來自于CPU的T0(P3.4)、T1(P3.5)引腳。
在啟動(dòng)定時(shí)/計(jì)數(shù)器后,每來一個(gè)機(jī)器周期或在對(duì)應(yīng)的引腳上每檢測(cè)到一個(gè)脈沖信號(hào)時(shí),定時(shí)/計(jì)數(shù)器就加1一次,當(dāng)計(jì)數(shù)器的值從全1變?yōu)槿?時(shí),就去置位一個(gè)溢出標(biāo)志位,CPU查詢到后就知道有定時(shí)/計(jì)數(shù)器的溢出中斷的申請(qǐng)。定時(shí)器(3)串行中斷源
串行口中斷源分為串行口發(fā)送中斷和串行口接收中斷兩種。串行中斷是為串行數(shù)據(jù)傳送的需要而設(shè)置的。每當(dāng)串行口發(fā)送完一組串行數(shù)據(jù)時(shí),就會(huì)使串行口控制寄存器SCON中的串行發(fā)送中斷標(biāo)志位TI置1,每當(dāng)串行口接收完一組串行數(shù)據(jù)時(shí),就會(huì)使串行接收中斷標(biāo)志位RI置1,作為串行口中斷請(qǐng)求標(biāo)志,產(chǎn)生一個(gè)中斷請(qǐng)求。串行口控制寄存器SCON的內(nèi)容如下表所示。SCOND7D6D5D4D3D2D1D0位符號(hào)SM0SM1SM2RENTB8RB8TIRI位地址9FH9EH9DH9CH9BH9AH99H98H定時(shí)器其中與中斷請(qǐng)求標(biāo)志有關(guān)的位如下:①TI:串行口發(fā)送中斷請(qǐng)求標(biāo)志位
當(dāng)發(fā)送完一幀串行數(shù)據(jù)后,由硬件置“1”;在轉(zhuǎn)向中斷服務(wù)程序后,需要用軟件對(duì)該位清“0”。②RI:串行口接收中斷請(qǐng)求標(biāo)志位
當(dāng)接收完一幀串行數(shù)據(jù)后,由硬件置“1”;在轉(zhuǎn)向中斷服務(wù)程序后,需要用軟件對(duì)該位清“0”。串行中斷請(qǐng)求由TI和RI的邏輯或得到。就是說,無論是發(fā)送標(biāo)志還是接收標(biāo)志,都會(huì)產(chǎn)生串行中斷請(qǐng)求。4.中斷控制51系列單片機(jī)中斷系統(tǒng)的硬件結(jié)構(gòu)如下圖所示定時(shí)器定時(shí)器對(duì)中斷信號(hào)進(jìn)行鎖存、屏蔽、優(yōu)先級(jí)控制是通過設(shè)置一些特殊功能寄存器,如寄存器TCON、SCON、IE和IP來進(jìn)行的。(1)中斷允許控制寄存器IE(0A8H)
EAESET1EX1ET0EX0EX0/EX1/ET0/ET1/ES位:分別是
,T0/T1,串行口的中斷允許控制位。
=0:禁止中斷;
=1:允許中斷。EA:總的中斷允許控制位(總開關(guān)):
=0:禁止全部中斷;
=1:允許中斷。(4)中斷優(yōu)先級(jí)控制寄存器IP(0B8H)
51單片機(jī)有兩個(gè)中斷優(yōu)先級(jí),即高優(yōu)先級(jí)和低優(yōu)先級(jí),每個(gè)中斷源都可設(shè)置為高或低中斷優(yōu)先級(jí),以便CPU對(duì)所有的中斷實(shí)現(xiàn)兩級(jí)中斷嵌套。51單片機(jī)內(nèi)部中斷系統(tǒng)對(duì)各中斷源的中斷優(yōu)先級(jí)有一個(gè)統(tǒng)一的規(guī)定,稱為自然優(yōu)先級(jí)。如下表所示。中斷源入口地址中斷號(hào)優(yōu)先級(jí)別說
明外部中斷00003H0高低來自P3.2引腳(INT0)的外部中斷請(qǐng)求定時(shí)/計(jì)數(shù)器0000BH1定時(shí)/計(jì)數(shù)器T0溢出中斷請(qǐng)求外部中斷10013H2來自P3.3引腳(INT1)的外部中斷請(qǐng)求定時(shí)/計(jì)數(shù)器1001BH3定時(shí)/計(jì)數(shù)器T1溢出中斷請(qǐng)求串行口0023H4串行口完成一幀數(shù)據(jù)的發(fā)送或接受請(qǐng)求定時(shí)/計(jì)數(shù)器2002BH5定時(shí)/計(jì)數(shù)器T2溢出中斷請(qǐng)求↓
中斷優(yōu)先級(jí)控制寄存器IP(0B8H)
PSPT1
PX1
PT0PX0PX0/PX1:優(yōu)先級(jí)控制位:
=0:屬低優(yōu)先級(jí);
=1:屬高優(yōu)先級(jí)。PT0/PT1:T0/T1中斷優(yōu)先級(jí)控制位:
=0:屬低優(yōu)先級(jí);
=1:屬高優(yōu)先級(jí)。PS:串行口中斷優(yōu)先級(jí)控制位:
=0:屬低優(yōu)先級(jí);
=1:屬高優(yōu)先級(jí)。定時(shí)器中斷優(yōu)先級(jí)處理原則:對(duì)同時(shí)發(fā)生多個(gè)中斷申請(qǐng)時(shí):不同優(yōu)先級(jí)的中斷同時(shí)申請(qǐng):先高后低相同優(yōu)先級(jí)的中斷同時(shí)申請(qǐng):按序執(zhí)行正處理低優(yōu)先級(jí)中斷又接到高級(jí)別中斷:高打斷低
正處理高優(yōu)先級(jí)中斷又接到低級(jí)別中斷:高不理低定時(shí)器定時(shí)器5.C51中的中斷函數(shù)
在C51中規(guī)定,中斷服務(wù)程序中,必須指定對(duì)應(yīng)的中斷號(hào),用中斷號(hào)確定該中斷服務(wù)程序是哪個(gè)中斷所對(duì)應(yīng)的中斷服務(wù)程序。(1)中斷服務(wù)程序格式為:void
函數(shù)名(參數(shù))interruptnusingm{
函數(shù)體語句;}
其中:interrupt后面的n是中斷號(hào);關(guān)鍵字using后面的m是所選擇的寄存器組,取值范圍是0-3,定義中斷函數(shù)時(shí),using是一個(gè)選項(xiàng),可以省略不用。定時(shí)器(2)使用中斷函數(shù)時(shí)要注意的問題①在設(shè)計(jì)中斷時(shí),要注意的是哪些功能應(yīng)該放在中斷程序中,哪些功能應(yīng)該放在主程序中。②中斷函數(shù)不能傳遞參數(shù)。③中斷函數(shù)沒有返回值。④中斷函數(shù)調(diào)用其他函數(shù),則要保證使用相同的寄存器組,否則出錯(cuò)。⑤中斷函數(shù)使用浮點(diǎn)運(yùn)算要保存浮點(diǎn)寄存器的狀態(tài)。定時(shí)器4.1.5定時(shí)器的應(yīng)用
利用定時(shí)器T0中斷控制KST-51開發(fā)板上的8個(gè)LED燈每秒鐘閃爍一次。①確定TMOD寄存器值
設(shè)置T0工作在定時(shí)模式,工作方式1,起停由TR0控制,由TMOD寄存器結(jié)構(gòu)可知,其初值為0x01;②確定計(jì)數(shù)初值
開發(fā)板上使用的晶振為11.0592MHz,最長定時(shí)時(shí)間是工作在方式1下,其初值為0時(shí),此時(shí)定時(shí)時(shí)間為(216-0)×12/(11.0592×106)=0.0711s,因此,單純用定時(shí)器無法實(shí)現(xiàn)1s的定時(shí)。定時(shí)器
一般采用軟件計(jì)數(shù)器進(jìn)行設(shè)計(jì),設(shè)計(jì)思想為:定義一個(gè)軟件計(jì)數(shù)器變量cnt,初始化為0,先用T0實(shí)現(xiàn)一個(gè)50ms的定時(shí)器,定時(shí)時(shí)間到之后并不是立即閃爍變換(取反P0),而是將計(jì)數(shù)器cnt的值加1,如果軟件計(jì)數(shù)器cnt到了20,再取反P0,并清除軟件計(jì)數(shù)器中的值,否則直接返回,這樣,20次定時(shí)中斷后才取反一次P0,定時(shí)時(shí)間為20×50=1000ms=1s。因此,定時(shí)初值可通過如下公式計(jì)算:
計(jì)算可得,初值X=19456=0x4C00,可得,TH0=4C,TL0=00。定時(shí)器③確定IE寄存器的值 IE寄存器中與定時(shí)器T0中斷相關(guān)的位有兩個(gè),中斷總開關(guān)EA,定時(shí)器T0中斷允許控制位ET0,若要單片機(jī)能相應(yīng)T0中斷,這兩個(gè)位都應(yīng)為1.④源程序編寫#include<reg52.h>sbitADDR0=P1^0;sbitADDR1=P1^1;sbitADDR2=P1^2;sbitADDR3=P1^3;sbitENLED=P1^4;unsignedcharcnt=0;//定義一個(gè)計(jì)數(shù)變量,記錄T0溢出次數(shù)定時(shí)器voidmain(){ENLED=0;ADDR3=1;ADDR2=1;ADDR1=1;ADDR0=0;TMOD=0x01;//設(shè)置T0為模式1TH0=0x4C;//為T0賦初值0xB800TL0=0x00;EA=1;ET0=1;TR0=1;//啟動(dòng)T0while(1);}voidclock()interrupt1{ cnt++; TH0=0x4C; TL0=0x00; if(cnt==20) { P0=~P0; cnt=0; }}
將上述程序編譯一下,并下載到單片機(jī)中,觀察運(yùn)行結(jié)果并分析。數(shù)碼管動(dòng)態(tài)顯示4.2.1動(dòng)態(tài)顯示的基本原理
多個(gè)數(shù)碼管顯示數(shù)字的時(shí)候,我們實(shí)際上是輪流點(diǎn)亮數(shù)碼管(一個(gè)時(shí)刻內(nèi)只有一個(gè)數(shù)碼管是亮的),利用人眼的視覺暫留現(xiàn)象(也叫余輝效應(yīng)),就可以做到看起來是所有數(shù)碼管都同時(shí)亮了,這就是動(dòng)態(tài)顯示,也叫做動(dòng)態(tài)掃描。
例如:有2個(gè)數(shù)碼管,我們要顯示“12”這個(gè)數(shù)字,先讓高位的位選三極管導(dǎo)通,然后控制段選讓其顯示“1”,延時(shí)一定時(shí)間后再讓低位的位選三極管導(dǎo)通,然后控制段選讓其顯示“2”。把這個(gè)流程以一定的速度循環(huán)運(yùn)行就可以讓數(shù)碼管顯示出“12”,由于交替速度非常快,人眼識(shí)別到的就是“12”這兩位數(shù)字同時(shí)亮了。數(shù)碼管動(dòng)態(tài)顯示
那么要多長時(shí)間完成一次全部數(shù)碼管的掃描呢(很明顯:整體掃描時(shí)間=單個(gè)數(shù)碼管點(diǎn)亮?xí)r間*數(shù)碼管個(gè)數(shù))?答案是:10ms以內(nèi)。只要刷新率大于100Hz,即刷新時(shí)間小于10ms,就可以做到無閃爍,這是動(dòng)態(tài)掃描的硬性指標(biāo)。有最小值的限制嗎?理論上沒有,但實(shí)際上做到更快的刷新卻沒有任何進(jìn)步的意義了,因?yàn)橐呀?jīng)無閃爍了,再快也還是無閃爍,只是徒然增加CPU的負(fù)荷而已(因?yàn)?秒內(nèi)要執(zhí)行更多次的掃描程序)。所以,通常我們?cè)O(shè)計(jì)程序的時(shí)候,都是取一個(gè)接近10ms,又比較規(guī)整的值就行了。數(shù)碼管動(dòng)態(tài)顯示4.2.2數(shù)碼管動(dòng)態(tài)顯示應(yīng)用
利用定時(shí)中斷設(shè)計(jì)一個(gè)電子時(shí)鐘并通過6位數(shù)碼管顯示時(shí)、分、秒。①LED數(shù)碼管動(dòng)態(tài)顯示驅(qū)動(dòng)方式
動(dòng)態(tài)驅(qū)動(dòng)是將所有數(shù)碼管的8個(gè)顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個(gè)數(shù)碼管的公共極COM增加位選通控制電路,位選通由各自獨(dú)立的I/O線控制,當(dāng)單片機(jī)輸出字形碼時(shí),所有數(shù)碼管都接收到相同的字形碼,但究竟是哪個(gè)數(shù)碼管會(huì)顯示出字形,取決于單片機(jī)對(duì)位選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會(huì)亮。通過分時(shí)輪流控制各個(gè)數(shù)碼管的的COM端,就使各個(gè)數(shù)碼管輪流受控顯示,這就是動(dòng)態(tài)驅(qū)動(dòng)。動(dòng)態(tài)顯示方式驅(qū)動(dòng)電路數(shù)碼管動(dòng)態(tài)顯示
在輪流顯示過程中,每位數(shù)碼管的點(diǎn)亮?xí)r間為1~2ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實(shí)際上各位數(shù)碼管并非同時(shí)點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會(huì)有閃爍感,動(dòng)態(tài)顯示的效果和靜態(tài)顯示是一樣的,但動(dòng)態(tài)顯示更能夠節(jié)省大量的I/O端口,而且功耗更低。數(shù)碼管動(dòng)態(tài)顯示②60進(jìn)制計(jì)數(shù)程序設(shè)計(jì)說明1)一位計(jì)數(shù)方法:unsignedchartime=0//定義變量time為計(jì)數(shù)值,初值為0voidcalc()//計(jì)數(shù)程序{time[0]++;//計(jì)數(shù)值加1if(time[0]>59)//判斷計(jì)數(shù)是否到59time[0]=0;//到59,則計(jì)數(shù)從0重新開始}voidconvert()//計(jì)數(shù)轉(zhuǎn)換程序{ display_data[0]=time/10;//對(duì)計(jì)數(shù)值取整得到計(jì)數(shù)的十位 display_data[1]=time%10;//對(duì)計(jì)數(shù)值求余得到計(jì)數(shù)的個(gè)位}數(shù)碼管動(dòng)態(tài)顯示2)分別計(jì)數(shù)方法inttime[]={0,0}//time[0]用于個(gè)位計(jì)數(shù),time[1]用于存放十位計(jì)數(shù)voidcalc()//計(jì)算程序{ time[0]++;//個(gè)位計(jì)數(shù), if(time[0]>9)//判斷是否計(jì)數(shù)到9 { time[0]=0;//若計(jì)數(shù)到9,則十位加1,個(gè)位重新從0開始 time[1]++; iftime[1]>5;//判斷十位是否計(jì)數(shù)到5 { time[1]=0//若十位計(jì)數(shù)到5,則計(jì)數(shù)重新開始 } }}數(shù)碼管動(dòng)態(tài)顯示4.2.3源程序編寫#include<reg52.h>#defineucharunsignedcharsbitADDR0=P1^0;sbitADDR1=P1^1;sbitADDR2=P1^2;sbitADDR3=P1^3;
sbitENLED=P1^4;ucharcnt=0;//定義一個(gè)計(jì)數(shù)變量,記錄T0溢出次數(shù)ucharsec=0,min=0,hour=0;unsignedcharcodeLedChar[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報(bào)參考:教育家精神引領(lǐng)高校思政課教師職業(yè)素養(yǎng)評(píng)價(jià)體系建構(gòu)研究
- 二零二五版鋁合金建筑模板采購協(xié)議書4篇
- 商場內(nèi)品牌專賣店裝修許可協(xié)議(2025年)2篇
- 2025年度苗木種植與林業(yè)產(chǎn)業(yè)發(fā)展合作合同4篇
- 二手房合作投資合同模板2024版B版
- 二零二五年度人工智能教育培訓(xùn)合同補(bǔ)充協(xié)議6篇
- 二零二五年度旅行社與航空公司合作協(xié)議書3篇
- 2025年度品牌跨界合作與品牌授權(quán)合作協(xié)議4篇
- 二零二五版?zhèn)€人貸款居間中介服務(wù)協(xié)議書6篇
- 2025年度個(gè)人房產(chǎn)抵押借款合同規(guī)范文本8篇
- 【寒假預(yù)習(xí)】專題04 閱讀理解 20篇 集訓(xùn)-2025年人教版(PEP)六年級(jí)英語下冊(cè)寒假提前學(xué)(含答案)
- 2024年智能監(jiān)獄安防監(jiān)控工程合同3篇
- 2024年度窯爐施工協(xié)議詳例細(xì)則版B版
- 幼兒園籃球課培訓(xùn)
- 【企業(yè)盈利能力探析的國內(nèi)外文獻(xiàn)綜述2400字】
- 統(tǒng)編版(2024新版)七年級(jí)《道德與法治》上冊(cè)第一單元《少年有夢(mèng)》單元測(cè)試卷(含答案)
- 100道20以內(nèi)的口算題共20份
- 高三完形填空專項(xiàng)訓(xùn)練單選(部分答案)
- 護(hù)理查房高鉀血癥
- 項(xiàng)目監(jiān)理策劃方案匯報(bào)
- 《職業(yè)培訓(xùn)師的培訓(xùn)》課件
評(píng)論
0/150
提交評(píng)論