打印

MT8888 双音多频程序请教

[复制链接]
1615|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pksdb|  楼主 | 2011-5-12 22:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//////////////////////////////////////////////////////////////////////
//说明:      控制MT8888拨打电话号码,MT8888工作于DTMF模式,
// !IRQ---!INT1
// RS0----P1.0
// !WR----P1.2
// !RD----P1.1
// D0-----P0.4
// D1-----P0.5
// D2-----P0.6
// D3-----P0.7
//////////////////////////////////////////////////////////////////////
#include <reg52.h>
#include <intrins.h>
void InitializeMT8888(void);
void SetMT8888Mode(void);
void DialTelephoneNumber(void);
void ReadStatus(void);
data  unsigned char MTStatus;
unsigned char code TeleNumber[11]={1,3,5,4,0,2,9,0,2,1,5};
sbit RS2 = P1^0;
sbit RD1 = P1^1;
sbit WR1 = P1^2;
void Delayms(unsigned int ms)
{
    unsigned int i,j;
    for(i=0;i < ms;i++)
    for(j=0;j < 113;j++);
}
void Delay50ms(unsigned char ms)
{
    unsigned int i;
    unsigned char j;
    for(j=0;j < ms;j++)
    for(i=0;i < 9135;i++);
}
void delay1s(void)
{
     unsigned char h,i,j,k;
    for(h=5;h>0;h--)
    for(i=4;i>0;i--)
    for(j=116;j>0;j--)
    for(k=214;k>0;k--);
}
//读MT8888状态寄存器
void ReadStatus(void)
{
   RS2 = 1; WR1 = 1; RD1 = 0;
   P0=0xFF;
   MTStatus=P0;
    _nop_();
    _nop_();
    _nop_();
}
//上电后均需要初始化MT8888
void InitializeMT8888(void)
{
void Delay50ms(2); //上电后100ms

    ReadStatus();
    RS2 = 1; WR1 = 0; RD1 = 1; //写控制寄存器
    _nop_();
    _nop_();
    P0=0x00;
    _nop_();
    _nop_();
    RS2 = 1; WR1 = 0; RD1 = 1; //写控制寄存器
    _nop_();
    _nop_();
    P0=0x00;
    _nop_();
    _nop_();
    RS2 = 1; WR1 = 0; RD1 = 1; //写控制寄存器
    _nop_();
    _nop_();
    P0=0x80;             //CAREFUL
    _nop_();
    _nop_();
    RS2 = 1; WR1 = 0; RD1 = 1; //写控制寄存器
    _nop_();
    _nop_();
    P0=0x00;
    _nop_();
    _nop_();
    ReadStatus();
}
//设置MT8888工作模式
void SetMT8888Mode(void)
{
    RS2 = 1; WR1 = 0; RD1 = 1; //写控制寄存器
    _nop_();
    _nop_();
    P0=0xDF;             //CRA=1101  
    _nop_();
    _nop_();
    RS2 = 1; WR1 = 0; RD1 = 1; //写控制寄存器
    _nop_();
    _nop_();
    P0=0x0F;             //CRB=0000
    _nop_();
    _nop_();
    Delay50ms(2);
}
void DialTelephoneNumber(void)
{
    unsigned char i,j;
    for(i=0;i < 11;i++)
    {
        j=TeleNumber[i];
        if(j==0)   
        {
            j=10;      //如果号码为0时,按照MT8888的规则应送0x0a
        }
        RS2 = 0; WR1 = 0; RD1 = 1;
        _nop_();
        _nop_();  
        P0=(j << 4);    //MSB into b3-b0
        Delay50ms(6);
  ReadStatus();
  while((MTStatus & 0x20) != 0x20);  //bit2 为1就可以接收下一次发送 现在就卡在这里了
  _nop_();
        _nop_();
  delay1s();
  delay1s();
  
    }
}
/* main  */
void main(void)
{   
       InitializeMT8888();
      SetMT8888Mode();
   while(1)
   {
    delay1s();
    delay1s();
      DialTelephoneNumber();
         
   }
   
}

这是照着芯片PDF 的BUTST(突发模式设置的),现在就卡在拨号的while循环那,请教各位是什么问题呢

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

13

帖子

1

粉丝