<br />大哥大姐帮我看一下我的程序问题出在哪?是不是程序有问题呀?我把程序烧进芯片后各P1口和P3口全是高电平,P2口在1~3V左右,按复位也没用。救救我吧!<br />还有请教一下那个判断回铃音,拨号音,忙音的程序怎么弄?<br /><br />程序如下:大哥们一定帮我解决!<br />#include <at89x52.h><br />#include <intrins.h><br />#define uc unsigned char <br />#define ui unsigned int<br /><br />/*-----------------------------------<br />功能: I/O口,全局变量定义<br />-----------------------------------*/<br />extern void MT8880_WD(uc dat);<br />extern uc MT8880_RD(void);<br />extern uc MT8880_RS(void);<br />extern void InitMT8880(uc mode);<br />extern void UpHandle(void);<br />extern void DownHandle(void);<br />extern void Delay(ui count);<br />extern void Beep(uc count);<br />extern void InitBreak(void);<br />extern void Dial(void);<br />//全局变量:<br />#define HandMode 1 //提机模式<br />#define DTMF8880 0x0d //DTMF模式常数<br />#define CP8880 0x0f //CP模式常数<br />#define MT_DataBus P2<br />/*-----------------------------------<br />功能: 主程序<br />-----------------------------------*/<br /><br />//引脚定义<br />sbit MT_D0 = P2^0;<br />sbit MT_D1 = P2^1;<br />sbit MT_D2 = P2^2;<br />sbit MT_D3 = P2^3;<br />sbit MT_CS = P3^1;<br />sbit MT_IRQ = P3^4;<br />sbit MT_RW = P2^5;<br />sbit MT_RS0 = P2^6;<br />sbit MT_CLK = P2^7;<br />sbit P_Online = P1^3; //摘机<br />sbit P_Beep = P3^5; //蜂鸣器鸣叫线<br />sbit P_Alarm0 = P1^0; //小偷入室检测线<br />sbit P_Alarm1 = P1^1; //火灾检测线<br />sbit APR_M1 = P1^4; //语音报警1<br />sbit APR_M2 = P1^5; //语音报警2<br /><br />//************************************<br />void main(void)<br />{<br /> EA=0;<br /> P1=0x30;<br /> P2=0x00;<br /> P3=0x00;<br /> EA=1; <br /> <br /> while(P_Alarm0)<br /> {Delay(200);<br /> if(P_Alarm0)<br /> {Dial(); //拨号<br /> APR_M1=0;<br /> Delay(100);<br /> APR_M1=1;<br /> Delay(2000);<br /> DownHandle();<br /> Delay(50);<br /> for(;;){Beep(1);;}<br /> }<br /> }<br /> while(P_Alarm1)<br /> {Delay(200);<br /> if(P_Alarm1)<br /> {Dial(); //拨号<br /> APR_M2=0;<br /> Delay(100);<br /> APR_M2=1;<br /> Delay(2000);<br /> DownHandle();<br /> Delay(50);<br /> Beep(1);<br /> for(;;){;}<br /> }<br /> }<br />}<br /><br />/**************************************<br />*名称: void Dial(void);<br />*功能: 拨号子程序<br />*入口参数: 无<br />*出口参数: 无<br />**************************************/<br />void Dial(void)<br />{ uc data Number[7];<br /> uc i; <br /> Number[0]=1;<br /> Number[1]=2;<br /> Number[2]=3;<br /> Number[3]=4;<br /> Number[4]=5;<br /> Number[5]=6;<br /> Number[6]=7;<br />//开始拨号:<br /> UpHandle(); <br /> Delay(5);<br /> InitMT8880(DTMF8880);<br /> for(i=0;i<7;i++)<br /> {MT8880_WD(Number); //拨号<br /> Delay(5);<br /> }<br /> Delay(10);<br />}<br /><br />/**************************************<br />*名称: void UpHandle(void);<br />*功能: 模拟摘机<br />*入口参数: 无<br />*出口参数: 无<br />**************************************/<br />void UpHandle(void)<br />{<br /> EA=0;<br /> if (HandMode)<br /> P_Online=1;<br /> else P_Online=0;<br /> EA=1;<br />}<br /><br />/**************************************<br />*名称: void DownHandle(void);<br />*功能: 模拟挂机<br />*入口参数: 无<br />*出口参数: 无<br />**************************************/<br />void DownHandle(void)<br />{<br /> EA=0;<br /> if (HandMode)<br /> P_Online=0;<br /> else P_Online=1;<br /> EA=1;<br />}<br /><br />/**************************************<br />*名称: void Delay(ui count);<br />*功能: 延时<br />*入口参数: ui count,<br />*出口参数: 无<br />**************************************/<br />void Delay(ui count)<br />{ ui i,k;<br /> EA=0;<br /> for(i=0;i<count;i++)<br /> {for(k=0;k<1000;k++){;}<br /> }<br /> EA=1;<br />}<br /><br />/**************************************<br />*名称: void Beep(uc count);<br />*功能: 蜂鸣器鸣叫<br />*入口参数: count 鸣叫次数<br />*出口参数: 无<br />**************************************/<br />void Beep(uc count)<br />{ <br /> EA=0;<br /> for(;count>0;count--)<br /> { <br /> P_Beep=1; <br /> Delay(50); <br /> P_Beep=0;<br /> Delay(50);<br /> }<br /> EA=1;<br />}<br /><br />/*-------------------------------------<br />*功能: 8880功能函数<br />-------------------------------------*/<br /><br /><br />/**************************************<br />*名称: void MT8880_WC(uc com);<br />*功能: 写控制寄存器CRA或CRB<br />*入口参数: com--要写入的数据<br />*出口参数: 无<br />**************************************/<br />void MT8880_WC(uc com)<br />{<br /> EA=0;<br /> MT_CS=0; <br /> MT_RS0=1;<br /> MT_RW=0;<br /> _nop_();<br /> MT_CLK=1;<br /> com&=0x0f;<br /> MT_DataBus&=0xf0;<br /> MT_DataBus=com;<br /> _nop_();<br /> MT_CLK=0;<br /> MT_CS=1; <br /> P2=0x00;<br /> EA=1;<br />}<br /><br />/**************************************<br />*名称: void MT8880_WD(uc dat);<br />*功能: 写MT8880的发送数据寄存器<br />*入口参数: dat--要发送的数据<br />*出口参数: 无<br />**************************************/<br />void MT8880_WD(uc dat)<br />{<br /> EA=0;<br /> MT_CS=0;<br /> MT_RS0=0; <br /> MT_RW=0;<br /> MT_CLK=1;<br /> dat&=0x0f;<br /> MT_DataBus&=0xf0;<br /> MT_DataBus|=dat;<br /> MT_CLK=0;<br /> MT_CS=1;<br /> P2=0x00;<br /> EA=1;<br />}<br /><br />/***************************************<br />*名称: uc MT8880_RS(void);<br />*功能: 读MT8880的状态寄存器<br />*入口参数: 无<br />*出口参数: temp--读出的数据,低4位有效<br />***************************************/ <br /><br />uc MT8880_RS(void)<br />{<br /> uc temp;<br /> EA=0;<br /> MT_DataBus|=0x0f; <br /> MT_CS=0;<br /> MT_RS0=1; <br /> MT_RW=1;<br /> MT_CLK=1;<br /> _nop_();<br /> temp=MT_DataBus;<br /> temp &=0x0f;<br /> MT_CLK=0;<br /> MT_CS=1; <br /> P2=0x00;<br /> EA=1;<br /> return(temp);<br />}<br />/****************************************<br />*名称: void InitMT8880(uc mode);<br />*功能: 初始化MT8880<br />*入口参数: mode 可以选择CP8880,DTMF8880<br />*出口参数: 无<br />****************************************/<br />void InitMT8880(uc mode)<br />{ <br /> MT8880_WC(0x00); //写控制寄存器,确保控制寄存器指针指向CRA<br /> MT8880_WC(0x00); <br /> MT8880_WC(mode); //写控制寄存器A<br /> MT8880_WC(0x00); //写控制寄存器B<br /> MT8880_RS(); //读状态寄存器,用以清除各标志 <br />}<br /> |
|