利用8051單片機(jī)定時(shí)器/計(jì)數(shù)器測(cè)量某正脈沖寬度,已知脈沖寬度小于10ms,主機(jī)頻率為12MHz,編程測(cè)量脈沖寬度,并把結(jié)果轉(zhuǎn)換成BCD碼,順序存放在以片內(nèi)50H單元為首地址的內(nèi)存單元中(50h單元存?zhèn)位)
;用Gate位控,方式1
MOV TMOD,#00001001B
MOV TH0,#0
MOV TL0,#0
JB P3.2,$ ;等待下降沿
SETB TR0 ;啟動(dòng),注意門控信號(hào)尚未有效
JNB P3.2,$ ;等待上升沿
JB P3.2,$ ;及新的下降沿
CLR TR0 ;計(jì)數(shù)結(jié)束
MOV 50H,#0 ;準(zhǔn)備換算為BCD碼
MOV 51H,#0
MOV 52H,#0
LP1: CLR C
MOV A,TL0 ;減1000=3E8H
SUBB A,#0E8H
MOV TL0,A
MOV A,TH0
SUBB A,#3
MOV TH0,A
JC LP2 ;不夠減的話,轉(zhuǎn)移,處理百位
INC 50H ;夠減,千位增1
AJMP LP1
LP2: MOV A,TL0 ;先恢復(fù)數(shù)據(jù)
ADD A,#0E8H
MOV TL0,A
MOV A,TH0
ADDC A,#3
MOV TH0,A
CLR C
LP3: MOV A,TL0 ;減100=64H
SUBB A,#100
MOV TL0,A
MOV A,TH0 ;仍有可能是雙字節(jié)數(shù)
SUBB A,#0
MOV TH0,A
JC LP4 ;不夠減的話,轉(zhuǎn)移,處理十位
INC 51H ;夠減,百位增1
AJMP LP3
LP4: MOV A,TL0 ;先恢復(fù)數(shù)據(jù)
ADD A,#100
CLR C
LP5: SUBB A,#10 ;減10=0AH
JC LP6 ;不夠減的話,轉(zhuǎn)移,處理個(gè)位
INC 52H ;夠減,十位增1
AJMP LP5
LP6: ADD A,#10 ;恢復(fù)數(shù)據(jù)
MOV 53H,A ;存?zhèn)位
SJMP $
這段程序看不懂啊,求高手發(fā)發(fā)流程圖,謝謝啦
| 歡迎光臨 (http://www.raoushi.com/bbs/) | Powered by Discuz! X3.1 |