AT89C2051单片机与MT8880接口设计
基于图1电路,在接口软件设计时,只需模拟MT8880的控制时序,用指令对P1口进行读写操作,控制芯片内部的CRA、CRB等寄存器,从而实现对MT8880的发送/接收控制。在此,仅给出用C51编制的接口程序。
3.1 发送程序
程序执行后,将以DTMF方式发送预存在数组W_BUF中的7位数码(5135535)。
#include reg51.h>
#define uc unsigned char
#define ui unsigned int
/* 子函数(子程序)说明 */
void initialize(void);
void tran_init(void);
void transmit(uc data *p,uc count);
void delay(ui l);
/* 主函数(主程序) */
void main(void)
{ uc data w_buf[7];
SP=0x5f;
/* 预存数码5135535 */
w_buf[0]=5;
w_buf[1]=1;
w_buf[2]=3;
w_buf[3]=5;
w_buf[4]=5;
w_buf[5]=3;
w_buf[6]=5;
initialize();
tran_init();
transmit(w_buf,7);
initialize();
for(;;);}
/* MT8880初始化子函数 */
void initialize(void)
{ P1=0x3f; /* 读SR */
P1=0x20; /* CRA=0000 */
P1=0x20; /* CRA=0000 */
P1=0x28; /* CRA=1000 */
P1=0x20; } /* CRB=0000 */
/* 发送初始化子函数 */
void tran_init(void)
{ P1=0x29; /* CRA=1001 */
P1=0x21; } /* CRB=0001 */
/* 发送操作子函数 */
void transmit(uc data *p,uc count)
{ uc i;
for (i=0;icount;i++,p++)
{ P1=*p; /* 发送数码 */
delay(6000); /* 延时 */
P1=0x3f; }}/* 读SR */
/* 延时子函数 */
void delay(ui l)
{ ui i;
for (i=0;il;i++);}
评论