利用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.51hei.com/bbs/) | Powered by Discuz! X3.1 |