<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 從零開(kāi)始學(xué)51單片機定時(shí)器

從零開(kāi)始學(xué)51單片機定時(shí)器

作者: 時(shí)間:2013-01-16 來(lái)源:網(wǎng)絡(luò ) 收藏

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

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

MOV 30H,#0 ;清軟件計數器

T_RET:

MOV TH0,#15H

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

POP PSW

POP ACC

RETI

END

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

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

ORG 0000H

AJMP START

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

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

ORG 30H

START:

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

MOV 30H,#00H ;軟件計數器預清 0

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

MOV TH0,#3CH

MOV TL0,#0B0H ;即數 15536

SETB EA ;開(kāi)總中斷允許

SETB ET0 ;開(kāi)定時(shí)/計數器 0 允許

SETB TR0 ;定時(shí)/計數器 0 開(kāi)始運行

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

TIME0: ;定時(shí)器 0 的程序

PUSH ACC

PUSH PSW ;將 PSW 和 ACC 推入堆棧保護

INC 30H

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

MOV A,30H

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

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

MOV 30H,#0 ;清軟件計數器

T_NEXT:

MOV A,31H

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

T_L2:

CPL P1.1

MOV 31H,#0 ;到了,取反 P11,清計數器,返回

T_RET:

MOV TH0,#15H

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

POP PSW

POP ACC

RETI

END


上一頁(yè) 1 2 3 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>