tcp1985 发表于 2010-8-27 14:50:41

请教DTMF芯片MT8888的初始化问题及如何设置各种模式

我这个项目是用STC单片机STC11F02E来驱动MT8888的,请问MT8888的芯片的初始化流程是怎么样的,初始化的时候我也按照芯片资料所说的来做了,但是还是有有时候发送出去的数被正确解码了,但有时不行。我本来的意愿是设为DTMF模式的,请大侠们看我的这个初始化及发送数据部分有什么问题否?
这个破东西搞了我好几天呢,谁要是有好的MT8888程序就发到我的邮箱上面,小弟我感激不尽450706035@qq.com
#include<reg52.h>
#include<intrins.h>
/***********************
MT的CP端接到了INT0
D3-----------------p1^7;
D2-----------------p1^6;
D1-----------------p1^5;
D0-----------------p1^4;
************************/
sbit   RD_MT   =P1^3;
sbit   RS0_MT    =P1^2;
sbit   RW_MT   =P1^1;
sbit   CS_MT   =P1^0;
sbit   CS_34018=P3^3;   //MC34018的使能端,低电平使能
sbit   good      =P3^0;
unsigned char Status;
unsigned char buffer;
void delaynop(unsigned char temp)
{
   unsigned char i;
       for(i=0;i<temp;i++) _nop_();
}
/*******************************
function: Read status register
RS0_MT-----------1
RD_MT------------0
RW_MT------------1
*******************************/
unsigned char ReadStatusREG()
{
    unsigned char temp;
        P1|=0xf0;   
        P1|=0x0e;         
        delaynop(10);
        RD_MT=0;               
        delaynop(10);
        temp=P1;
        P1|=0x0e;         //将相关的控制线都拉高
        temp>>=4;
        return temp;
}
/**********************************
function:Write to control register
RS0_MT----------------1
RD_MT-----------------1
RW_MT-----------------0
**********************************/
void WriteControlREG(unsigned char com)//这是写控制寄存的子函数
{
    P1|=0x0e;
        com<<=4;
        P1&=0x0f;   //先将4个数据位电平拉低
    delaynop(10);
        P1|=com;   //将数据位送到总线上
        delaynop(10);
        RW_MT=0;
        delaynop(10);
        P1|=0x0e;   //将所有控制线都拉高
        delaynop(10);
}
/**********************************
function: Write to data register
RS0_MT----------------0
RD_MT-----------------1
RW_MT-----------------0
**********************************/
void WriteDataREG(unsigned char Data)   //写发送数据的子函数
{
    P1|=0x0e;
        Data<<=4;
        P1&=0x0f;
        delaynop(10);
        P1|=Data;
        delaynop(10);
        RS0_MT=0;
        delaynop(10);
        RW_MT=0;
        delaynop(10);
        P1|=0x0e;
        delaynop(10);
}
void delay120ms(void)   //延时120ms
{
    unsigned char a,b,c;
    for(c=29;c>0;c--)
      for(b=246;b>0;b--)
            for(a=45;a>0;a--);
}

void Init_system()   //初始化MT8888
{
    CS_MT=0;
    CS_34018=0;
    delay120ms();
    buffer=ReadStatusREG();
    WriteControlREG(0);
    WriteControlREG(0);
    WriteControlREG(0x08);
    WriteControlREG(0x0);
    buffer=ReadStatusREG();
    delay120ms();
}
void SendOneNumber(unsigned char number)   //发送一个电话号码
{
    WriteControlREG(0x0d);
    WriteControlREG(0X01);
    WriteDataREG(number);
    delay120ms();
    buffer=ReadStatusREG();
    WriteControlREG(0x08);
    WriteControlREG(0X0);   
}
void main()
{
    volatile bit flag;
    Init_system();   
    SendOneNumber(15);
    while(1);

}

tcp1985 发表于 2010-8-27 16:45:50

回复【楼主位】tcp1985
-----------------------------------------------------------------------

怎么没人理我呢~~~~~~~~~
页: [1]
查看完整版本: 请教DTMF芯片MT8888的初始化问题及如何设置各种模式