关于编写zigbee中温度数据采集传输的问题
时间:10-02
整理:3721RD
点击:
本人在校学生,前段时间有个老师给我几块天运科技的2430,发现自学起来比较吃力,不知道从哪下手,没有顺序。现在想自己搞个通过点对点通信传送温度数据,这个过程中发现模块总是无故出现问题,总结以后发现,涉及等待晶振稳定的部分出了问题。只要注释掉这句就好了while(!XOSC_STABLE); 但貌似板子上找不到问题,不知道怎么回事。
再说回前头提到的,我在发送数据的时候发现串口接受到的总不如意,我也不知道怎么改,先贴出代码。
/****************************************************************
*函数功能 :串口发送字符串函数 *
*入口参数 : data:数据 *
* len :数据长度 *
*返 回 值 :无 *
*说 明 : *
****************************************************************/
void UartTX_Send_String(char *Data)
{
char j;
for(j=0;j<10;j++)
{
U0DBUF = *Data++;
while(UTX0IF == 0);
UTX0IF = 0;
}
}
void UartTX_Send_word(char word)
{
U0DBUF = word;
while(UTX0IF == 0);
UTX0IF = 0;
}
/****************************************************************
*函数功能 :接收 *
****************************************************************/
void receiveMode(void)
{
BYTE* receiveBuffer;
BYTE length;
BYTE res;
BYTE sender;
char tt[10];
while(1)
{
LED1 = LED_ON;
res = radioReceive(&receiveBuffer, &length, RECEIVE_TIMEOUT, &sender);
LED1 = LED_OFF;
//for(l=0;l<5;l++)
//tt[l]=*receiveBuffer++;
//sprintf(tt,(char *)"%dC",receiveBuffer);
if(res == TRUE)
{
LED2 = LED_ON;
UartTX_Send_String(receiveBuffer);
UartTX_Send_word(0x0A);
halWait(200);
}
else
{
LED2 = LED_OFF;
halWait(200);
}
LED2 = LED_OFF;
}
}
/****************************************************************
*函数功能 :发送 *
****************************************************************/void contionuousMode(void)
{
BOOL res;
BYTE sendBuffer[1]="hello";
//BYTE i;
//问题是这里,发送部分目前发送hello是成功的,但如果像现在
while(1) //这样,假如去掉注释,对sendBuffer赋值,输出的结果就乱了
{ //我想让最后输出的是字符串格式,因为最后要输出温度值的嘛
//i=9; //不然串口助手输出会变成ascii码的结果,不知道这个问题怎么解决
//sendBuffer[0]=i;
LED2 = LED_OFF;
LED1 = LED_ON;
res = radioSend(sendBuffer, sizeof(sendBuffer), remoteAddr, DO_NOT_ACK );
halWait(200);
LED1 = LED_OFF;
halWait(200);
if(res == TRUE)
{
LED2 = LED_ON;
halWait(200);
}
else
{
LED2 = LED_OFF;
halWait(200);
}
}
}
再说回前头提到的,我在发送数据的时候发现串口接受到的总不如意,我也不知道怎么改,先贴出代码。
/****************************************************************
*函数功能 :串口发送字符串函数 *
*入口参数 : data:数据 *
* len :数据长度 *
*返 回 值 :无 *
*说 明 : *
****************************************************************/
void UartTX_Send_String(char *Data)
{
char j;
for(j=0;j<10;j++)
{
U0DBUF = *Data++;
while(UTX0IF == 0);
UTX0IF = 0;
}
}
void UartTX_Send_word(char word)
{
U0DBUF = word;
while(UTX0IF == 0);
UTX0IF = 0;
}
/****************************************************************
*函数功能 :接收 *
****************************************************************/
void receiveMode(void)
{
BYTE* receiveBuffer;
BYTE length;
BYTE res;
BYTE sender;
char tt[10];
while(1)
{
LED1 = LED_ON;
res = radioReceive(&receiveBuffer, &length, RECEIVE_TIMEOUT, &sender);
LED1 = LED_OFF;
//for(l=0;l<5;l++)
//tt[l]=*receiveBuffer++;
//sprintf(tt,(char *)"%dC",receiveBuffer);
if(res == TRUE)
{
LED2 = LED_ON;
UartTX_Send_String(receiveBuffer);
UartTX_Send_word(0x0A);
halWait(200);
}
else
{
LED2 = LED_OFF;
halWait(200);
}
LED2 = LED_OFF;
}
}
/****************************************************************
*函数功能 :发送 *
****************************************************************/void contionuousMode(void)
{
BOOL res;
BYTE sendBuffer[1]="hello";
//BYTE i;
//问题是这里,发送部分目前发送hello是成功的,但如果像现在
while(1) //这样,假如去掉注释,对sendBuffer赋值,输出的结果就乱了
{ //我想让最后输出的是字符串格式,因为最后要输出温度值的嘛
//i=9; //不然串口助手输出会变成ascii码的结果,不知道这个问题怎么解决
//sendBuffer[0]=i;
LED2 = LED_OFF;
LED1 = LED_ON;
res = radioSend(sendBuffer, sizeof(sendBuffer), remoteAddr, DO_NOT_ACK );
halWait(200);
LED1 = LED_OFF;
halWait(200);
if(res == TRUE)
{
LED2 = LED_ON;
halWait(200);
}
else
{
LED2 = LED_OFF;
halWait(200);
}
}
}