|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
实际工作中常常需要自动测量两点间的距离,如液面的高度、机动车倒车时与障碍物间的距离等等。在这类距离的测量中,一点是可达到的,另一点则是不可到达的。因此,测量时,从可到达的一点发射一定频率的信号波,经不可到达的一点反射回来,由接收电路接收回波信号。单片机准确计算信号在两点间传播所用的时间,再根据发射波的传播速度,计算出两点间的距离。, U) l& K1 ~" x* u# U& Q7 p
设计电路时,首先分析测量的对象,选择合适的信号波发射器(如发射声波、红外线、超声波等)。若所选信号波传播速度较慢,可通过单片机对发射波与回波的查询或由发射波与回波触发中断,开关定时器完成计时功能。当波的传播速度很快时(如超声波),测出的误差很大。原因在于:其一,不管是查询发射波与回波,还是由之触发单片机中断再通过软件启停定时器均需要一定的时间(中断的方式误差相对要小);其二,相对而言,单片机的时间分辨率不是太高,如晶振频率为12MHz,则时间分辨率为1μs。
8 E3 D; F i' R: F$ D 引入专用的定时/计数器8254进行计时,可大大提高测距系统的精确性。8254的每个定时器都有一个GATE门控信号,可用发射波与回波直接启停8254,而不必把发射波与回波接至单片机,通过中断或查询再发出定时器启停信号。同时,8254具有更高的工作频率,时间的分辨率更高,如输入4MHz的工作频率,时间分辨率为0.25μs。: f, k9 ^5 @6 M* b) B1 q) J) W
一、硬件结构# D9 }8 \. x# @+ Q- V7 }8 r
电路如附图。图中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显示电路,则可将测出的距离显示出来。
1 C1 K* M4 r; O$ a' W 如果波的来回传播时间超过了8254一次计时的最大范围,可将其定时器的OUT引脚接至单片机的INT1,由中断累加计时。! `. h2 b" ?* d8 i, S/ w
二、软件编程' g4 \1 U+ c" p# I" j# X# U- B
主要程序清单如下:
' d' m3 \0 ~4 N+ j( h V ORG 0000H7 w* I/ w+ a# V3 h
AJMP START
) y1 E# q4 N. G3 o- F4 I- F ORG 0003H
$ D' l2 ~) H; _- } AJMP WBZD/ g6 S# s% Z: z( u/ S! O. r% h
START:CLR P1.0;JK触发器初态置0
3 v C6 @) z. w& l& Z0 O) R& l1 Z MOV R0,#7FH;8254工作方式:T0方式0,16位
1 X8 P5 U S! i$ i MOV A,#00110000
* R2 H5 f& E. r MOV @R0,A/ r5 ?/ E% M5 J$ d# F
MOV R0,#7CH- r- w# d8 D, ]+ b `" x' b9 ]
MOV A,#0FFH
' W) q/ ~% b' b; v& \ MOV @R0,A;置T0计数初值低8位
0 B: F: ^, f, L& Y! Q, R; G, r MOV @R0,A;置T0计数初值高8位(最大范围)' j8 r7 q/ `- G& C0 G6 g) ^" K2 H( d
SETB IT0;/INTO下跳沿触发
9 w2 g! y6 j: m: ]8 K1 W SETB EA
" I- L3 U3 P# n4 K/ m SETB EX0;开/INT0中断4 ~# I+ C' d2 E2 L
TAB: ACALL ;数据处理子程序7 S* E! P6 s; Z. e% h8 e7 i) m
ACALL ;键盘处理子程序& p; a# i6 N5 F2 j3 S8 l
AJMP TAB+ X9 [; `$ H. B" [
WBZD: MOV R0,#7CH;中断服务子程序
7 B1 U4 G" M/ W7 o' ` MOV A,@R03 r9 `+ a5 U6 ?- k
MOV 20H,A;读出低8位时标送20H9 W/ X k3 u6 N. a# ~# L
MOV A,@R0, J3 u7 G) s( y T8 ~9 B6 q" \
MOV 21H,A;读出高8位时标送21H
- y3 O5 `, e+ o MOV A,#0FFH1 B& y0 \4 k0 i" f
MOV @R0,A6 Q. U+ p( [5 S7 C0 O* \+ W7 L# ~
MOV @R0,A;重装计数初值
) o" \$ Q6 S4 e* V' K0 _8 v1 ` CLR P1.0;JK触发器初态置0
- ~4 I3 x, [' Q1 r q3 m RETI
# k4 P# `; u1 c. r% }6 j8 v- Y( l END |
|