------------------------------------------------------------------------------------------------------------
例0:
ORG???0000H
SETB??TR0??????????;啟動(dòng)T0
MOV???R2,?#250??????;定時(shí)計(jì)數(shù)初值
LOOP:
MOV???TH0,?#(8192?-?10000)?/?32???;定時(shí)10ms
MOV???TL0,?#(8192?-?5000)?MOD?32
JNB???TF0,?$???????;等待10ms
CLR???TF0
DJNZ??R2,?LOOP?????;每隔5ms,R2減一次
CPL???P1.0?????????;R2為0則LED亮滅轉(zhuǎn)換
LJMP??0000H
END
例1:
ORG?0000H;程序端存放位置
LJMP?MAIN;主程序入口
ORG?000BH???;指明內(nèi)存地址
LJMP?T0ISR?????;
ORG?0030H;跳過(guò)異常向量區(qū)
MAIN:
MOV?TMOD,#01H????;定時(shí)器0,工作方式1
MOV?TH0,#HIGH(65536-50000);為了配置定時(shí)器溢出周期為50000對(duì)TH0寫(xiě)入初值。HIGH()、LOW()都是宏定義,用于取雙字節(jié)變量的高半字節(jié)和低半字節(jié)。
MOV?TL0,#LOW(65536-50000);
SETB?TR0????;開(kāi)啟定時(shí)器0
SETB?ET0????;開(kāi)啟定時(shí)器0中斷
SETB?EA?????;開(kāi)啟總中斷
CLR?P1.0????;燈滅
MOV?R2,#10;定時(shí)次數(shù)
SJMP?$
T0ISR:
CLR?TR0
MOV?TH0,#HIGH(65536-50000)?????;重賦初值
MOV?TL0,#LOW(65536-50000)
SETB?TR0
DJNZ?R2,T0E????;定時(shí)次數(shù)減1直到0,非0時(shí)直接轉(zhuǎn)T0E退出
CPL?P1.0??????;10次中斷到則LED取反
MOV?R2,#10;重賦計(jì)數(shù)值
T0E:
RETI
END
例2:
ORG?0000H
start:
MOV?P1,#0FFH
CALL?delay
MOV?P1,#0H
CALL?delay
CALL?delay
LJMP?start
delay:
MOV?R7,#100
d2:???MOV?R6,#250
d1:???DJNZ?R6,d1
DJNZ?R7,d2
RET
END
;100*250次*2*1us=500ms=0.5s
例3:
ORG?0000H
LJMP?MAIN
ORG?000BH
LJMP?T0ISR
ORG?0030H
MAIN:
MOV?TMOD,#01H
MOV?TH0,#HIGH(65536-50000)
MOV?TL0,#LOW(65536-50000)
MOV?R2,#100
SETB?TR0
SETB?ET0
SETB?EA
CLR?P0.0
SJMP?$
T0ISR:
CLR?TR0
MOV?TH0,#HIGH(65536-50000)
MOV?TL0,#LOW(65536-50000)
SETB?TR0
DJNZ?R2,T0E
MOV?R2,#100
JNZ?T001
SETB?P0.0
SJMP?T0E
T001:
DEC?A
MOV?R3,A
SETB?P0.0
CLR?P0.1
SJMP?T0E
T0E:
RETI
END