|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
实际工作中常常需要自动测量两点间的距离,如液面的高度、机动车倒车时与障碍物间的距离等等。在这类距离的测量中,一点是可达到的,另一点则是不可到达的。因此,测量时,从可到达的一点发射一定频率的信号波,经不可到达的一点反射回来,由接收电路接收回波信号。单片机准确计算信号在两点间传播所用的时间,再根据发射波的传播速度,计算出两点间的距离。$ b& V- H' _% y/ U* Q, o
设计电路时,首先分析测量的对象,选择合适的信号波发射器(如发射声波、红外线、超声波等)。若所选信号波传播速度较慢,可通过单片机对发射波与回波的查询或由发射波与回波触发中断,开关定时器完成计时功能。当波的传播速度很快时(如超声波),测出的误差很大。原因在于:其一,不管是查询发射波与回波,还是由之触发单片机中断再通过软件启停定时器均需要一定的时间(中断的方式误差相对要小);其二,相对而言,单片机的时间分辨率不是太高,如晶振频率为12MHz,则时间分辨率为1μs。
9 K0 Y- E) W; F% c: ?( W' c 引入专用的定时/计数器8254进行计时,可大大提高测距系统的精确性。8254的每个定时器都有一个GATE门控信号,可用发射波与回波直接启停8254,而不必把发射波与回波接至单片机,通过中断或查询再发出定时器启停信号。同时,8254具有更高的工作频率,时间的分辨率更高,如输入4MHz的工作频率,时间分辨率为0.25μs。
) f8 P1 B( c% j" y {- X 一、硬件结构
( S! } B& s5 U1 b( U) u 电路如附图。图中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显示电路,则可将测出的距离显示出来。+ D! L# }% [$ w) O# v; X! |5 P
如果波的来回传播时间超过了8254一次计时的最大范围,可将其定时器的OUT引脚接至单片机的INT1,由中断累加计时。
% n# _7 y% i+ Z' z1 @ 二、软件编程
6 H9 T3 y$ m# g( `7 Y 主要程序清单如下:$ L- x0 F$ }' \. z7 `
ORG 0000H7 ?$ v. g2 Y6 d' q- H. J# K
AJMP START* O' @& {4 v& Y( V0 _$ E6 R$ V
ORG 0003H6 R$ c% F& ] T/ Y, K$ n7 x
AJMP WBZD7 \) z' x$ G+ [9 ]
START:CLR P1.0;JK触发器初态置0
* l" d7 ?, n6 B0 Y# ?! Z MOV R0,#7FH;8254工作方式:T0方式0,16位
5 l4 e- n& R1 W- `) c% t& |, f MOV A,#001100007 y6 x5 k( T5 ~1 b2 ^% i9 E4 r: q+ j" m% b
MOV @R0,A
# B- J4 o1 a. B' e! p4 j MOV R0,#7CH; S @9 }7 P: i0 q$ j k) |6 d
MOV A,#0FFH' }0 a7 ]1 J: U& R
MOV @R0,A;置T0计数初值低8位; G6 v9 D! P; L1 z
MOV @R0,A;置T0计数初值高8位(最大范围)$ g; r9 S9 D! c6 L9 u3 k9 p9 b
SETB IT0;/INTO下跳沿触发+ r, Z4 h) G$ T; q7 O
SETB EA# N1 F% n* C/ `, Y2 _
SETB EX0;开/INT0中断
- c4 D* Z& Z( A/ m/ STAB: ACALL ;数据处理子程序
! O' s4 I* k7 [* e1 I6 e; T ACALL ;键盘处理子程序
4 t2 _. A. Q. I1 T3 V. P. B5 O AJMP TAB! ~8 L g9 F1 R6 y8 W( ?5 }% \% @
WBZD: MOV R0,#7CH;中断服务子程序
; Q$ a) ? p. h0 e$ j, p- w MOV A,@R0
# S3 e7 U5 {2 m: c& U MOV 20H,A;读出低8位时标送20H
0 W% P$ @' r* b6 _7 L MOV A,@R0
7 B- B% M0 O) Y% ^( g& Z3 Q MOV 21H,A;读出高8位时标送21H9 t; I3 k1 F: F
MOV A,#0FFH
( y4 \5 |7 V: d& ~" n! S/ o2 ` MOV @R0,A
% _$ @! t0 r! M* p MOV @R0,A;重装计数初值! l6 A1 {+ m) B ^' J+ f
CLR P1.0;JK触发器初态置02 @' u! X1 E$ p9 ^+ {& q
RETI
+ B8 f, T& M0 s; |' k; m END |
|