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