|
AT89S52能运行AT89C2051就运行不了,高手进来帮忙看看,小弟不胜感激!
[复制链接]
#include
#define data00 P1
#define uchar unsigned char
uchar recddata=0x00,datastore[6]={0x20,0x20,0x20,0x20,0x20,0x20},i=1,j=0; //i为datastore数据包变量,j为待发送到8952的当前位置,recddata为接收串口的变量
bit datacom=1,C3en=0,C2en=0,C8en=0,reccent=0; //datacom 为0表示下一个为数据,1表示下一个为信令 ,分别有C3,C2,C8三种信令,先收信令,再打开相应的位置存储下一个数据 :reccent为接收到C3 06标志位
void sint4()
{
if(RI)
{
recddata=SBUF;
//P1^0=~P1^0;
if(recddata!=0xA5)
{
if(datacom==1) //信令识别
{
switch(recddata)
{
case 0xC2: C2en=1; break;
case 0xC3: C3en=1; break;
case 0xC8: C8en=1; break;
default: break;
}
datacom=0; //关闭信令,准备接收数据
}
else
{ //信令识别
if(C3en==1)
{
switch(recddata)
{
case 0x06: datastore[0]=0x06;reccent=1;i=1; break; //有进话(可能是拨号也可能是广播)
case 0x32: datastore[5]=0x32; break; //电话拨进来
case 0x33: datastore[0]=0x00; reccent=0; break; //已接通,字幕机收到后停止显示
case 0x3A: datastore[5]=0x3A; break; //有广播
default: break;
}
C3en=0;
}
if(C2en==1 && reccent==1) //来电号码存放
{
datastore=recddata;
i++;
C2en=0; //关闭数据接收,换做接收信令
} //来电号码存放
if(C8en==1 && reccent==1) {if(recddata==0x1A) datastore[0]=0x00; C8en=0; reccent=0;} //拨打方已挂断或超时自动挂断
datacom=1; //关闭数据接收,换做接收信令
}
}
RI=0;
}
}
void int4()interrupt 4 //串口中断
{
sint4();
}
void int0ans()//中断0响应程序,发送数据到8952
{
data00=datastore[j];
j++;
if(j==5) j=0;
}
void int0()interrupt 0
{
int0ans();
}
void main(void) //主程序
{
data00=0xff;
TMOD=0x20; SCON=0x40; //串口模试设为1 起始接收各1位加8位数据
TH1=0xfe; TL1=0xfe; //6.142M晶振波特率为8000
EA=1; //打开中断总开关
ES=1; //打开串口中断
PS=1; //串口优先级设为1
IT0=0;
EX0=1; //打开外部中断0
RI=0; //串口接收中断初始化
TR1=1;
REN=1;
while(1)
{
//P3_7=~P3_7;
//data00=~data00;
}
}
代码全在上面,有知道哪里有问题的请帮忙指点下,先谢谢各位!
|
|