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