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

* 87682: [请教]有关MT8880的使用

   qingyu 
qingyu发表的帖子 

 [请教]有关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全市低电平,请高手指教!!!



发表时间:2006年1月4日15:02:51

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:供应GPS模块我有高性价比GPS模块: 12 parallel chan
[下一篇帖子]:要LCD是多大的,成本控制在多少?要LCD是多大的,成本控制在多少?