89C51單片機定時/計數(shù)器、P1口編程舉例
在89C51單片機的P1.0端口上接有一個發(fā)光二極管,P1.0輸出低電平時發(fā)光二極管點亮,輸出高電平時熄滅。P1.7接有一個開關(guān),開關(guān)閉合時,P1.7為低電平,斷開時為高電平。請設(shè)計一個控制程序,當開關(guān)閉合時,發(fā)光二極管每秒鐘閃爍一次,當開關(guān)斷開時,發(fā)光二極管每秒鐘閃爍兩次。已知系統(tǒng)使用12MHz的晶體。
LED BIT P1.0 ;發(fā)光二極管控制信號輸出端口
KEY BIT P1.7 ;開關(guān)狀態(tài)檢測端口
CLOK EQU 20H ;時鐘單元(單位:1/16秒)
SEC BIT CLOK.3 ;秒閃爍控制位
DSEC BIT CLOK.2 ;半秒閃爍控制位
ORG 0000H
LJMP MAIN ;至主程序
ORG 000BH
LJMP TTT ;至定時中斷子程序
ORG 0030H
MAIN: MOV P1,#0FFH ;初始化端口
ANL TMOD,#0F0H
ORL TMOD,#01H ;設(shè)置定時器0為十六位定時器
MOV CLOK,#0 ;時鐘單元初始化
MOV TH0,#0BH ;計數(shù)初值(定時1/16秒=62500us)
MOV TL0,#0DCH
SETB ET0 ;允許定時器0中斷
SETB EA ;開中斷
SETB TR0 ;啟動定時器0
LOOP: ORL PCON,#1 ;主程序進入睡眠狀態(tài)
LJMP LOOP
TTT: ORL TL0,#0DCH ;定時子程序,重裝時常數(shù)
MOV TH0,#0BH
INC CLOK ;調(diào)整時鐘
JB KEY,TTT1 ;檢測開關(guān)狀態(tài)
MOV C,SEC ;開關(guān)閉合,取秒閃爍信號
SJMP TTT2
TTT1: MOV C,DSEC ;開關(guān)斷開,取半秒閃爍信號
TTT2: MOV LED,C ;控制發(fā)光二極管
RETI ;中斷返回