nhcxc 2010年04月22日
STC89C52 串口发送XDATA区域数据很奇怪的问题!~
我用串口发送一个数组,发送函数如下:
void Uart_Init() //初始化UART
{
SCON =0x58; //选择串口工作方式,打开接收允许
TMOD|=0x20; //定时器1工作在方式2,
TH1 =0xfd; //实现波特率9600(系统时钟11.0592MHZ)
TL1=0xfd;
PCON |= 0x80; //实现波特率倍增
TR1 =1; //启动定时器T1
ES=1; //允许串行口中断
PS=1; //设计串行口中断优先级
EA =1; //单片机中断允许
}
///初始化没有问题。

void UART_SendData(unsigned char *data_buf,unsigned int iCount)//发送程序
{
bit es;
iUartSendLen = iCount-1;
es=ES;
ES=0;//关闭中断
for(iSendCounter=0;iSendCounter<=iUartSendLen;iSendCounter++)
{
TI=0;
SBUF = data_buf[iSendCounter];
while(!TI);
TI=0;
}
ES=es;
}//这个函数测试也没有问题

void SendDataToWifi(unsigned char *cCommandPara,unsigned char iLength)
{
unsigned char xdata cBuf[300]; //需要发送数据的数组 注意问题就在这行
cBuf[0] = 0x01; // 同步字段31 5f 33 5f 32 33 34
cBuf[1] = 0x02; // 控制字段
cBuf[2]=(iLength+1)>>8;
cBuf[3]=(iLength+1)&0x00ff;
cBuf[4]=GetCrc8(&cBuf[1],3);
memcpy(&cBuf[5],cCommandPara,iLength);
UART_SendData(cBuf,iLength+12);
}

当我定义下面的这个结构接收串口数据的时候,串口发送出去的内容全部变成了 OX02
typedef struct Buffer2
{
unsigned char gcATReceData[300];
unsigned int gcATReceCount;
} Buffer2;
struct Buffer2 xdata ATReceBuffer[1];//这里也必须把数组定义到XDATA里面

现在问题是:
当我把
unsigned char xdata cBuf[300];
改成
unsigned char cBuf[50];

发送和接收都正常,
但由于一次发送的内容比较多,必须把变量定义到 XDATA空间里面。。
我该怎么解决这个问题?
...全文
732 点赞 收藏 14
写回复
14 条回复

还没有回复,快来抢沙发~

发动态
发帖子
单片机/工控
创建于2007-09-28

1.0w+

社区成员

2.8w+

社区内容

硬件/嵌入开发 单片机/工控
社区公告
暂无公告