|
发表于 2006-11-21 13:21:46
|
显示全部楼层
求助mt8880
我用的是STC12C5406单片机 ,11.0592MHz 2口与MT8880连接,单发单收,我直接把一块板子的发连到了另一块的收上,
发现有信号发出来,但接收板要么收不到,要么是零.我晕菜了.请高手指教;我的邮箱study.li@yahoo.com.cn下面是程序,
电路与datasheet上的点型应用一样,只是将那个374k欧姆换成了300k欧姆。
sbit mt8880_rw = P2^4;
sbit mt8880_rs0 = P2^5;
sbit mt8880_cs = P2^6;
sbit mt8880_clk = P2^7;
sbit mt8880_cp = P3^2;
//发送初始化
mt8880_rst();
mt8880_wc(0x0d); //写cra,中断允许,dtmf模式,音频输出允?
mt8880_wc(0x00); //写crb,突发模式,dtmf模式
mt8880_rs();
for(;;)
{
for(i=0;i<11;i++)
{
mt8880_wd(w_buf);
do{
//WDT_CONTR=0X3c;
}while(mt8880_rs() & 0x02 == 0);
}
for(gh=0;gh<200;gh++)
Delay(300);
}
//接收初始化//
mt8880_rst();
mt8880_wc(0x0c); //写cra,中断允许,dtmf模式,
mt8880_wc(0x00); //写crb,突发模式,dtmf模式
mt8880_rs();
rece_init();
/* 接收中断服务程序 */
void int0(void) interrupt 0 using 1
{
mt8880_rs();
r_buf[i++] = mt8880_rd() ; /* 保存 */
/* 读SR */
if(i>10)
{
i=0;
IE=0x00;
h=1;
}
}
/* 接收初始化子函数 */
void rece_init(void)
{
IT0=1; /* 边沿触发 */
IE=0x81; /* 允许中断,开中断 */
}
/***************************************************************
*名称: mt8880_rst*功能:
初始化mt8880,发送禁止,中断禁止,dtmf模式,突发模式*************
***************************************************/
void mt8880_rst()
{
mt8880_rs();
mt8880_wc(0); //写控制寄存器,确保控制寄存器指针指向cr
mt8880_wc(0);
mt8880_wc(8); //写控制寄存器a,输出禁止,中断禁止,dtm
mt8880_wc(0); //写控制寄存器b,突发模式,dtmf模式
mt8880_rs(); //读状态寄存器,用以清除各?
// mt8880_cs=1;
}
/******************************************
称: mt8880_wc(
*功能: 写控制寄存器cra或
*入口参数: com--要写入的数据*出口参数
*****************************************/
void mt8880_wc(unsigned char com)
{
mt8880_cs=0;
mt8880_rs0=1;
mt8880_rw=0;
com&=0x0f;
mt8880_data&=0xf0;
mt8880_data|=com;
_nop_();
mt8880_clk=1;
_nop_();
mt8880_clk=0;
_nop_();
mt8880_cs=1;
}
/***************************************
*名称: mt8880_wd(
*功能: 写mt8880的发送数据寄?
*入口参数: dat--要发送的?
*出口参数: 无************************************/
void mt8880_wd(unsigned char dat)
{
mt8880_cs=0;
mt8880_rs0=0;
mt8880_rw=0;
dat&=0x0f;
mt8880_data&=0xf0;
mt8880_data|=dat;
_nop_();
mt8880_clk=1;
_nop_();
mt8880_clk=0;
_nop_();
mt8880_cs=1;
}
/***************************************
*名称: mt8880_r
*功能: 读mt8880的接收数据寄
*入口参数:
*出口参数: temp--读出的数据,低4?
****************************************/
unsigned char mt8880_rd()
{
unsigned char temp;
mt8880_cs=0;
mt8880_rs0=0;
mt8880_rw=1;
_nop_();
mt8880_clk=1;
_nop_();
temp=mt8880_data;
_nop_();
mt8880_clk=0;
_nop_();
temp&=0x0f;
mt8880_cs=1;
return(temp);
}
/***************************************
*名称: mt8880_rs(
)*功能: 读mt8880的状态寄?
*入口参数:
*出口参数: temp--读出的数据,低4位
***************************************/
unsigned char mt8880_rs()
{
unsigned char temp;
mt8880_cs=0;
mt8880_rs0=1;
mt8880_rw=1;
_nop_();
mt8880_clk=1;
_nop_();
temp=mt8880_data;
temp&=0x0f;
_nop_();
mt8880_clk=0;
_nop_();
mt8880_cs=1;
return(temp);
} |
|