请教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
-----------------------------------------------------------------------
怎么没人理我呢~~~~~~~~~
页:
[1]