打印

急救毕业设计马上结束我的MT8880程序还没出来

[复制链接]
1790|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
greatzlx|  楼主 | 2007-6-9 14:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

大哥大姐帮我看一下我的程序问题出在哪?是不是程序有问题呀?我把程序烧进芯片后各P1口和P3口全是高电平,P2口在1~3V左右,按复位也没用。救救我吧!
还有请教一下那个判断回铃音,拨号音,忙音的程序怎么弄?

程序如下:大哥们一定帮我解决!
#include    <at89x52.h>
#include    <intrins.h>
#define uc unsigned char 
#define ui unsigned int

/*-----------------------------------
功能:      I/O口,全局变量定义
-----------------------------------*/
extern void MT8880_WD(uc dat);
extern uc MT8880_RD(void);
extern uc MT8880_RS(void);
extern void InitMT8880(uc mode);
extern void UpHandle(void);
extern void DownHandle(void);
extern void Delay(ui count);
extern void Beep(uc count);
extern void InitBreak(void);
extern void Dial(void);
//全局变量:
#define        HandMode    1        //提机模式
#define        DTMF8880    0x0d    //DTMF模式常数
#define        CP8880        0x0f    //CP模式常数
#define     MT_DataBus     P2
/*-----------------------------------
功能:      主程序
-----------------------------------*/

//引脚定义
sbit MT_D0      =  P2^0;
sbit MT_D1      =  P2^1;
sbit MT_D2      =  P2^2;
sbit MT_D3      =  P2^3;
sbit MT_CS      =  P3^1;
sbit MT_IRQ     =  P3^4;
sbit MT_RW      =  P2^5;
sbit MT_RS0     =  P2^6;
sbit MT_CLK     =  P2^7;
sbit P_Online    =    P1^3;        //摘机
sbit P_Beep        =    P3^5;        //蜂鸣器鸣叫线
sbit P_Alarm0    =    P1^0;        //小偷入室检测线
sbit P_Alarm1  =    P1^1;        //火灾检测线
sbit APR_M1    =    P1^4;        //语音报警1
sbit APR_M2    =     P1^5;        //语音报警2

//************************************
void main(void)
{
    EA=0;
    P1=0x30;
    P2=0x00;
    P3=0x00;
    EA=1;    
      
    while(P_Alarm0)
        {Delay(200);
         if(P_Alarm0)
             {Dial();            //拨号
              APR_M1=0;
             Delay(100);
              APR_M1=1;
              Delay(2000);
              DownHandle();
              Delay(50);
              for(;;){Beep(1);;}
            }
        }
    while(P_Alarm1)
        {Delay(200);
         if(P_Alarm1)
             {Dial();            //拨号
              APR_M2=0;
             Delay(100);
              APR_M2=1;
              Delay(2000);
              DownHandle();
              Delay(50);
              Beep(1);
              for(;;){;}
            }
        }
}

/**************************************
*名称:     void Dial(void);
*功能:     拨号子程序
*入口参数: 无
*出口参数: 无
**************************************/
void Dial(void)
{  uc data    Number[7];
    uc i;     
    Number[0]=1;
    Number[1]=2;
     Number[2]=3;
     Number[3]=4;
     Number[4]=5;
     Number[5]=6;
     Number[6]=7;
//开始拨号:
    UpHandle();    
    Delay(5);
    InitMT8880(DTMF8880);
    for(i=0;i<7;i++)
        {MT8880_WD(Number); //拨号
        Delay(5);
        }
    Delay(10);
}

/**************************************
*名称:     void UpHandle(void);
*功能:     模拟摘机
*入口参数: 无
*出口参数: 无
**************************************/
void UpHandle(void)
{
    EA=0;
    if (HandMode)
            P_Online=1;
    else    P_Online=0;
    EA=1;
}

/**************************************
*名称:     void DownHandle(void);
*功能:     模拟挂机
*入口参数: 无
*出口参数: 无
**************************************/
void DownHandle(void)
{
    EA=0;
    if (HandMode)
            P_Online=0;
    else    P_Online=1;
    EA=1;
}

/**************************************
*名称:     void Delay(ui count);
*功能:     延时
*入口参数: ui count,
*出口参数: 无
**************************************/
void Delay(ui count)
{    ui i,k;
    EA=0;
    for(i=0;i<count;i++)
        {for(k=0;k<1000;k++){;}
        }
    EA=1;
}

/**************************************
*名称:     void Beep(uc count);
*功能:     蜂鸣器鸣叫
*入口参数: count 鸣叫次数
*出口参数: 无
**************************************/
void Beep(uc count)
{    
    EA=0;
    for(;count>0;count--)
        {    
            P_Beep=1;            
            Delay(50);        
             P_Beep=0;
            Delay(50);
        }
    EA=1;
}

/*-------------------------------------
*功能:      8880功能函数
-------------------------------------*/


/**************************************
*名称:     void MT8880_WC(uc com);
*功能:     写控制寄存器CRA或CRB
*入口参数: com--要写入的数据
*出口参数: 无
**************************************/
void MT8880_WC(uc com)
{
    EA=0;
    MT_CS=0;              
    MT_RS0=1;
    MT_RW=0;
    _nop_();
    MT_CLK=1;
    com&=0x0f;
    MT_DataBus&=0xf0;
    MT_DataBus=com;
    _nop_();
    MT_CLK=0;
    MT_CS=1; 
    P2=0x00;
    EA=1;
}

/**************************************
*名称:     void MT8880_WD(uc dat);
*功能:      写MT8880的发送数据寄存器
*入口参数: dat--要发送的数据
*出口参数: 无
**************************************/
void MT8880_WD(uc dat)
{
    EA=0;
    MT_CS=0;
    MT_RS0=0;          
    MT_RW=0;
    MT_CLK=1;
    dat&=0x0f;
    MT_DataBus&=0xf0;
    MT_DataBus|=dat;
    MT_CLK=0;
    MT_CS=1;
    P2=0x00;
    EA=1;
}

/***************************************
*名称:      uc MT8880_RS(void);
*功能:     读MT8880的状态寄存器
*入口参数: 无
*出口参数: temp--读出的数据,低4位有效
***************************************/    

uc MT8880_RS(void)
{
    uc temp;
    EA=0;
    MT_DataBus|=0x0f;  
    MT_CS=0;
    MT_RS0=1;          
    MT_RW=1;
    MT_CLK=1;
    _nop_();
    temp=MT_DataBus;
    temp &=0x0f;
    MT_CLK=0;
    MT_CS=1;   
    P2=0x00;
    EA=1;
    return(temp);
}
/****************************************
*名称:     void InitMT8880(uc mode);
*功能:     初始化MT8880
*入口参数: mode 可以选择CP8880,DTMF8880
*出口参数: 无
****************************************/
void InitMT8880(uc mode)
{    
    MT8880_WC(0x00);    //写控制寄存器,确保控制寄存器指针指向CRA
    MT8880_WC(0x00); 
    MT8880_WC(mode);  //写控制寄存器A
    MT8880_WC(0x00);  //写控制寄存器B
    MT8880_RS();      //读状态寄存器,用以清除各标志         
}
 

相关帖子

沙发
greatzlx|  楼主 | 2007-6-9 14:31 | 只看该作者

大家帮我一下!在线急等!

大家帮我一下!在线急等!

使用特权

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

本版积分规则

1

主题

2

帖子

1

粉丝