|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
实际工作中常常需要自动测量两点间的距离,如液面的高度、机动车倒车时与障碍物间的距离等等。在这类距离的测量中,一点是可达到的,另一点则是不可到达的。因此,测量时,从可到达的一点发射一定频率的信号波,经不可到达的一点反射回来,由接收电路接收回波信号。单片机准确计算信号在两点间传播所用的时间,再根据发射波的传播速度,计算出两点间的距离。
+ u8 V* Q+ [! K7 j5 ] 设计电路时,首先分析测量的对象,选择合适的信号波发射器(如发射声波、红外线、超声波等)。若所选信号波传播速度较慢,可通过单片机对发射波与回波的查询或由发射波与回波触发中断,开关定时器完成计时功能。当波的传播速度很快时(如超声波),测出的误差很大。原因在于:其一,不管是查询发射波与回波,还是由之触发单片机中断再通过软件启停定时器均需要一定的时间(中断的方式误差相对要小);其二,相对而言,单片机的时间分辨率不是太高,如晶振频率为12MHz,则时间分辨率为1μs。, p; ?9 v7 u( j. M6 f) I! N2 A
引入专用的定时/计数器8254进行计时,可大大提高测距系统的精确性。8254的每个定时器都有一个GATE门控信号,可用发射波与回波直接启停8254,而不必把发射波与回波接至单片机,通过中断或查询再发出定时器启停信号。同时,8254具有更高的工作频率,时间的分辨率更高,如输入4MHz的工作频率,时间分辨率为0.25μs。
- v0 i1 \* d1 f8 k8 V% M" l 一、硬件结构% p+ r* o6 y5 f9 n' h0 N
电路如附图。图中8254的地址为7CH(0#定时器)、7DH(1#定时器)、7EH(2#定时器))、7FH(控制口),其工作频率CLK0由外部电路提供4MHz的脉冲信号(该信号为计时的基准信号,频率要求精确,可用4060等分频器实现)。受发射波与回波控制的JK触发器的输出作为8254 0#定时器的门控信号GATE0,回波信号同时作为单片机INT0的中断响应信号。初始化时,由单片机的P1.0口控制JK触发器的初态为0,8254的T0不计时;发射波产生后,JK触发器翻转,T0开始工作,计数初值不断减1;收到回波信号后,JK触发器再次翻转,8253的T0停止工作,同时触发单片机中断,在中断服务程序中读出时标(计数初值中所剩余的值),然后由数据处理子程序计算出距离。若增加LED显示电路,则可将测出的距离显示出来。" ~8 K& j, n" z2 s
如果波的来回传播时间超过了8254一次计时的最大范围,可将其定时器的OUT引脚接至单片机的INT1,由中断累加计时。+ S% H; y1 R/ J, d9 O: Q; H. b
二、软件编程/ o+ W: T0 O& N4 c) e! M/ _8 {
主要程序清单如下:$ t" Y/ L, V2 t1 ~7 t
ORG 0000H* U& o d9 [) i" q0 C
AJMP START
# ~# [, `8 ^4 B- j' R# I ORG 0003H
0 A/ O; R/ E6 g* q7 Z% _ AJMP WBZD
0 l, I# L7 U+ YSTART:CLR P1.0;JK触发器初态置0" | W7 W, p$ \+ k) y) o
MOV R0,#7FH;8254工作方式:T0方式0,16位
" I) b; i/ l' @) k# d MOV A,#00110000
+ t# ?. n- ]3 m+ P MOV @R0,A
9 `9 G8 \* u! X9 D" Q0 ]% B MOV R0,#7CH, o1 S% S( ^% d7 T5 p; C6 B
MOV A,#0FFH# p' e' _ h4 n6 q3 c1 O7 P
MOV @R0,A;置T0计数初值低8位
# V: c/ i. a$ Q& I: A {# H MOV @R0,A;置T0计数初值高8位(最大范围)) _- ~ f; l |6 H
SETB IT0;/INTO下跳沿触发- ]" ?/ L& v9 S; [ u7 F2 ~
SETB EA6 s6 z3 r- ^( U+ }" s: C! i7 h
SETB EX0;开/INT0中断
. r0 N- u8 x6 z7 UTAB: ACALL ;数据处理子程序* W" h& E0 |6 v8 f
ACALL ;键盘处理子程序
D; o! N2 q, ~: w3 h AJMP TAB
O, }' F+ e/ k& U% d0 V' ^) m# W) RWBZD: MOV R0,#7CH;中断服务子程序
) P) y; h1 p$ k1 @# T7 B6 g O MOV A,@R0
k3 i2 E0 l9 T* N# z MOV 20H,A;读出低8位时标送20H
- U5 {9 p# c6 z# y MOV A,@R0
/ ?. N$ H* m9 W# Z9 t5 w MOV 21H,A;读出高8位时标送21H. Y [2 j' _( Y2 o9 G
MOV A,#0FFH
; p% P- M' r8 t( k' R: l MOV @R0,A
7 F/ z; _, ?% k1 Y, `. J MOV @R0,A;重装计数初值4 X7 K- e: l" V, W; Q# p% e( G
CLR P1.0;JK触发器初态置0- C: ^: l; A, ~' ^' F
RETI
% N6 J/ x: {7 s) Y% [6 P END |
|