|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
实际工作中常常需要自动测量两点间的距离,如液面的高度、机动车倒车时与障碍物间的距离等等。在这类距离的测量中,一点是可达到的,另一点则是不可到达的。因此,测量时,从可到达的一点发射一定频率的信号波,经不可到达的一点反射回来,由接收电路接收回波信号。单片机准确计算信号在两点间传播所用的时间,再根据发射波的传播速度,计算出两点间的距离。
1 ^: R& ?" Y, m 设计电路时,首先分析测量的对象,选择合适的信号波发射器(如发射声波、红外线、超声波等)。若所选信号波传播速度较慢,可通过单片机对发射波与回波的查询或由发射波与回波触发中断,开关定时器完成计时功能。当波的传播速度很快时(如超声波),测出的误差很大。原因在于:其一,不管是查询发射波与回波,还是由之触发单片机中断再通过软件启停定时器均需要一定的时间(中断的方式误差相对要小);其二,相对而言,单片机的时间分辨率不是太高,如晶振频率为12MHz,则时间分辨率为1μs。# N7 R$ \3 L: y) N/ z& T
引入专用的定时/计数器8254进行计时,可大大提高测距系统的精确性。8254的每个定时器都有一个GATE门控信号,可用发射波与回波直接启停8254,而不必把发射波与回波接至单片机,通过中断或查询再发出定时器启停信号。同时,8254具有更高的工作频率,时间的分辨率更高,如输入4MHz的工作频率,时间分辨率为0.25μs。
# ` S( u: X3 z$ E3 V 一、硬件结构
) x4 [5 ?% w" A/ h( 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显示电路,则可将测出的距离显示出来。
. r6 X+ w: z1 i% ]& x5 W- \2 P 如果波的来回传播时间超过了8254一次计时的最大范围,可将其定时器的OUT引脚接至单片机的INT1,由中断累加计时。
) l; v$ M, a' f0 h! V7 e+ b 二、软件编程
/ B% X9 g, E K" q6 ?1 a4 { 主要程序清单如下:
! @$ T# F/ k6 i; \ I( W# C* m ORG 0000H
6 Z+ ^# n! r" W! x9 u5 S6 \& @) n AJMP START
# {9 Q: W$ Z+ z4 \$ T: z ORG 0003H
A: ?) C3 k% w; m5 |9 ~8 S9 q AJMP WBZD
0 m' A( D9 j1 o" q1 i. VSTART:CLR P1.0;JK触发器初态置0& ]# W8 f! ]7 U7 n9 H# u9 `
MOV R0,#7FH;8254工作方式:T0方式0,16位; h% o) U- T2 \
MOV A,#00110000
6 U7 g0 y( p% C+ ?/ `5 ^4 `, h+ Z! z MOV @R0,A
2 K* v+ J& X0 P6 ^2 p' q7 V. x* } MOV R0,#7CH
1 p2 ^) z- [1 @" k8 \9 \5 e MOV A,#0FFH
: d* x2 q1 v+ D8 V4 i1 r5 X MOV @R0,A;置T0计数初值低8位, _; a# ]/ A% U! j. Z% R4 S
MOV @R0,A;置T0计数初值高8位(最大范围)3 p9 ^ G9 n* V( y1 F9 K
SETB IT0;/INTO下跳沿触发: Q& F& @& j9 [/ g- ~# q
SETB EA/ y) q- N* A4 G' K' Q
SETB EX0;开/INT0中断
4 l Q7 n9 }! \6 R9 JTAB: ACALL ;数据处理子程序: m) w. F& w( c' B- r
ACALL ;键盘处理子程序: r N- j4 k0 f( p0 N) o
AJMP TAB) _% c# a$ G2 {. u8 V
WBZD: MOV R0,#7CH;中断服务子程序: _- M2 r7 a8 g2 n; V7 A% ]
MOV A,@R04 n& x6 b9 T* M* Z$ i; x) X
MOV 20H,A;读出低8位时标送20H- j, f; ], ~% G- P- T
MOV A,@R0
; v0 x; T. s8 x. L' x% L1 ` MOV 21H,A;读出高8位时标送21H z0 B) Q- R. h$ o
MOV A,#0FFH. Y+ _: B; H+ O I. a5 S
MOV @R0,A" l& F% i' p0 V% s" p
MOV @R0,A;重装计数初值
. w7 c" y# u6 w CLR P1.0;JK触发器初态置0$ V( N& x" l8 r/ _0 E9 E0 j
RETI
, b+ s5 z/ }" i6 | END |
|