<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è) > 嵌入式系統 > 設計應用 > 中斷定時(shí)器源程序-0-99秒可調時(shí)間

中斷定時(shí)器源程序-0-99秒可調時(shí)間

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

基時(shí)0.1S在中斷內實(shí)現,主程序中需要用到0~99秒可調的時(shí)間,主程序發(fā)出請求后開(kāi)始工作,我現在在做一個(gè)實(shí)驗主程序中的按鍵去抖動(dòng),顯示部分動(dòng)態(tài)掃描的間隔還有其它地方要用到,試過(guò)幾種方法效果都不太理想,各位幫幫忙給上傳個(gè)匯編源程序,先謝謝了.

12M晶震
0.1s =100ms =100000US
因為51單片機T0 T1作為16位定時(shí)器最大65535
那么
我們用一個(gè)16位的T0或者T1 定時(shí)50000US 既是50ms
65535-50000=13335
換成16進(jìn)制3CAF
那么定時(shí)器的高字節和低字節位
TH0=3CH
TL0=0AFH
這樣T0的溢出時(shí)間就是50MS
那么在程序中 我們要用到1S的時(shí)間怎么辦呢?
我們定義一個(gè)延時(shí)中間變量 MS
在T0中段程序中
檢測MS的值
比如 我們要延時(shí)1S 那么
1S/50MS=20
則在主程序中定義 MS值為20

在T0的中斷程序中

DJNZ MS exit
檢測 MS是否運行了20次 也就是是否延時(shí)了1S
沒(méi)有到1S 就退出
到了1S 了 就干其他事情
以此類(lèi)推 要延時(shí) 1-99S比如 20S
那么 MS 的值為 400
即400X50MS=20000MS=20S
下面是 示例代碼

;----------------------------------------------
;名稱(chēng):用定時(shí)計器T0實(shí)現任意秒數延時(shí)程序
;主頻 12M晶震 51系列單片機
;入口參數 MS T0溢出中斷定義為 50MS 程序中要用到延時(shí)時(shí) 開(kāi)T0中斷 并且給MS
;附值 MS=20 時(shí) 為1S 以此類(lèi)推 延時(shí)完成后 關(guān)T0中斷
;編譯環(huán)境:keil c51編譯通過(guò)
;WWW.51HEI.COM 原創(chuàng ) 可以任意修改和作為學(xué)習測試用途
;備注 :在T0的中斷程序中 指令的執行也占用了時(shí)間 因此 此程序的定時(shí) 并不精確
;2009-3-31
;---------------------------------------------

;內存分配定義
T0CZG EQU 3CH ;定時(shí)器0初值高字節
T0CZD EQU 0AFH ;定時(shí)器0初值低字節
ms EQU 59H
yszt bit 7fh ;延時(shí)狀態(tài)
;--------------------------------------------

ORG 0000H
aJMP MAIN
org 0003h
;lJMP in0zd
org 000bh
lJMP t0zd
org 0013h
;lJMP in1zd
org 001bh
; ljmp t1zd
org 0030h
;----------------------------
MAIN:
setb yszt
clr tr0 ;關(guān)T0
setb ea ;CPU開(kāi)中斷
;----------------
;程序段
;------------------
mov ms, #20
setb tr0 ; 這里運行了指令 延時(shí)時(shí)間應該+1
jb yszt,$ ;原地踏步 等待延時(shí)完成 YSZT 延時(shí)狀態(tài)標志位 在T0的中斷程序里面控制 為1則沒(méi)有延時(shí)完 為0則表示延時(shí)完畢
CLR TR0 ;延時(shí)完畢 關(guān)T0
; ------------------------------------
; 延時(shí)完畢 ,要放的程序段
;
;-------------------------------
;---------------------
;程序段
;-------------------
ajmp main

;-------------------------------------------------
;定時(shí)器T0中斷服務(wù)子程序
;入口參數 MS
;出口參數 YSZT 延時(shí)狀態(tài)標志位
;-------------------------------------------------
t0zd:

MOV TH0, #T0CZG ;重裝初始值
MOV TL0, #T0CZD
PUSH ACC
PUSH PSW
DJNZ ms, exit ; MS未到0 退出
clr yszt ; 延時(shí)完成 MS里面的值已經(jīng)剪到0 清延時(shí)狀態(tài)標志位 退出
exit: POP PSW
POP ACC
RETI
END



代碼寫(xiě)完了 不過(guò)在T0的中斷程序的執行中 判斷是否延時(shí)時(shí)間到的過(guò)程中其實(shí)也占用了時(shí)間
LZ 如果只是去抖動(dòng) 或者是顯示部分動(dòng)態(tài)掃描要用到延時(shí)的話(huà)
完全可以用標準的
2重循環(huán) 就夠了
比如 延時(shí)1MS
DELAY1ms:
MOV R0,#2
Y1: MOV R1,#250
DJNZ R1,$
DJNZ R0,Y1
RET

51單片機相關(guān)文章:51單片機教程


路由器相關(guān)文章:路由器工作原理


路由器相關(guān)文章:路由器工作原理




評論


相關(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>