利用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 $
这段程序看不懂啊,求高手发发流程图,谢谢啦
|