导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→用过mt8880的大虾给点意见[wzf_9901120]

 *第36093篇: 用过mt8880的大虾给点意见

  
楼 主:wzf_9901120 2005年11月29日15:59
 用过mt8880的大虾给点意见
问题是在 “while((mt8880_Status&0x02)!=0x02);    //判断数据是否发送完毕”为什么读出SR的B1位总是0呢??是什么原因?多谢各位大虾指教!!!
sbit RW=P2^4;         //定义MT8880的引脚sbit
 CS=P2^5;             D0^D3接在P20^P23
sbit CK=P2^6;
sbit RS=P2^7;
void mt8880_ReadStatus()                    //读mt8880的状态寄存器
{  P2=0xFF; //先将P2口全置1,才能正确读出P2口的内容  
CK=0;  
CS=0;  
RW=1;  
RS=1;  
CK=1;  
_nop_(); 
 _nop_();  
CK=0;  
mt8880_Status=P2;  //存储读出状态寄存器的数据  
RS=0;  RW=0;  CS=1;  CK=0;}
void mt8880_WriteData(uchar SendData)   //向mt8880写入一位数据
{  CK=0;  CS=0;  RS=0;  RW=0;  CK=1; 
 _nop_();  P2|=SendData;  _nop_();  
CK=0;  _nop_();  
RW=1;  RS=1; 
 CS=1;  
CK=0;
}
void mt8880_Initial()         //mt8880初始化\RW\CS\CK\RS
{  mt8880_ReadStatus(); 
 CK=0;      //写CRA 
 CS=0;  RS=1;  RW=0;  CK=1;  _nop_();  P2&=0xf0;  _nop_();  _nop_();  CK=0;  short_delay();  
RW=0;       //写CRA  CK=1;  _nop_();  P2&=0xf0;  _nop_();  CK=0;  short_delay();  RW=0;          //8写入控制寄存器A,下一周期写入控制寄存器B  CK=1;  _nop_();  P2&=0xf0;  
P2|=0x08;  
_nop_();  CK=0;  short_delay();  CK=1;  
P2&=0xf0;       //写CRB  _nop_();  CK=0;  short_delay();  
mt8880_ReadStatus();  CK=0;  
CS=1;
}
void mt8880_Dial()              //拨号子程序
{  unsigned char tel,i;  
unsigned char array[8]={1,4,7,1} ; 
 CK=0;  CS=0;  RS=1;  RW=0;  CK=1;  _nop_(); 
 P2&=0xFD;                      //置mt8880为DTMF模式和中断模式 
 _nop_();  CK=0;  _nop_();  _nop_();  CK=1;  _nop_();  
P2&=0xF0;                     //写CRB设置为突发模式 
 _nop_();  CK=0;  _nop_();  
SW_MAIN=1;                    //模拟摘机 
 tel=array[0];                 //取预制电话号码  
for(i=0;i  <=7;i++) 
 {    mt8880_WriteData(tel);    
mt8880_ReadStatus();    
Display(mt8880_Status);    
while((mt8880_Status&0x02)!=0x02);    //判断数据是否发送完毕  
  i++;    tel=array[i];             //取下一位电话号码   
}
}
   

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

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


[上一篇主题]:“NC”表示电阻和电容是什么意思

[下一篇主题]:谁有16*16的汉字字模库(纵向取模),或是算法,谢谢