DMH v"D S/Gy0 加拿大MITEL公司生产的MT8880是一种带有CPU接口的DTMF(双音多频)发送/接收芯片,其可与6800系列微处理器或单片机直接接口。然而,对于想使用MT8880芯片的51系列单片机用户而言,关注的是51系列单片机如何与MT8880接口的问题。本文将以具有51内核的AT89C2051(简称2051)单片机为例,介绍2051单片机与MT8880接口电路的设计,供有关用户参考。电子园51单片机学习网4J5T QK.ss
F9H"gP1L1M-_01 接口时钟信号
` k?)Dc:i0 笔者在使用MT8880过程中,经实验研究发现,MT8880对接口控制信号时序的要求并不十分严格,关键在如何为MT8880提供接口时钟信号CP(第12脚)。从MITEL公司原文器件手册提供的参数可知,CP时钟周期 tCYC典型值为250nS(0.25μS),实际上,tCYC在0.167~10μS(6MHz~100KHz)之间取值时,MT8880仍能正常工作,tCYC 取值范围较宽。因此,CP的产生比较灵活,能以下述4种方法实现。电子园51单片机学习网0zz${/D)cs9b-i&cYa
⑴ 众所周知,51系列单片机的地址锁存允许信号ALE为晶振频率的6分频(如:晶振为12MHz,ALE为2MHz),因此,可用地址锁存允许信号ALE作为CP。
8P0Cis W/Hk |0 ⑵ 用MT8880自身的晶振输出信号(3.58MHz)作为CP,这样CP的产生不依赖于单片机。电子园51单片机学习网+R)?Hp(v9^
⑶ 当51系列单片机所用晶振频率在6MHz以下时,可直接用晶振输出的信号加驱动后作为CP。电子园51单片机学习网;m]Ni/];U
⑷ 用I/O线模拟CP端,配合SETB和CLR指令,也能产生芯片所需的CP信号。需注意的是,部分MT8880芯片用这种方法不能正常工作。电子园51单片机学习网 {?]-vZh%@
综上所述,方法⑴最为简便,方法⑵次之,其余方法略显烦琐、效果较差。亦即方法⑴、⑵是产生CP信号的最佳选择。
2 接口硬件设计
%i!o n8U%r4uU_'t0 与51系列其它单片机相比,2051单片机主要缺少用于外部扩展的并行总线(无P0、P2口和部分控制线)。由于2051无ALE控制信号,因而,其与MT8880芯片接口时,最好采用上述方法⑵ 提供CP信号。
6ilJu7z)RNciu0 2051与MT8880接口电路如图1所示,可见,时钟信号CP是从MT8880的晶振输出端OSC2,经30P电容提供的。另外,接口时,以2051的P1.0~P1.3作为数据线,P1.4和P1.5分别控制MT8880的R/W及RSO端。
WSs"cW*a7K0 电子园51单片机学习网1c vH-}1_?~_
图1 2051与MT8880接口电路电子园51单片机学习网"\!FdzBE/D1n6[!Y
3 接口软件设计电子园51单片机学习网7W$f!}.g/vcr-HI
基于图1电路,在接口软件设计时,只需模拟MT8880的控制时序,用指令对P1口进行读写操作,控制芯片内部的CRA、CRB等寄存器,从而实现对MT8880的发送/接收控制。在此,仅给出用C51编制的接口程序。电子园51单片机学习网)r-u4~ Q)h1a
3.1 发送程序电子园51单片机学习网8f9N$vZ nU
程序执行后,将以DTMF方式发送预存在数组W_BUF中的7位数码(5135535)。
0q \Dtl r0#include <reg51.h>电子园51单片机学习网? K9@f0^4Uw}[G@
#define uc unsigned char
(_{:Lhs:X(Yqx/|\x.l0#define ui unsigned int电子园51单片机学习网8w/w N!|l8M
/* 子函数(子程序)说明 */电子园51单片机学习网6C)d$C"qi+G,o_
void initialize(void);电子园51单片机学习网 iy `4zXL%W
void tran_init(void);
tnREz G4@"t0void transmit(uc data *p,uc count);
{2qXwZ7s|;Cto7[0void delay(ui l);电子园51单片机学习网*uLZ!h9ZUF `
/* 主函数(主程序) */电子园51单片机学习网H#Q$T@(h2LtVy8b2u
void main(void)电子园51单片机学习网NKGJ#e(S'R
{ uc data w_buf[7];电子园51单片机学习网 a(Nn+OS;|
SP="0x5f";电子园51单片机学习网5lp4d9B*@%\n+AV7z{'qz
/* 预存数码5135535 */
`0s"L[z)`-} {0 w_buf[0]=5;
@i#h$Y${.X4ze0 w_buf[1]=1;
5m!r({Jq D0 w_buf[2]=3;
*Plw1MjtH)h0 w_buf[3]=5;电子园51单片机学习网gW8r ?\9a
w_buf[4]=5;电子园51单片机学习网_ fVQ r)U
w_buf[5]=3;
p1?&B)y p(s5v N0 w_buf[6]=5;
"\(~'gr aT5U.}V0 initialize();
EzU,OaX_0 tran_init();
9}r0J^ ~u5b%ke0 transmit(w_buf,7);
0O+[dg xEpz0 initialize();电子园51单片机学习网 z4{?+mz1i
for(;;);}
^-vk8`[:c@0/* MT8880初始化子函数 */
E4I^Q7v:}1W0void initialize(void)
9I`)BgEC0{ P1=0x3f; /* 读SR */电子园51单片机学习网m `hP4E-y%\
P1=0x20; /* CRA="0000" */电子园51单片机学习网:D/S4z[%B)k4u
P1=0x20; /* CRA="0000" */电子园51单片机学习网m%PKjEn B8\6e0i
P1=0x28; /* CRA="1000" */
i9HMF I]*Xb*h'p0 P1=0x20; } /* CRB="0000" */电子园51单片机学习网(P8A0j1l?:T/De
/* 发送初始化子函数 */电子园51单片机学习网jP0Y[QT1Z5N
void tran_init(void)电子园51单片机学习网*ii!peV!{ y5jf
{ P1=0x29; /* CRA="1001" */
w4_!Sv&\0 P1=0x21; } /* CRB="0001" */电子园51单片机学习网g0E:U:^Xce
/* 发送操作子函数 */
yj$UuU1aK\0Z0void transmit(uc data *p,uc count)
y3o-ZLeFO0{ uc i;
oH1p0^)o&{b|K0 for (i=0;i<count;i++,p++)电子园51单片机学习网5ki:j Rh`
{ P1=*p; /* 发送数码 */电子园51单片机学习网kLr/D3VF"U9y#LR
delay(6000); /* 延时 */电子园51单片机学习网ogC!MMK8|"R
P1=0x3f; }}/* 读SR */
O*Q]+[9UYh0/* 延时子函数 */电子园51单片机学习网ty-m Q(iId,d!^
void delay(ui l)
#Y:tjq1BMWx0{ ui i;
;qqPfi3X8j+b0 for (i=0;i<l;i++);}电子园51单片机学习网4xuj)m!T3Ck7du(D
3.2 接收程序电子园51单片机学习网,t'Ra o9[-I)X~
程序利用单片机的INT0以中断方式接收DTMF信号,接收的7位数码存入数组R_BUF中。电子园51单片机学习网m2D2G*U6{G h hv N"fX8B
#include <reg51.h>
*f2]w"e,^0#define uc unsigned char电子园51单片机学习网;m)RE9T4s O
uc data i,r_buf[7];电子园51单片机学习网u5~|C%r"Y)V
/* 子函数(子程序)说明 */
l-j-P M${I"}xbl0void initialize(void);电子园51单片机学习网|E X9`n
void rece_init(void);
a3~E!jXZ \N6}Bo/^0/* 主函数(主程序) */
h sb0flZBK0void main(void)电子园51单片机学习网QQ.f+mx@W9H
{ SP="0x5f";
:^4{%l#Q$` C7R0 i="0";电子园51单片机学习网 on9o X(p
initialize();电子园51单片机学习网']~G&h9@'D7D
rece_init();
(uWS#T%E0 for(;;);}
k*j0D5n/Ra%L2L ^3S0/* MT8880芯片初始化子函数 */
JOG9K-P-^X,o0void initialize(void)电子园51单片机学习网T!qQ bb$~(KB
{ P1=0x3f; /* 读SR */
j^t7H)o;B0 P1=0x20; /* CRA="0000" */
Qr*j&C(KbO D0 P1=0x20; /* CRA="0000" */电子园51单片机学习网%MjS{JM7D)u6`
P1=0x28; /* CRA="1000" */
k`8m&x`h0 P1=0x20; } /* CRB="0000" */
un9sS@ B0/* 接收初始化子函数 */电子园51单片机学习网_;s @ _B.F1YhE
void rece_init(void)电子园51单片机学习网)Q N4yHkv\ ue:jML'[
{ P1=0x24; /* CRA="0100" */
A2? d%ti0 IT0=1; /* 边沿触发 */
2N]2cc K%f0 IE="0x81"; } /* 允许中断,开中断 */
\t-mut8hR0/* 接收中断服务程序 */电子园51单片机学习网/e-C)O;dnVFF
void int0(void) interrupt 0 using 1电子园51单片机学习网cPX n4Q,u
{ P1=0x3f; /* 读SR */电子园51单片机学习网g:IMwO+{ Wh j
P1=0x1f; /* 读RDR */电子园51单片机学习网 r&c9W.P] C
r_buf[i++]=P1&0x0f; } /* 保存 */电子园51单片机学习网v Ce5_2rm
`N1I2o5R5~ J#d04 结束语电子园51单片机学习网q/Ofo3e A%@
笔者在某基金项目的研制中,成功地利用上述接口电路实现了远距离的数传通信,实际使用情况证明,接口简单、可靠,取得了令人满意的效果。
i+bn:T1n!d0参考文献:电子园51单片机学习网#`[Oa`L3PFX
[1] MICROELECTRONICS ANALOG COMMUNICATIONS HANDBOOK. MITEL,1991电子园51单片机学习网kFB&`H+Kn
[2]马忠梅.单片机的C语言应用程序设计.北京:航空航天大学出版社,1997
文章评论(0条评论)
登录后参与讨论