91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

手把手教你寫單片機(jī)定時(shí)器中斷程序

NJ90_gh_bee81f8 ? 來(lái)源:未知 ? 作者:李建兵 ? 2018-03-12 16:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

我們?cè)趯W(xué)單片機(jī)時(shí)我們第一個(gè)例程就是燈的閃爍,那是用延時(shí)程序做的,現(xiàn)在回想起來(lái),這樣做不很恰當(dāng),為什么呢?我們的主程序做了燈的閃爍,就不能再干其它的事了,難道單片機(jī)只能這樣工作嗎?當(dāng)然不是,我們能用定時(shí)器來(lái)實(shí)現(xiàn)燈的閃爍的功能。

例1:查詢方式

ORG 0000H

AJMP START

ORG 30H

START:

MOV P1,#0FFH ;關(guān)所 燈

MOV TMOD,#00000001B ;定時(shí)/計(jì)數(shù)器0工作于方式1

MOV TH0,#15H

MOV TL0,#0A0H ;即數(shù)5536

SETB TR0 ;定時(shí)/計(jì)數(shù)器0開始運(yùn)行

LOOP:JBC TF0,NEXT ;如果TF0等于1,則清TF0并轉(zhuǎn)NEXT處

AJMP LOOP ;不然跳轉(zhuǎn)到LOOP處運(yùn)行

NEXT:CPL P1.0

MOV TH0,#15H

MOV TL0,#9FH;重置定時(shí)/計(jì)數(shù)器的初值

AJMP LOOP

END AJMP LOOP

END

鍵入程序,看到了什么?燈在閃爍了,這可是用定時(shí)器做的,不再是主程序的循環(huán)了。簡(jiǎn)單地分析一下程序,為什么用JBC呢?TF0是定時(shí)/計(jì)數(shù)器0的溢出標(biāo)記位,當(dāng)定時(shí)器產(chǎn)生溢出后,該位由0變1,所以查詢?cè)撐?br /> 就可知宇時(shí)時(shí)間是否已到。該位為1后,要用軟件將標(biāo)記位清0,以便下一次定時(shí)是間到時(shí)該位由0變1,所以用了JBC指令,該指位在判1轉(zhuǎn)移的同時(shí),還將該位清0。




以上程序是能實(shí)現(xiàn)燈的閃爍了,可是主程序除了讓燈閃爍外,還是不能做其他的事??!不,不對(duì),我們能在LOOP:……和AJMP LOOP指令之間插入一些指令來(lái)做其他的事情,只要保證執(zhí)行這些指令的時(shí)間少于定時(shí)時(shí)間就行了。那我們?cè)谟密浖訒r(shí)程序的時(shí)候不是也能用一些指令來(lái)替代DJNZ嗎?是的,但是那就要求你精確計(jì)算所用指令的時(shí)間,然后再減去對(duì)應(yīng)的DJNZ循環(huán)次數(shù),很不方便,而現(xiàn)在只要求所用指令的時(shí)間少于定時(shí)時(shí)間就行,顯然要求低了。當(dāng)然,這樣的辦法還是不好,所以我們常用以下的辦法來(lái)實(shí)現(xiàn)。

程序2:用中斷實(shí)現(xiàn)

ORG 0000H,

AJMP START

ORG 000BH ;定時(shí)器0的中斷向量地址

AJMP TIME0 ;跳轉(zhuǎn)到真正的定時(shí)器程序處

ORG 30H

START:

MOV P1,#0FFH ;關(guān)所 燈

MOV TMOD,#00000001B ;定時(shí)/計(jì)數(shù)器0工作于方式1

MOV TH0,#15H

MOV TL0,#0A0H ;即數(shù)5536

SETB EA ;開總中斷允許

SETB ET0 ;開定時(shí)/計(jì)數(shù)器0允許

SETB TR0 ;定時(shí)/計(jì)數(shù)器0開始運(yùn)行

LOOP: AJMP LOOP ;真正工作時(shí),這里可寫任意程序

TIME0: ;定時(shí)器0的中斷處理程序

PUSH ACC

PUSH PSW ;將PSW和ACC推入堆棧保護(hù)

CPL P1.0

MOV TH0,#15H

MOV TL0,#0A0H ;重置定時(shí)常數(shù)

POP PSW

POP ACC

RETI

END

上面的例程中,定時(shí)時(shí)間一到,TF0由0變1,就會(huì)引發(fā)中斷,CPU將自動(dòng)轉(zhuǎn)至000B處尋找程序并執(zhí)行,由于留給定時(shí)器中斷的空間只有8個(gè)字節(jié),顯然不足以寫下所有有中斷處理程序,所以在000B處安排一條跳轉(zhuǎn)指令,轉(zhuǎn)到實(shí)際處理中斷的程序處,這樣,中斷程序能寫在任意地方,也能寫任意長(zhǎng)度了。進(jìn)入定時(shí)中斷后,首先要保存當(dāng)前的一些狀態(tài),程序中只演示了保存存ACC和PSW,實(shí)際工作中應(yīng)該根據(jù)需要將可能會(huì)改變的單元的值都推入堆棧進(jìn)行保護(hù)(本程序中實(shí)際不需保存護(hù)任何值,這里只作個(gè)演示)。

上面的兩個(gè)單片機(jī)程序運(yùn)行后,我們發(fā)現(xiàn)燈的閃爍非???,根本分辨不出來(lái),只是視覺(jué)上感到燈有些晃動(dòng)而已,為什么呢?我們能計(jì)算一下,定時(shí)器中預(yù)置的數(shù)是5536,所以每計(jì)60000個(gè)脈沖就是定時(shí)時(shí)間到,這60000個(gè)脈沖的時(shí)間是多少呢?我們的晶體震蕩器是12M,所以就是60000微秒,即60毫秒,因此速度是非??斓摹H绻蚁雽?shí)現(xiàn)一個(gè)1S的定時(shí),該怎么辦呢?下面給出一個(gè)例程。

ORG 0000H

AJMP START

ORG 000BH ;定時(shí)器0的中斷向量地址

AJMP TIME0 ;跳轉(zhuǎn)到真正的定時(shí)器程序處

ORG 30H

START:

MOV P1,#0FFH ;關(guān)所 燈

MOV 30H,#00H ;軟件計(jì)數(shù)器預(yù)清0

MOV TMOD,#00000001B ;定時(shí)/計(jì)數(shù)器0工作于方式1

MOV TH0,#3CH

MOV TL0,#0B0H ;即數(shù)15536

SETB EA ;開總中斷允許

SETB ET0 ;開定時(shí)/計(jì)數(shù)器0允許

SETB TR0 ;定時(shí)/計(jì)數(shù)器0開始運(yùn)行

LOOP: AJMP LOOP ;真正工作時(shí),這里可寫任意程序

TIME0: ;定時(shí)器0的中斷處理程序

PUSH ACC

PUSH PSW ;將PSW和ACC推入堆棧保護(hù)

INC 30H

MOV A,30H

CJNE A,#20,T_RET ;30H單元中的值到了20了嗎?

T_L1: CPL P1.0 ;到了,取反P10

MOV 30H,#0 ;清軟件計(jì)數(shù)器

T_RET:

MOV TH0,#15H

MOV TL0,#9FH ;重置定時(shí)常數(shù)

POP PSW

POP ACC

RETI

END

先自己分析一下,看看是怎么實(shí)現(xiàn)的?這里采用了軟件計(jì)數(shù)器的概念,思路是這樣的,先用定時(shí)/計(jì)數(shù)器0做一個(gè)50毫秒的定時(shí)器,定時(shí)是間到了以后并不是立即取反P10,而是將軟件計(jì)數(shù)器中的值加1,如果軟件計(jì)數(shù)器計(jì)到了20,就取反P10,并清掉軟件計(jì)數(shù)器中的值,不然直接返回,這樣,就變成了20次定時(shí)中斷才取反一次P10,因此定時(shí)時(shí)間就延長(zhǎng)了成了20*50即1000毫秒了。

這個(gè)思路在工程中是非常有用的,有的時(shí)候我們需要若干個(gè)定時(shí)器,可51中總共才有2個(gè),怎么辦呢?其實(shí),只要這幾個(gè)定時(shí)的時(shí)間有一定的公約數(shù),我們就能用軟件定時(shí)器加以實(shí)現(xiàn),如我要實(shí)現(xiàn)P10口所接燈按1S每次,而P11口所接燈按2S每次閃爍,怎么實(shí)現(xiàn)呢?對(duì)了我們用兩個(gè)計(jì)數(shù)器,一個(gè)在它計(jì)到20時(shí),取反P10,并清零,就如上面所示,另一個(gè)計(jì)到40取反P11,然后清0,不就行了嗎?這部份的程序如下

ORG 0000H

AJMP START

ORG 000BH ;定時(shí)器0的中斷向量地址

AJMP TIME0 ;跳轉(zhuǎn)到真正的定時(shí)器程序處

ORG 30H

START:

MOV P1,#0FFH ;關(guān)所 燈

MOV 30H,#00H ;軟件計(jì)數(shù)器預(yù)清0

MOV TMOD,#00000001B ;定時(shí)/計(jì)數(shù)器0工作于方式1

MOV TH0,#3CH

MOV TL0,#0B0H ;即數(shù)15536

SETB EA ;開總中斷允許

SETB ET0 ;開定時(shí)/計(jì)數(shù)器0允許

SETB TR0 ;定時(shí)/計(jì)數(shù)器0開始運(yùn)行

LOOP: AJMP LOOP ;真正工作時(shí),這里可寫任意程序

TIME0: ;定時(shí)器0的中斷處理程序

PUSH ACC

PUSH PSW ;將PSW和ACC推入堆棧保護(hù)

INC 30H

INC 31H ;兩個(gè)計(jì)數(shù)器都加1

MOV A,30H

CJNE A,#20,T_NEXT ;30H單元中的值到了20了嗎?

T_L1: CPL P1.0 ;到了,取反P10

MOV 30H,#0 ;清軟件計(jì)數(shù)器

T_NEXT:

MOV A,31H

CJNE A,#40,T_RET ;31h單元中的值到40了嗎?

T_L2:

CPL P1.1

MOV 31H,#0 ;到了,取反P11,清計(jì)數(shù)器,返回

T_RET:

MOV TH0,#15H

MOV TL0,#9FH ;重置定時(shí)常數(shù)

POP PSW

POP ACC

RETI

END

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6077

    文章

    45506

    瀏覽量

    671108
  • 中斷
    +關(guān)注

    關(guān)注

    5

    文章

    918

    瀏覽量

    43786
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3368

    瀏覽量

    123857

原文標(biāo)題:手把手教你使用單片機(jī)定時(shí)器、中斷試驗(yàn)

文章出處:【微信號(hào):gh_bee81f890fc1,微信公眾號(hào):面包板社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    手把手教你學(xué)51單片機(jī)-C語(yǔ)言版

    ,沒(méi)有專業(yè)的人員帶領(lǐng)大家入門。 基于這些原因,我們編寫了這本《手把手教你學(xué)51單片機(jī)-C語(yǔ)言版》(第3版),并且配套了相關(guān)的視頻教程、電子教案、源代碼和實(shí)驗(yàn)開發(fā)板(詳情瀏覽青島金思特電子有限公司網(wǎng)站獲取
    發(fā)表于 03-05 11:47

    從0到1,10+年資深LabVIEW專家,手把手教你攻克機(jī)器視覺(jué)+深度學(xué)習(xí)(5000分鐘實(shí)戰(zhàn)課)

    “告別檢測(cè)系統(tǒng)能力缺陷!10+年LabVIEW視覺(jué)資深專家手把手教你:5000+分鐘高清教程(含工具、算法原理、實(shí)戰(zhàn)操作、項(xiàng)目?jī)?yōu)化全流程講解)”——從傳統(tǒng)視覺(jué)算法→深度學(xué)習(xí)建模→工業(yè)級(jí)部署"
    的頭像 發(fā)表于 12-02 08:07 ?559次閱讀
    從0到1,10+年資深LabVIEW專家,<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>攻克機(jī)器視覺(jué)+深度學(xué)習(xí)(5000分鐘實(shí)戰(zhàn)課)

    單片機(jī)定時(shí)器中斷

    51單片機(jī)內(nèi)部共有兩個(gè)16位可編程的定時(shí)器/計(jì)數(shù),即定時(shí)器T0和定時(shí)器T1。它們既有定時(shí)功能又
    發(fā)表于 11-24 06:22

    PWM、定時(shí)器、SysTick 區(qū)別及應(yīng)用場(chǎng)景

    單片機(jī)和嵌入式開發(fā)中,經(jīng)常會(huì)遇到PWM(脈寬調(diào)制)、定時(shí)器、SysTick(系統(tǒng)滴答定時(shí)器)這幾個(gè)詞。很多初學(xué)者容易把它們混為一談,以為都是“定時(shí)相關(guān)的東西”。其實(shí),它們?cè)诒举|(zhì)和應(yīng)用
    的頭像 發(fā)表于 11-17 10:53 ?549次閱讀
    PWM、<b class='flag-5'>定時(shí)器</b>、SysTick 區(qū)別及應(yīng)用場(chǎng)景

    【迅為RK3568開發(fā)板NPU實(shí)戰(zhàn)】別再閑置你的NPU!手把手教你玩轉(zhuǎn)RKNN-Toolkit2 的使用

    【迅為RK3568開發(fā)板NPU實(shí)戰(zhàn)】別再閑置你的NPU!手把手教你玩轉(zhuǎn)RKNN-Toolkit2 的使用
    的頭像 發(fā)表于 11-11 14:21 ?1174次閱讀
    【迅為RK3568開發(fā)板NPU實(shí)戰(zhàn)】別再閑置你的NPU!<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>玩轉(zhuǎn)RKNN-Toolkit2 的使用

    RVMCU課堂「21」: 手把手教你玩轉(zhuǎn)RVSTAR—看門狗定時(shí)器

    看門狗定時(shí)器(Watch Dog Timer,WDT或WDGT),是一種微控制為了防止程序“跑飛”而設(shè)計(jì)的一種硬件機(jī)制,讓系統(tǒng)在因電磁干擾或者軟件錯(cuò)誤而當(dāng)機(jī)的時(shí)候可以復(fù)位系統(tǒng),從而具備自修復(fù)的能力
    發(fā)表于 10-29 06:01

    RT-Thread Nano硬核移植指南:手把手實(shí)現(xiàn)VGLite圖形驅(qū)動(dòng)適配 | 技術(shù)集結(jié)

    VGLite是NXP提供的輕量級(jí)2D圖形API,本文將手把手帶你實(shí)現(xiàn)VGLite圖形驅(qū)動(dòng)適配RT-Thread。文章分為上、下兩篇,將手把手教您移植。上篇對(duì)RT-ThreadNano內(nèi)核與Finsh組件進(jìn)行移植,下篇?jiǎng)t教您改寫SDK中的VGLite代碼以將其適配到RT-T
    的頭像 發(fā)表于 07-17 14:40 ?3416次閱讀
    RT-Thread Nano硬核移植指南:<b class='flag-5'>手把手</b>實(shí)現(xiàn)VGLite圖形驅(qū)動(dòng)適配 | 技術(shù)集結(jié)

    【教程】零基礎(chǔ)!手把手教你使用STM32F4進(jìn)行E22-400T22S編程通信

    通過(guò)本文帶大家零基礎(chǔ)使用STM32F407VET6單片機(jī)進(jìn)行E22-400T22S模塊編程并進(jìn)行簡(jiǎn)單的通信,當(dāng)然如果學(xué)會(huì)了,也可以舉一反三應(yīng)用于E22、E220、E32所有模塊上。一STM32環(huán)境
    的頭像 發(fā)表于 07-03 19:32 ?1546次閱讀
    【教程】零基礎(chǔ)!<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>使用STM32F4進(jìn)行E22-400T22S編程通信

    【精選直播】手把手教你做PC第十二課:WIFI 驅(qū)動(dòng)框架適配

    手把手教你做PC》系列直播課再度開播!《KaihongOS筆記本電腦開發(fā)實(shí)戰(zhàn)第十二課:WIFI驅(qū)動(dòng)框架適配》將于07月02日19:00開播↑掃碼入群,領(lǐng)課程講義資料包↑深開鴻資深工程師親臨直播間
    的頭像 發(fā)表于 07-01 08:08 ?589次閱讀
    【精選直播】<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>做PC第十二課:WIFI 驅(qū)動(dòng)框架適配

    手把手教你如何調(diào)優(yōu)Linux網(wǎng)絡(luò)參數(shù)

    在高并發(fā)網(wǎng)絡(luò)服務(wù)場(chǎng)景中,Linux內(nèi)核的默認(rèn)網(wǎng)絡(luò)參數(shù)往往無(wú)法滿足需求,導(dǎo)致性能瓶頸、連接超時(shí)甚至服務(wù)崩潰。本文基于真實(shí)案例分析,從參數(shù)解讀、問(wèn)題診斷到優(yōu)化實(shí)踐,手把手教你如何調(diào)優(yōu)Linux網(wǎng)絡(luò)參數(shù),支撐百萬(wàn)級(jí)并發(fā)連接。
    的頭像 發(fā)表于 05-29 09:21 ?1015次閱讀

    正點(diǎn)原子Linux系列全新視頻教程來(lái)啦!手把手教你MP257開發(fā)板,讓您輕松入門!

    正點(diǎn)原子Linux系列全新視頻教程來(lái)啦!手把手教你MP257開發(fā)板,讓您輕松入門! 一、視頻觀看 正點(diǎn)原子手把手教你學(xué)STM32MP257-第1期:https://www.bilib
    發(fā)表于 05-16 10:42

    GPU顯卡維修避坑指南:手把手教你識(shí)別行業(yè)套路!

    的今天,高端顯卡維修已成“暴利暗流”。虛高報(bào)價(jià)、偷換配件、技術(shù)陷阱……用戶稍有不慎,輕則損失數(shù)萬(wàn),重則設(shè)備報(bào)廢。今天小助手將揭露行業(yè)亂象,手把手教你識(shí)別套路,并推薦
    的頭像 發(fā)表于 04-02 20:31 ?3875次閱讀
    GPU顯卡維修避坑指南:<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>識(shí)別行業(yè)套路!

    《零基礎(chǔ)開發(fā)AI Agent——手把手教你用扣子做智能體》

    《零基礎(chǔ)開發(fā)AI Agent——手把手教你用扣子做智能體》是一本為普通人量身打造的AI開發(fā)指南。它不僅深入淺出地講解了Agent的概念和發(fā)展,還通過(guò)詳細(xì)的工具介紹和實(shí)戰(zhàn)案例,幫助讀者快速掌握
    發(fā)表于 03-18 12:03

    手把手教你做星閃無(wú)人機(jī)—KaihongOS星閃無(wú)人機(jī)開發(fā)實(shí)戰(zhàn)》系列課程課件匯總

    為助力開發(fā)者迅速掌握『KaihongOS輕量系統(tǒng)開發(fā)技術(shù)』與『星閃無(wú)線通信技術(shù)』,實(shí)現(xiàn)快速上手與深度體驗(yàn),“開鴻Developer社區(qū)”攜手“電子發(fā)燒友”再次聯(lián)合推出《手把手教你做星閃無(wú)人機(jī)
    發(fā)表于 03-18 10:33

    手把手教你做PC-KaihongOS筆記本電腦開發(fā)實(shí)戰(zhàn)》課件匯總

    ”攜手“電子發(fā)燒友”聯(lián)合推出了 《KaihongOS手把手系列直播課程》,該系列課程以實(shí)際產(chǎn)品為案例,詳細(xì)講解每個(gè)產(chǎn)品的開發(fā)全流程。 此次首發(fā)內(nèi)容是《手把手教你做PC-KaihongOS筆記本電腦開發(fā)
    發(fā)表于 03-18 10:25