單片機(jī)精確延時(shí)計(jì)算和中斷定時(shí)_第1頁(yè)
單片機(jī)精確延時(shí)計(jì)算和中斷定時(shí)_第2頁(yè)
單片機(jī)精確延時(shí)計(jì)算和中斷定時(shí)_第3頁(yè)
單片機(jī)精確延時(shí)計(jì)算和中斷定時(shí)_第4頁(yè)
單片機(jī)精確延時(shí)計(jì)算和中斷定時(shí)_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

-.z.單片機(jī)準(zhǔn)確延時(shí)計(jì)算和定時(shí)中斷一.延時(shí)1.10ms延時(shí)程序〔for循環(huán)嵌套〕*********************************************************************文件名稱:voiddelay_10ms()功能:10ms延時(shí)參數(shù):?jiǎn)纹瑱C(jī)晶振12MHz*********************************************************************voiddelay_10ms(){unsignedinti,j;for(i=0;i<10;i++){for(j=0;j<124;j++);}}i和j定義為int整型時(shí),for循環(huán)執(zhí)行時(shí)間為8個(gè)機(jī)器周期,當(dāng)i和j定義為char字符型時(shí),for循環(huán)執(zhí)行時(shí)間3個(gè)機(jī)器周期。";〞一個(gè)機(jī)器周期,每次調(diào)用for循環(huán)2個(gè)機(jī)器周期。則執(zhí)行本段延時(shí)程序是內(nèi)循環(huán)時(shí)間t1=8*124+3個(gè)機(jī)器周期,其中"8〞執(zhí)行for循環(huán)指令時(shí)間;"124〞為for循環(huán)次數(shù);"3〞為每次調(diào)用for循環(huán)指令的時(shí)間。外循環(huán)t2=t1*10+8*10+3其中"10〞為for循環(huán)次數(shù);"8〞為一次for循環(huán)指令調(diào)用和執(zhí)行時(shí)間;"10〞為調(diào)用for循環(huán)次數(shù),3為調(diào)用for循環(huán)指令時(shí)間。所以本程序延時(shí)t=〔〔8*124〕+3〕*10+8*10+3=10033=10.033ms≈10ms。注意:變量為整型時(shí),每次調(diào)用for循環(huán)需要3個(gè)機(jī)器周期的調(diào)用時(shí)間,執(zhí)行for循環(huán)判斷需要8個(gè)機(jī)器周期的執(zhí)行時(shí)間;字符型變量時(shí),每次調(diào)用for循環(huán)需要2個(gè)機(jī)器周期的調(diào)用時(shí)間,執(zhí)行for循環(huán)判斷需要3個(gè)機(jī)器周期的執(zhí)行時(shí)間。程序運(yùn)行到第一個(gè)斷點(diǎn)所用時(shí)間0.00038900s,運(yùn)行到第二個(gè)斷點(diǎn)所用時(shí)間為0.01042800s,則執(zhí)行delay_10ms()函數(shù)所用時(shí)間為0.010428-0.000389=0.010039s=10.039ms≈10ms。由于斷點(diǎn)的原因,執(zhí)行P0=0*ff;和P0=0*fe;指令也花費(fèi)了時(shí)間所以這里時(shí)間是10.039ms而不是上面計(jì)算出的10.033ms。2.10μs短暫延時(shí)*********************************************************************文件名稱:voiddelay10μs()功能:10μs延時(shí)參數(shù):?jiǎn)纹瑱C(jī)晶振12MHz,機(jī)器周期1μs*********************************************************************voiddelay10μs(){_NOP_();_NOP_();_NOP_();_NOP_();_NOP_();_NOP_();}函數(shù)中共用了6個(gè)_NOP_()語(yǔ)句,每個(gè)語(yǔ)句執(zhí)行時(shí)間為1μs。主函數(shù)調(diào)用delay10μs()時(shí),先執(zhí)行一個(gè)LCALL指令〔2μs〕,然后執(zhí)行個(gè)_NOP_()語(yǔ)句〔6μs〕,最后執(zhí)行了一個(gè)RET指令〔2μs),所以執(zhí)行上述函數(shù)時(shí)共需要10μs??梢园堰@一函數(shù)當(dāng)作根本延時(shí)函數(shù),在其他函數(shù)中調(diào)用,即嵌套調(diào)用,以實(shí)現(xiàn)較長(zhǎng)時(shí)間的延時(shí);但需要注意,如在delay40μs()中直接調(diào)用4次delay10μs()函數(shù),得到的延時(shí)時(shí)間將是42μs,而不40μs。這是因?yàn)閳?zhí)行delay40μs()時(shí),先執(zhí)行了一次LCALL指令〔2μs),然后開(kāi)場(chǎng)執(zhí)行第一個(gè)delay10μs(),執(zhí)行完最后一個(gè)delay10μs()時(shí),直接返回到主程序。依此類推,如果是兩層嵌套調(diào)用,如在delay80μs()中兩次調(diào)用delay40μs(),則也要先執(zhí)行一次LCALL指令〔2μs〕,然后執(zhí)行兩次delay40μs()函數(shù)〔84μs〕,所以,實(shí)際延時(shí)時(shí)間為86μs。簡(jiǎn)言之,只有最內(nèi)層的函數(shù)執(zhí)行RET指令。該指令直接返回到上級(jí)函數(shù)或主函數(shù)。如在delay80μs()中直接調(diào)用8次delay10μs(),此時(shí)的延時(shí)時(shí)間為82μs。通過(guò)修改根本延時(shí)函數(shù)和適當(dāng)?shù)慕M合調(diào)用,上述方法可以實(shí)現(xiàn)不同時(shí)間的延時(shí)。二.定時(shí)中斷:1.定時(shí)器/計(jì)數(shù)器:8051單片機(jī)有2個(gè)16為定時(shí)器/計(jì)數(shù)器〔8052有3個(gè)〕,它可設(shè)置為計(jì)數(shù)方式,對(duì)外部事件〔脈沖〕進(jìn)展計(jì)數(shù);也可以設(shè)置為定時(shí)方式,對(duì)標(biāo)準(zhǔn)時(shí)鐘脈沖進(jìn)展定時(shí)計(jì)時(shí)。它有4中工作方式,定時(shí)和計(jì)數(shù)范圍可以通過(guò)軟件編程進(jìn)展設(shè)定。一旦定時(shí)或計(jì)數(shù)到位,就會(huì)立即向CPU發(fā)送中斷請(qǐng)求,CPU根據(jù)定時(shí)或計(jì)數(shù)結(jié)果對(duì)外設(shè)實(shí)行控制。單片機(jī)具有5~8個(gè)中斷源,2級(jí)中斷優(yōu)先級(jí)。它可接收外部中斷請(qǐng)求、定時(shí)器/計(jì)數(shù)器中斷請(qǐng)求和串行口中斷請(qǐng)求。對(duì)緊急事件的實(shí)時(shí)控制、故障自動(dòng)處理、單片機(jī)與外設(shè)之間的數(shù)據(jù)傳輸、人機(jī)對(duì)話等。定時(shí)器/計(jì)數(shù)器的核心是兩個(gè)16位的加法計(jì)數(shù)器,T0,T1分別由兩個(gè)8位的特殊功能存放器TH0,TL0和TH1,TL1構(gòu)成。定時(shí)器/計(jì)數(shù)器工作方式控制器TMOD,字節(jié)地址89H:GATEC/T非M1M0GATEC/T非M1M0|定時(shí)器/計(jì)數(shù)器T1|定時(shí)器/計(jì)數(shù)器T0|GATE:GATE為0時(shí),定時(shí)器/計(jì)數(shù)器由軟件控制位TR*〔*為0或1〕來(lái)控制啟動(dòng)或停頓,1啟動(dòng),0停頓;GATE為1時(shí),由外部中斷引腳INT0非或INT1非和TR*共同控制,INT非為高電平和TR*為1啟動(dòng),低電平和0停頓。C/T非:C/T非為0時(shí),定時(shí)器/計(jì)數(shù)器為定時(shí)器方式,對(duì)晶振脈沖的12分頻信號(hào)進(jìn)展計(jì)數(shù)。為1時(shí),定時(shí)器/計(jì)數(shù)器為計(jì)數(shù)器方式,對(duì)外部引腳T0(P3.4)或T1(P3.5)輸入的脈沖進(jìn)展計(jì)數(shù)。CPU在每個(gè)機(jī)器周期的S5P2期間,對(duì)T0或T1引腳進(jìn)展采樣,在前一個(gè)周期采得值為1,后一個(gè)周期采得值為0,則計(jì)數(shù)器加1。由于確認(rèn)一次負(fù)跳變需要兩個(gè)機(jī)器周期,因此最高計(jì)數(shù)頻率為晶振頻率的1/12。工作方式:M1M0工作方式00方式0,為13位定時(shí)器/計(jì)數(shù)器,2^13=819201方式1,為16位定時(shí)器/計(jì)數(shù)器,2^16=6553610方式2,為8位自動(dòng)重裝載計(jì)數(shù)初值定時(shí)器/計(jì)數(shù)器,2^8=25611方式3,定時(shí)器/計(jì)數(shù)器T0分成兩個(gè)獨(dú)立的8位定時(shí)器/計(jì)數(shù)器定時(shí)器/計(jì)數(shù)器控制存放器TCON,字節(jié)地址88H,可位尋址:TF1TR1TF0TR0IE1IT1IE0IT0TF1/TF0:定時(shí)器/計(jì)數(shù)器溢出標(biāo)志位,溢出時(shí)由硬件置1,向CPU申請(qǐng)中斷或查詢,CPU響應(yīng)中斷后,由硬件自動(dòng)清0。TR1/TR0:定時(shí)器/計(jì)數(shù)器運(yùn)行控制位,由軟件置1或清0,置1時(shí)啟動(dòng)定時(shí)器/計(jì)數(shù)器,清0時(shí)停頓計(jì)數(shù)。IT0/IT1:外部中斷0/外部中斷1觸發(fā)方式選擇位。IT0/IT1=0為電平觸發(fā)方式,IT0/IT1=1為跳變觸發(fā)方式。IE0/IE1:外部中斷0/外部中斷1中斷請(qǐng)求標(biāo)志位。IE0/IE1=1表示在向CPU申請(qǐng)中斷。中斷:中斷是指CPU正在處理*件事情時(shí),外部發(fā)生的*一事件〔如一個(gè)電平的變化,一個(gè)脈沖沿的發(fā)生或定時(shí)器/計(jì)數(shù)器溢出等〕請(qǐng)求CPU迅速去處理。于是,CPU暫時(shí)中斷當(dāng)前的工作,轉(zhuǎn)去處理所發(fā)生的事件。中斷效勞處理完成后,再回到原來(lái)被中止的地方,繼續(xù)原來(lái)的工作,此過(guò)程即為中斷。8051中斷系統(tǒng)共有5個(gè)中斷源,分別為1.外部中斷0請(qǐng)求2.外部中斷1請(qǐng)求3.定時(shí)器/計(jì)數(shù)器T0溢出中斷請(qǐng)求4.定時(shí)器/計(jì)數(shù)器T1溢出中斷請(qǐng)求5.串行口中斷請(qǐng)求1〕串行口控制存放器SCON,字節(jié)地址98H,可位尋址。SM0SM1SM2RENTB8RB9TIRI與中斷系統(tǒng)有關(guān)的標(biāo)志位時(shí)TI和RI。TI:串行口的發(fā)送中斷請(qǐng)求標(biāo)志位。CPU將一字節(jié)的數(shù)據(jù)寫入發(fā)送緩沖器SBUF時(shí),就啟動(dòng)一幀串行數(shù)據(jù)的發(fā)送,沒(méi)發(fā)送完一幀串行數(shù)據(jù)后,硬件自動(dòng)置TI位為1?!舶l(fā)送完一幀數(shù)據(jù),假設(shè)還要接著發(fā)送,則為了下一次發(fā)送做準(zhǔn)備,需要軟件將TI清0〕RI:串行口的接收中斷請(qǐng)求標(biāo)志位。在串行口允許接收時(shí),每接收完一幀串行數(shù)據(jù),硬件自動(dòng)置RI位為1?!步邮胀暌粠瑪?shù)據(jù),假設(shè)還要接著接收,則為了下一次接收做準(zhǔn)備,需要軟件將RI清0〕中斷允許控制存放器IE,字節(jié)地址A8H,可位尋址。EA——ESET1E*1ET0E*0EA:中斷允許總控制位。EA=0,CPU關(guān)中斷。EA=1,CPU開(kāi)中斷。ES:串行口中斷允許控制位。ES=0,制止中斷。ES=1,允許中斷。ET0/ET1:定時(shí)器/計(jì)數(shù)器0/1中斷允許控制位。0制止中斷,1允許中斷。E*0/E*1:外部中斷0/1中斷允許控制位。0制止中斷,1允許中斷。中斷優(yōu)先級(jí)控制存放器IP,字節(jié)地址B8H,可位尋址?!狿SPT1P*1PT0P*0PS:串行口中斷優(yōu)先級(jí)控制位。1為高優(yōu)先級(jí),0為低優(yōu)先級(jí)。PT0/PT1:定時(shí)器/計(jì)數(shù)器0/1溢出中斷優(yōu)先級(jí)控制位。1為高優(yōu)先級(jí),0為低優(yōu)先級(jí)。P*0/P*1:外部中斷0/1中斷優(yōu)先級(jí)控制位。1為高優(yōu)先級(jí),0為低優(yōu)先級(jí)。查詢中斷方式編程:用定時(shí)器T1查詢方式控制單片機(jī)發(fā)出1KHz音頻#include<reg51.h>//包含51單片機(jī)存放器定義的頭文件sbitsound=P3^7;//將sound位定義為P3.7引腳voidmain(void){EA=1;//開(kāi)總中斷ET0=1;//定時(shí)器T0中斷允許TMOD=0*10;//使用定時(shí)器T1的模式1TH1=(65536-921)/256;//定時(shí)器T1的高8位賦初值TL1=(65536-921)%256;//定時(shí)器T1的低8位賦初值TR1=1;//啟動(dòng)定時(shí)器T1TF1=0;while(1)//無(wú)限循環(huán)等待查詢{while(TF1==0);TF1=0;sound=~sound;//將P3.7引腳輸出電平取反TH1=(65536-921)/256;//定時(shí)器T1的高8位賦初值TL1=(65536-921)%256;//定時(shí)器T1的低8位賦初值}}中斷方式編程:用定時(shí)器T0的中斷控制1位LED閃爍#include<reg51.h>//包含51單片機(jī)存放器定義的頭文件sbitD1=P2^0;//將D1位定義為P2.0引腳/**************************************************************函數(shù)功能:主函數(shù)**************************************************************/voidmain(void){EA=1;//開(kāi)總中斷ET0=1;//定時(shí)器T0中斷允許TMOD=0*01;//使用定時(shí)器T0的模式2TH0=(65536-46083)/256;//定時(shí)器T0的高8位賦初值TL0=(65536-46083)%256;//定時(shí)器T0的低8位賦初值TR0=1;//啟動(dòng)定時(shí)器T0while(1)//無(wú)限循環(huán)等待中斷;}/**************************************************************函數(shù)功能:定時(shí)器T0的中斷效勞程序***************

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論