利用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 $
這段程序看不懂啊,求高手發發流程圖,謝謝啦
|