我用串口发送一个数组,发送函数如下:
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空间里面。。
我该怎么解决这个问题?
------解决方案--------------------
STC可用的xdata空间有多大?你可以再试试定义unsigned char xdata cBuf[50]; 试试效果如何,看发送正常不?
凌晨3点多,呵呵,人人都在睡觉呢,,,,
------解决方案--------------------