导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→[请教]有关MT8880的使用[qingyu]

 *第36911篇: [请教]有关MT8880的使用

  
楼 主:qingyu 2006年1月4日15:02
 [请教]有关MT8880的使用
[QUOTE][QUOTE]#include   <reg51.h>  

#define uc unsigned char
#define ui unsigned int

sbit clock=P1^6;
sbit RSO=P1^5;
sbit RW=P1^4;
uc rem;                                //接收号码变量
uc mem1;

void MT8880_readstate(void);             //子函数调用 
void MT8880_initial(void);
void MT8880_send(uc num);
void delay(ui t);

void main(void)

     uc data sdata;            //发送号码变量,直接寻址片内数据存储区
     sdata=0x06;               // 预存数6 
     delay(50000);             //上电100ms后,必须在程序开始部分初始化控制寄存器
     MT8880_readstate();
     MT8880_initial();
     MT8880_send(sdata); 
}     
     

/* MT8880初始化子函数 */
void MT8880_readstate(void)           //P1.0=D3,P1.1=D2,P1.2=D1,P1.3=D0
{                                   //P1.4=R/W,P1.5=RSO,P1.6=RD
     P1=0xff;                      //读状态
     clock=1;
     RSO=1;
     RW=1;
     clock=0;
     delay(200);
     mem1=P1;                       // 读SR ,11读状态寄存器,读后后三位自动清0
     RSO=0;
     RW=0;
}

void MT8880_initial(void)
{     
     RSO=1;                        //CRA=0000 ,10写控制寄存器
     RW=0;
     P1&=0xf0;
     clock=1; 
     delay(100);
     clock=0; 
     delay(100);                           

     RSO=1;
     RW=0;
     P1&=0xf0;                       //CRA=0000                                         
     clock=1;
     delay(100);
     clock=0;
     delay(100);
     
     RSO=1;
     RW=0;
     P1&=0xf1;                       // CRA=1000 ,选中CRB
     clock=1;
     delay(100);
     clock=0;
     delay(100);
     
     RSO=1;
     RW=0;
     P1&=0xf0;                       // CRB=0000
     clock=1;
     delay(100);
     clock=0; 
}  


/* 发送操作子函数 */
void MT8880_send(uc num)

     RSO=1;
     RW=0;
     P1&=0xf9;  // CRA=1001,DTMF模式,允许写CRB,无中断模式 
     clock=1;
     delay(100);
     clock=0;
     delay(100);
     
     RSO=1;
     RW=0;
     P1&=0xf0;  //CRB=0000,突发模式
     clock=1;
     delay(100);
     clock=0;
     delay(100);
      
     RSO=0;
     RW=0;
     P1=num;       // 发送数码 
     clock=1;
     delay(60000); // 延时,在发送触发模式下,要在数据写入发送数据寄存器100ms后,状态寄存器位1才会置为“1“
     MT8880_readstate();
}

/* 延时子函数 */
void delay(ui t)        //大约1.2us每单位

     ui i;
     for (i=0;i  <t;i++);
}
                                                                                                  
发送程序如上,可是在读状态寄存器时P1口的低四位总是高电平,如果断开D3~D0和单片机的连接,则用万用表测D3~D0全市低电平,请高手指教!!!


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:全数字电机控制教学开发系统

[下一篇主题]:最新液晶技术,带汉字库,串、并口通讯