|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
实际工作中常常需要自动测量两点间的距离,如液面的高度、机动车倒车时与障碍物间的距离等等。在这类距离的测量中,一点是可达到的,另一点则是不可到达的。因此,测量时,从可到达的一点发射一定频率的信号波,经不可到达的一点反射回来,由接收电路接收回波信号。单片机准确计算信号在两点间传播所用的时间,再根据发射波的传播速度,计算出两点间的距离。/ g' P. g" v. N# g
设计电路时,首先分析测量的对象,选择合适的信号波发射器(如发射声波、红外线、超声波等)。若所选信号波传播速度较慢,可通过单片机对发射波与回波的查询或由发射波与回波触发中断,开关定时器完成计时功能。当波的传播速度很快时(如超声波),测出的误差很大。原因在于:其一,不管是查询发射波与回波,还是由之触发单片机中断再通过软件启停定时器均需要一定的时间(中断的方式误差相对要小);其二,相对而言,单片机的时间分辨率不是太高,如晶振频率为12MHz,则时间分辨率为1μs。6 r) [- Q# S* o' h3 @, Z: [& [
引入专用的定时/计数器8254进行计时,可大大提高测距系统的精确性。8254的每个定时器都有一个GATE门控信号,可用发射波与回波直接启停8254,而不必把发射波与回波接至单片机,通过中断或查询再发出定时器启停信号。同时,8254具有更高的工作频率,时间的分辨率更高,如输入4MHz的工作频率,时间分辨率为0.25μs。2 x2 o' I; E* q8 m# Q( w9 O
一、硬件结构
3 g6 `8 ?8 [9 P( W. |& _2 W0 _; z- N; f 电路如附图。图中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显示电路,则可将测出的距离显示出来。/ M( D2 ]4 R3 ?+ b$ A8 c% T+ d
如果波的来回传播时间超过了8254一次计时的最大范围,可将其定时器的OUT引脚接至单片机的INT1,由中断累加计时。& ?/ O7 n/ _9 R0 P0 T1 }
二、软件编程
+ p4 i% b4 p# V# R& L+ a% S7 \( E6 m 主要程序清单如下:
# [3 V t5 X! [/ v3 P, |7 Y ORG 0000H! ?9 ~) y9 s( ~- g" E2 r
AJMP START
. D! E7 U; K1 o5 X ORG 0003H
d9 \# {$ r1 s. z. v+ I6 ~ AJMP WBZD1 m# `( C! |% Q @7 }
START:CLR P1.0;JK触发器初态置0" t9 H7 b) B" @
MOV R0,#7FH;8254工作方式:T0方式0,16位
$ k6 t8 V3 t& N' m! Q MOV A,#00110000. f8 k3 v# ^* y& b2 B
MOV @R0,A$ _3 M4 W! r6 H2 w* a O: H
MOV R0,#7CH
! J- D$ i: K4 Y% B. u4 j MOV A,#0FFH- R- X9 C8 a9 S" \+ ^ ~
MOV @R0,A;置T0计数初值低8位5 J6 ~' m$ p4 v6 n7 f5 H
MOV @R0,A;置T0计数初值高8位(最大范围)" \# ]/ q: b( N
SETB IT0;/INTO下跳沿触发
3 H# m2 O; G: J' ?% j9 j3 F SETB EA1 t6 ]1 \; e$ \; v0 Q
SETB EX0;开/INT0中断8 @, ~8 h+ M8 y$ ]( p. B
TAB: ACALL ;数据处理子程序5 s1 N& P9 }5 X
ACALL ;键盘处理子程序
4 G9 K, F, f6 p' I$ o% t, R4 R AJMP TAB
* r* C# O) w8 j' U1 c: K" z* e$ YWBZD: MOV R0,#7CH;中断服务子程序
- v! ?* c8 W# [6 T7 G7 U. ? MOV A,@R0
+ C, V$ Y! M2 x( ^2 p+ z$ V MOV 20H,A;读出低8位时标送20H
9 A; _# r7 r; _3 u. x4 l3 W MOV A,@R0
+ f( T8 i+ b- v& j1 O+ O MOV 21H,A;读出高8位时标送21H7 u/ n+ t% g& t, p6 H7 K
MOV A,#0FFH
9 c$ O* S% S3 h1 |6 |) S- k MOV @R0,A
7 f- A, R& `& [) S6 } MOV @R0,A;重装计数初值
' e6 M6 {) q5 C/ M/ ~ CLR P1.0;JK触发器初态置0
& w4 u: f% x7 U X0 H2 O RETI
% O+ O, a' C3 C) H# k; O END |
|